Dockerfile是一个包含用于组合镜像的命令的文本文档 Docker通过读取Dockerfile中的指令按步自动生成镜像
docker build -t 机构/镜像名<:tags> Dockerfile目录 FROM - 基于基准镜像#制作基准镜像(基于centos:lastest)
FROM centos
#不依赖任何基准镜像base image
FROM scratch
# 基于 采用openjdk8 + tomcat 9.0.22 的镜像
FROM tomcat: 9.0.22-jdk8-openjdk尽量使用官方提供的Base Image
LABEL & MAINTAINER - 说明信息MAINTAINER SvenAugustus
LABEL version = "1.0"
LABEL description = "XXX"WORKDIR - 设置工作目录WORKDIR /usr/local
#自动创建
WORKDIR /usr/local/newdir 尽量使用绝对路径
ADD & COPY - 复制文件#复制到/root
ADD hello /root
#添加根目录并解压
ADD test.tar.gz / ADD 除了复制,还具备添加远程文件功能
ENV- 设置环境常量ENV JAVA_HOME /usr/local/openjdk8
RUN ${JAVA_HOME}/bin/java -jar test.jar尽量使用环境常量,可提高程序维护性
EXPOSE - 暴露容器端口# 将容器内部端口暴露给物理机
EXPOSE 8080docker run -p 8000:8080 tomcatRUN : 在Build构建时执行命令ENTRYPOINT : 容器启动时执行的命令CMD : 容器启动后执行默认的命令或参数RUN-构建时运行 RUN yum install -y vim #Shell 命令格式
# 示例:
RUN ["yum","install","-y","vim"] #Exec命令格式ENTRYPOINT启动命令ENTRYPOINT(入口点)用于在容器启动时执行命令
Dockerfile中只有最后一个ENTRYPOINT会被执行
# 示例:
ENTRYPOINT ["ps"] #推荐使用Exec格式CMD默认命令CMD用于设置默认执行的命令,如果docker run 携带了参数,那么 CMD 设置的参数命令就会被忽略
如Dockerfile中出现多个CMD,则只有最后一个被执行
如容器启动时附加指令,则CMD被忽略
# 示例:
CMD ["ps" , "-ef"] #推荐使用Exec格式by Sven Augustus https://my.oschina.net/langxSpirit