内容解析
# 基于这个镜像,build 时会自动去找这个镜像
FROM 镜像名:版本
# 标签信息
LABEL maintainer="自己的邮箱"
# docker 容器启动后的环境变量,启动容器后进入就可以看到这个变量
ENV VERSION 版本号
# dockerfile 制作时候的环境变量
ARG currentPath=/home
# 默认就是 root 用户
USER root
# 制作镜像核心(用 && 连接多个命令或者写多个 RUN,一个 RUN 一个镜像层)
RUN 镜像中要执行的 linux 命令 && ... &&
# 挂在卷,可以在容器中看到这个目录
VOLUME ["/data"]
# 设置工作目录,使用了 dockerfile 制作中 ARG 的环境变量
WORKDIR $currentPath
# 把当前系统的文件 copy 到容器中(写点表示 WORKDIR 这个目录)(把文件名拷贝到点)
COPY 文件名 .
# 表示容器启动时候容器支持的端口
EXPOSE 端口号
# CMD 的一些指令可以自己写
CMD 一些指令
# 检查容器是否健康(interval 表示间隔 5s 检查一次,timeout 表示 3s 没结果就是有问题)
HEALTHCHECK --interval=5s --timeout=3s CMD curl -fs http://localhost/ || exit 1
DockerFile 说明
1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2:指令按照从上到下,顺序执行
3:#表示注释
4:每条指令都会创建一个新的镜像层,并对镜像进行提交
Docker执行Dockerfile的大致流程
(1)docker从基础镜像运行一个容器
(2)执行一条指令并对容器作出修改
(3)执行类似docker commit的操作提交一个新的镜像层
(4)docker再基于刚提交的镜像运行一个新容器
(5)执行dockerfile中的下一条指令直到所有指令都执行完成
文件实例
FROM centos:7
RUN yum -y install wget curl
COPY a.txt /opt
ADD ansible-2.4.2.0-2.el7.noarch.rpm /opt
ENV ABC=123
EXPOSE 80
WORKDIR /usr/local
CMD ["sleep","36000"]
文章评论