常用命令
删除所有镜像、容器
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容器中。这样在网站代码修改后,在容器中可以实时更新。
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
- 启动容器
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
- 搭建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
- 搭建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
- 搭建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