关于docker-compose 和Dockerfile的认识

关于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 和Dockerfile的认识

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
上一篇:Dockerfile 安装python


下一篇:Docker入门系列之一:什么是Docker?