Dockerfile
一、Dockerfile概念
1.Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下,可以为Dockerfile父目录的子目录
2.Dockerfile中相对路径默认都是Dockerfile所在的目录
3.Dockerfile中一定要惜字如金,能写到一行的指令,一定要写到一行,原因是分层构建,联合挂载这个特性。
Dockerfile中每一条指令被视为一层
4.Dockerfile中指明大写(约定俗成)
Dockerfile的完整示例如下所示:
#基于centos镜像
FROM centos
#维护人的信息
MAINTAINER The CentOS Project <123456789@qq.com>
#安装httpd软件包
RUN yum -y update
RUN yum -y install httpd
#开启80端口
EXPOSE 80
#复制网站首页文件至镜像中web站点下
ADD index.html /var/www/html/index.html
#复制该脚本至镜像中,并修改其权限
ADD run.sh /run.sh
RUN chmod 775 /run.sh
#当启动容器时执行的脚本文件
CMD ["/run.sh"]
由上可知,Dockerfile结构大致分为四个部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令。
二、Dockerfile命令解析
1、FROM
指明构建的新镜像是来自于哪个基础镜像,例如:
FROM <image>
FROM <image>:<tag>
FROM <image>:<digest>
三种写法,其中<tag>和<digest> 是可选项,如果没有选择,那么默认值为latest
FROM centos:6
2、MAINTAINER
指明镜像维护着及其联系方式(一般是邮箱地址),例如:
MAINTAINER VillianTsang <villiantsang@qq.com>
MAINTAINER并不推荐使用,更推荐使用LABEL来指定镜像作者,例如:
LABEL maintainer="villiantsang.cn"
3、RUN
构建镜像时运行的Shell命令,例如:
RUN ["yum", "install", "httpd"]
RUN yum install httpd
4、CMD
启动容器时执行的Shell命令,例如:
CMD ["-C", "/start.sh"]
CMD ["/usr/sbin/sshd", "-D"]
CMD /usr/sbin/sshd -D
RUN&&CMD
不要把RUN和CMD