1. FROM
FROM参数:从什么基础镜像构建新的镜像。
举例 : FROM centos, FROM ubuntu, FROM hello-world
使用 centos 镜像作为基础镜像。
注意:尽量使用官方的镜像作为基础镜像, 为了安全起见。
2. LABEL
LABEL参数:从上到下依次为,作者、版本、描述
LABEL maintainer = "abc@163.com"LABEL version = "1.1.1"
LABEL description="this is description"
3. RUN
RUN命令:构建镜像所需要执行的指令并创建新的Image Layer
RUN yum update && yum install -y vim \ python-env # 反斜线换行
RUN apt-get update && apt-get install -y perl \ pwgen --no-install-recommends && rm -rf \ /var/lib/apt/lists/* # 注意清理cache
RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
# 注意事项为了美观,复杂的RUN请用反斜线换行!避免无用分层,合并多条命令为一行!
4. WORKDIR
WORKDIR参数:指定目录后续操作在指定的目录进行
WORKDIR /root
WORKDIR /test # 如果没有会自动创建目录
WORKDIR demo
RUN pwd # 输出结果应该是 /test/demo
# 注意事项在dockerfile中尽量使用WORKDIR,不要使用RUN cd,尽量使用绝对目录
5. ADD and COPY
ADD和COPY:相同点都是将本地文件添加到镜像中
ADD:它可以将压缩文件进行解压
ADD hello /ADD test.tar.gz / # 添加到根目录并解压
WORKDIR /root
ADD hello test/ # /将hello文件添加到 /root/test/hello
WORKDIR /root
COPY hello test/
# 注意大部分情况下,COPY优先于ADD!
ADD除了COPY还有额外的功能(解压)!
添加远程文件/目录请使用curl或者wget
6. ENV
ENV参数:设置环境变量
# 引用常量RUN apt-get install -y mysql-server="${MYSQL_VERSION}" \ && rm -rf /var/lib/apt/lists/*
# 注意ENV 尽量去使用,增加可维护性
7. CMD 和 ENTRYPOINT
CMD参数:设置容器启动后默认执行的命令和参数
两种格式:1. shell格式
RUN apt-get install -y vim
CMD echo "hello docker"
ENTRYPOINT echo "hello docker"
使用shell方式创建镜像
使用shell模式下执行命令和linux执行shell命令一样,直接识别$name变量进行替换
2. exec格式RUN ["apt-get","install", "-y", "vim"]
CMD ["/bin/echo", "hello docker""]
ENTRYPOINT ["/bin/echo", "hello docker"]
exec模式下,只是单纯的当作字符串进行输出,如果想要shell的效果,可以将参数进行修改
ENTRYPOINT ["/bin/bash", "-c", "echo hello docker"], 此修改方式为在bash中执行,第三个参数为执行命令。
# 注意事项容器启动时默认执行命令
如果docker run指定了其他命令,CMD命令被忽略
如果定义了多个CMD,只有最后一个会执行
ENTRYPOINT参数:让容器以应用程序或者服务的形式运行不会被忽略,一定会执行
CMD命令会被覆盖
使用ENTRYPOINT执行命令不会被覆盖,会执行