9. Dockerfile指令 - 图1

  1. FROM # 基础镜像,基于xxx构建
  2. MAINTAINER # 作者信息, name+email
  3. RUN # 镜像构建时候运行命令
  4. ADD # 添加的组件
  5. WORKDIR # 镜像的工作目录
  6. VOLUME # 挂载目录位置
  7. EXPOSE # 指定暴露端口
  8. CMD # 指定容器启动时要执行的命令,只有最后一个会生效(替换)
  9. ENTRYPOINT # 指定容器启动时要执行的命令,可以追加命令(追加)
  10. ONBUILD # 当构建一个镜像继承自当前镜像时触发这个命令(触发器)
  11. COPY # 将文件拷贝到镜像中
  12. ENV # 设置环境变量

实战测试

虽然官方的centos已经内置了很多功能,但是他为了精简,阉割了部分功能,假如说我们要用,因此我们需要对官方镜像进行定制化,就需要用到dockerfile。
9. Dockerfile指令 - 图2

  1. # 基于 centos
  2. FROM centos
  3. # 作者信息
  4. LABEL maintainer="lbxlh<1318659507@qq.com>"
  5. # 常量区 ---------------------
  6. ARG EXPOSE_PORT=80
  7. # 常量区 ---------------------
  8. # 环境变量 -------------------
  9. ENV WORK_DIR = "/usr/local"
  10. # 环境变量 -------------------
  11. # 启动镜像后的工作目录
  12. WORKDIR ${WORK_DIR}
  13. # 镜像构建时添加所需依赖 一个 run 命令创建一层镜像
  14. RUN yum install vim -y \
  15. && yum install net-tools -y
  16. # 暴露端口
  17. EXPOSE ${EXPOSE_PORT}
  18. # finally ------------
  19. CMD [ "echo" ,${WORK_DIR}]
  20. CMD [ "echo","buid process end" ]
  21. CMD [ "/bin/bash" ]

这里需要注意 一条 RUN 命令代表一层镜像,所以尽可能的少用RUN命令

run 和 cmd 命令区别

  • run命令:执行命令创建新的镜像层,通常用于安装软件
  • cmd命令: 容器启动后执行的命令

构建镜像

  1. docker build -f Dockerfile -t centos-plus .
  2. [+] Building 0.2s (7/7) FINISHED
  3. => [internal] load build definition from Dockerfile 0.0s
  4. => => transferring dockerfile: 37B 0.0s
  5. => [internal] load .dockerignore 0.0s
  6. => => transferring context: 2B 0.0s
  7. => [internal] load metadata for docker.io/library/centos:latest 0.0s
  8. => [1/3] FROM docker.io/library/centos 0.0s
  9. => CACHED [2/3] WORKDIR = /usr/local 0.0s
  10. => CACHED [3/3] RUN yum install vim -y && yum install net-tools -y 0.0s
  11. => exporting to image 0.0s
  12. => => exporting layers 0.0s
  13. => => writing image sha256:d11cd43416af8f14bf21d6f2baa532e7de2219040e4c99f39c76feb0c31a5ab3 0.0s
  14. => => naming to docker.io/library/centos-plus

测试

9. Dockerfile指令 - 图3

现在可以看到我们定制化的centos里面有了 net-tools 和 vim