关于docker-compose 和Dockerfile的认识
- docker-compose 主要是用来编排容器的,Dockerfile主要是用来构建镜像。
Dockerfile简介
- scratch是所有镜像的基础,是base镜像。
- 每条保留字指令必须为大写且必须有参数
- 指令按顺序执行
- 每条指令都会创建一个行的镜像层,并且提交。
Dockerfile使用说明
WORKDIR
用于指定后续命令执行的目录,非常类似cd
WORKDIR /usr/local/
FROM
用于指定从哪个镜像引入,必须是第一条命令,可以指定版本。
FROM <image>:<tag>
- 示例
FROM mysql:5.6
RUN
用于在生成镜像时使用指令,比如使用sed来修改apt仓库源或者来拉取需要的扩展等等。
RUN [command param1 param2]
示例
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk upgrade --update
ADD
将本地的资源拷贝到镜像中并解压缩
ADD <src>... <dest>
ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
示例
ADD . /usr/local/go/src/git.my.cn/trade/trade
ADD a?.txt /home 可以支持通配
CMD
构建容器后调用,也就是说这条命令不是用来生成镜像的,只有在镜像生成容器,启动容器之后才会调用。
CMD ["executable","param1","param2"] (执行可执行文件,优先)
CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
CMD command param1 param2 (执行shell内部命令)
示例
CMD trade-zxkp
ENTRYPOINT
用处和CMD有点类似,不同的是docker run 的时候参数会带给ENTRYPOINT,没个Dockerfile也只能有一个ENTRYPOINT。
ENTRYPOINT ["sh","/var/buildsh/start.sh"]
ENV
用于设置环境变量
ENV <key> <value> #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
ENV <key>=<value> ... #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
示例
ENV GOPATH /usr/local/go
EXPOSE
容器需要暴露的端口,EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在run的时候用-p指定端口的映射关系。
EXPOSE 80 1002 8006 9016 8008 8016 9011
一张图总结
docker-compose使用说明
docker-compose.yaml文件
version: "3"
#networks 定义网络名
networks:
trade-dev:
#定义服务
services:
##################web################################
web:
#build表示通过Dockerfile来生成镜像,并通过这个镜像来启动容器。
build: ./web
#容器名称
container_name: web
#docker重启时 容器跟着一起启动
restart: always
#指定网络
networks:
- trade-dev
#指定宿主机和容器的端口映射,左边是宿主机右边是容器。
ports:
- "1002:1002"
- "80:80"
#卷挂载 左边是宿主机右边是容器
volumes:
# 1. mount your workdir path
- ./workdir:/var/www
# 2. mount your configuration of site
- ./web/nginx/conf.d:/etc/nginx/conf.d
# 3. buildsh
- ./web/buildsh:/var/buildsh
# 4. if you want to override php.ini file
- ./web/php/custom.ini:/etc/php.d/custom.ini
# 5. mount log
- ./web/log/nginx:/var/log/nginx
- ./web/log/php-fpm:/var/log/php-fpm
#####################################################
####docker-compose 命令
docker-compose up
用于编排并启动容器,如果docker-compose.yaml文件中service用的是build 的话,还会先构建一个镜像。
# -d 表示在后台运行容器
docker-compose up -d
docker-compose ps
用于查看容器的运行情况,类似linux下的ps命令。
docker-compose <stop|start|restart>
停止|启动|重新启动 容器服务,可以指定特定的服务
#停止所有
docker-compose stop
#停止nginx服务,这个服务是在docker-compose.yaml里面配置的。
docker-compose stop nginx
#重启nginx
docker-compose restart nginx