FROM # 基础镜像,基于xxx构建
MAINTAINER # 作者信息, name+email
RUN # 镜像构建时候运行命令
ADD # 添加的组件
WORKDIR # 镜像的工作目录
VOLUME # 挂载目录位置
EXPOSE # 指定暴露端口
CMD # 指定容器启动时要执行的命令,只有最后一个会生效(替换)
ENTRYPOINT # 指定容器启动时要执行的命令,可以追加命令(追加)
ONBUILD # 当构建一个镜像继承自当前镜像时触发这个命令(触发器)
COPY # 将文件拷贝到镜像中
ENV # 设置环境变量
实战测试
虽然官方的centos已经内置了很多功能,但是他为了精简,阉割了部分功能,假如说我们要用,因此我们需要对官方镜像进行定制化,就需要用到dockerfile。
# 基于 centos
FROM 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