docker实践

常用命令

删除所有镜像、容器

docker rmi $(docker images)
docker rm $(docker ps -aq)

dockerfile当前目录构建镜像

docker build -t gqj/node .

dockerfile不在当前目录构建镜像

docker build -t gqj/node -f /User/qgj/Dockfile_base .

以镜像启动容器

docker run -it --name nodeapp gqj/node

进入容器,redis-primary是容器名

docker exec -it redis-primary /bin/bash

网络信息,express是网络名

docker network inspect express

如果构建镜像失败,找到容器ip,进入容器中查看

docker run -it sfavsdvsa /bin/bash

nginx应用服务器

创建一个nginx web服务器镜像,将网站代码放到宿主机的一个目录并挂载到nginx容器中。这样在网站代码修改后,在容器中可以实时更新。

  1. 创建目录nginx/nginx,下载nginx配置文件。创建目录nginx/website,下载网页代码
  2. 创建nginx镜像
FROM nginx:1.17
RUN mkdir -p /var/www/html/website
ADD nginx/global.conf /etc/nginx/conf.d/
ADD nginx/nginx.conf /etc/nginx/nginx.conf
  1. 启动容器
docker run -d --name nginx -p 80 -v \ 
~/Documents/workspace/dockerwork/sample/website:/var/www/html/website \ 
gqj/nginx nginx

-v指定共享数据卷
访问nginx映射端口,只跳转到nginx欢迎页面。进入容器后发现/etc/nginx/conf.d下还有配置文件default.conf,将该文件删除,就可以访问到静态页面。

案例2

创建一个拉取war包的容器pullwar,并指定一个挂载点。再创建另一个容器tomcat,和上一个容器共享挂载点。pullwar负责将war包拉取下来,tomcat负责启动tomcat服务器。通过挂载点共享war包
1.创建pullwar容器
docker run -it --name pullwar gqj/pullwar https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war
2.创建tomcat容器
docker run -d -P --name tomcat --volumes-from pullwar gqj/tomcat

node+redis+logstash

搭建一个node,一个redis集群,一个logstash日志收集器。node项目使用redis存储session。logstash收集node和redis的日志。

1.创建网络,用到的容器都使用该网络

docker network create express
  1. 搭建node
  • 宿主机创建目录node/nodejs/nodeapp,将node项目代码下载到该目录
  • nodejs目录中使用Dockerfile构建镜像,名称为gqj/node
FROM node:8-jessie
RUN mkdir -p /var/log/nodeapp
#日志挂载点
VOLUME ["/var/log/nodeapp"]
#宿主机上代码复制到容器
ADD nodeapp /opt/nodeapp/
WORKDIR /opt/nodeapp
RUN npm install
EXPOSE 3000
  • 创建容器
docker run -d -h nodeapp -p 3000:3000 --name nodeapp \ 
--net express gqj/node node server.js
  1. 搭建redis集群
  • 创建目录node/redis,构建镜像,名称为gqj/redis-base
FROM redis:5.0
RUN mkdir -p /var/lib/redis && chown redis:redis /var/lib/redis
RUN mkdir -p /var/log/redis/ && chown redis:redis /var/log/redis/
# 日志挂载点
VOLUME ["/var/lib/redis","/var/log/redis/"]
WORKDIR /var/log/redis
EXPOSE 6379
  • 构建容器

主节点,名称redis-primary

docker run -d -h redis-primary --name redis-primary \ 
--net express gqj/redis-base redis-server \ 
--logfile /var/log/redis/redis-server.log

从节点,名称redis-slave01

docker run -d -h redis-slave01 --name redis-slave01 \ 
--net express gqj/redis-base redis-server \ 
--logfile /var/log/redis/redis-slave01.log \ 
--slaveof redis-primary 6379

临时容器共享容器卷去查看日志信息

docker run -it --rm --volumes-from redis-primary \ 
ubuntu cat /var/log/redis/redis-server.log

访问redis

docker -it --rm --net express redis-base redis-cli -h redis-primary
docker -it --rm --link redis-primary:redis-primary \ 
redis-base redis-cli -h redis-primary
  1. 搭建logstash
  • 创建node/logstash目录,编写logstash.conf
input {
  file {
    type => "syslog"
    path => ["/var/log/nodeapp/nodeapp.log", "/var/log/redis/redis-server.log"]
  }
}
output {
  stdout {
    codec => rubydebug
  }
}
  • 构建镜像,名称为gqj/logstash
FROM docker.elastic.co/logstash/logstash:7.2.0@sha256:0cd49a095195ee2ad2414a438c0e565c4295e61baccf9441fbc805c278494aed
ADD logstash.conf /etc/
WORKDIR /opt/logstash
ENTRYPOINT ["bin/logstash"]
CMD ["-f","/etc/logstash.conf"]
  • 构建容器,名称为logstash
docker run -d -h logstash --name logstash \ 
--net express --volumes-from redis-primary \ 
--volumes-from nodeapp gqj/logstash

参考:
0.第一本Docker书
1.Docker 中通过 Volume 实现持久化存储和数据共享

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容