Dockerfile入门实践
本教程将通过一个具体实例阐述Dockerfile的基本用法,意在使大家对Dockerfile有个初步了解,并不旨在详述Dockerfile的所有指令。在本案中将利用Dockerfile构建基于CentOS系统安装Apache Web服务(httpd)的镜像。
构建Dockerfile
在本地主机新建一个目录(本文为mydocker)存放Dockerfile文件,新建Dockerfile文件:
mkdir /mydocker
cd /mydocker
vim Dockerfile
向Dockerfile文件中添加如下内容,注意本示例基于CentOS系统。
FROM centos:latest
LABEL project="Dockerfile for Apache Web"
RUN yum -y install httpd
EXPOSE 80
VOLUME /var/www/html
ENTRYPOINT [ "/usr/sbin/httpd" ]
CMD ["-D", "FOREGROUND"]
Dockerfile文件简述
此处仅简要介绍一下上述文件中的Dockerfile指令,更多详细信息参考:Dockerfile reference
FROM
"FROM"指令是Dockerfile的第一条命令,指定所构建镜像的基础镜像。本例基于CentOS基础镜像。
LABEL
LABEL指令使用键值对方式向镜像中添加元数据(metadata)。
RUN
镜像的构建指令,在构建镜像时运行某些命令。文中运行安装httpd的指令。
EXPOSE
设置指令,指定镜像将来生成的容器在运行时监听的端口,即容器运行时打开该端口并监听。这里监听Web服务的80端口。
VOLUME
VOLUME指令在镜像中创建一个指定的挂载点,该挂载点可以共享主机的数据或者其他容器的数据。下文中指定“/var/www/html”为挂载点,共享主机的“/data”目录。
ENTRYPOINT
指定镜像将来生成的容器运行时的执行命令入口。这里采用ENTRYPOINT [“executable”, “param1”, “param2”]这种格式,指定web服务的可执行程序httpd。
CMD
作用与ENTRYPOINT类似,可以配合ENTRYPOINT使用。
生成docker镜像
假设当前已经进入到mydocker目录,使用"docker build"命令来生成镜像
docker build -t centos:httpd .
注意:“.”不能遗漏,表示当前目录。
启动容器实例
首先,为刚才在Dockerfile中VOLUME创建挂载点。在本地主机下创建一个新目录(/data目录),用于挂载Apache Web的根目录/var/www/html,对应Dockerfile文件中定义的“VOLUME /var/www/html”。
mkdir /data
随后,启动容器:
docker run -td -p 80:80 -v /data:/var/www/html --name=web centos:httpd
这里-p指定本地主机和容器的端口映射,-v指定数据挂载(volume)。
查看启动的容器实例:
docker ps
验证Apache Web(Httpd)是否安装成功
在/data目录创建index.html文件,由于刚才设定了卷的挂载,index.html将自动挂载到容器的/var/www/html目录,而这个目录是Apache Web的根目录。
cd /data
vim index.html
添加如下内容:
This is an apache httpd test. Build with dockerfile on CentOS 7.
Data are on host but share with volumn /var/www/html on the Docker container.
最后使用"http://localhost/"进行测试,得到如下结果: