
FROM # 基础镜像,基于xxx构建MAINTAINER # 作者信息, name+emailRUN # 镜像构建时候运行命令ADD # 添加的组件WORKDIR # 镜像的工作目录VOLUME # 挂载目录位置EXPOSE # 指定暴露端口CMD # 指定容器启动时要执行的命令,只有最后一个会生效(替换)ENTRYPOINT # 指定容器启动时要执行的命令,可以追加命令(追加)ONBUILD # 当构建一个镜像继承自当前镜像时触发这个命令(触发器)COPY # 将文件拷贝到镜像中ENV # 设置环境变量
实战测试
虽然官方的centos已经内置了很多功能,但是他为了精简,阉割了部分功能,假如说我们要用,因此我们需要对官方镜像进行定制化,就需要用到dockerfile。
# 基于 centosFROM centos# 作者信息LABEL maintainer="lbxlh<1318659507@qq.com>"# 常量区 ---------------------ARG EXPOSE_PORT=80# 常量区 ---------------------# 环境变量 -------------------ENV WORK_DIR = "/usr/local"# 环境变量 -------------------# 启动镜像后的工作目录WORKDIR ${WORK_DIR}# 镜像构建时添加所需依赖 一个 run 命令创建一层镜像RUN yum install vim -y \&& yum install net-tools -y# 暴露端口EXPOSE ${EXPOSE_PORT}# finally ------------CMD [ "echo" ,${WORK_DIR}]CMD [ "echo","buid process end" ]CMD [ "/bin/bash" ]
这里需要注意 一条 RUN 命令代表一层镜像,所以尽可能的少用RUN命令
run 和 cmd 命令区别
- run命令:执行命令创建新的镜像层,通常用于安装软件
- cmd命令: 容器启动后执行的命令
构建镜像
docker build -f Dockerfile -t centos-plus .[+] Building 0.2s (7/7) FINISHED=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 37B 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [internal] load metadata for docker.io/library/centos:latest 0.0s=> [1/3] FROM docker.io/library/centos 0.0s=> CACHED [2/3] WORKDIR = /usr/local 0.0s=> CACHED [3/3] RUN yum install vim -y && yum install net-tools -y 0.0s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:d11cd43416af8f14bf21d6f2baa532e7de2219040e4c99f39c76feb0c31a5ab3 0.0s=> => naming to docker.io/library/centos-plus
测试

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