一:DockerFile一种被Docker程序解释的脚本,DockerFile是由一条条的命令组成的,每条命令对应linux下面的一条命令,Docker程序将这些DockerFile指令再翻译成真正的linux命令,其有自己的书写方式和支持的命令,Docker程序读取DockerFile并根据指令生成Docker镜像,相比手动制作镜像的方式,DockerFile更能直观的展示镜像是怎么产生的,有了DockerFile,当后期有额外的需求时,只要在之前的DockerFile添加或者修改响应的命令即可重新生成新的Docke镜像,避免了重复手动制作镜像的麻烦,具体如下:

1.1:准备环境:

 

[root@docker-server1 opt]# mkdir /opt/dockerfile/nginx -p
[root@docker-server1 opt]# cd /opt/dockerfile/nginx/ #针对要构建的镜像分别创建一个保存DOckerfile的目录

1.2:编写Dockerfile:

 

[root@docker-server1 nginx]# vim /opt/dockerfile/nginx/Dockerfile #生成的镜像的时候会在当前目录查找Dockerfile文件,so名称不可写错,且D必须大写

#My Dockerfile
#"#"为注释,类似于shell
#除了注释之外的第一行,必须是From xxx (xxx是基础镜像)
From centos  #第一行先定义基础镜像,后面的本地有效的镜像名,如果被动没有会从远程仓库下载,很重要

#维护者的信息
MAINTAINER Jack.Zhang 123456@qq.com

###########################其他可选参数##################################################
#USER  #指定该容器运行时的用户名和UID,后续的RUN命令也会使用这面指定的用户执行
#WORKDIR /a
#WORKDIR b  #指定工作目录,最终为/a/b
#VOLUME 设置主机挂载卷
#########################################################################################

#执行的命令,将编译安装nginx的步骤执行一遍
RUN  rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install -y vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
ADD nginx-1.8.1.tar.gz  /tmp/
RUN cd  /tmp/nginx-1.8.1  && ./configure  --prefix=/usr/local/nginx && make && make install
RUN cd /usr/local/nginx/
ADD nginx.conf  /usr/local/nginx/conf/nginx.conf
RUN useradd   nginx -s /sbin/nologin
RUN ln -sv /usr/local/nginx/sbin/nginx  /usr/sbin/nginx 
RUN echo "test nginx page" >  /usr/local/nginx/html/index.html
EXPOSE 80 443  #向外开放的端口,多个端口用空格做间隔,启动容器时候-p需要使用此端向外映射,如: -p 8081:80,则80就是这里的80
CMD ["nginx"] #运行的命令,每个Dockerfile只能有一条,如果有多小则只有最后一条被执行
#如果在从该镜像启动容器的时候也指定了命令,那么指定的命令会覆盖Dockerfile构建的镜像里面的CMD命令,即指定的命令优先级更高,Dockerfile的优先级较低一些

1.3:构建过程:

 

[root@docker-server1 nginx]# cp /usr/local/nginx/conf/nginx.conf .
[root@docker-server1 nginx]# cp /usr/local/src/nginx-1.8.1.tar.gz . #当前目录需要存在构建docker镜像中使用的所有文件
[root@docker-server1 nginx]# docker build -t jack/mynginx:v4  /opt/dockerfile/nginx/   
#jack/mynginx:v4

1.4:构建结束:

1.5:将通过Dockerfile构建的镜像启动一个容器:

[root@docker-server1 nginx]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
jack/mynginx            v4                  92b0d6fb92ab        10 seconds ago      534.5 MB
jack/nginx-test-image   latest              9a05d0ab900e        About an hour ago   518.3 MB
jack/nginx-test-image   V1                  26169a42251e        About an hour ago   518.3 MB
docker.io/nginx         latest              cc1b61406712        12 days ago         181.8 MB
centos                  latest              778a53015523        10 months ago       196.7 MB
[root@docker-server1 nginx]# docker run --name myimage-nginx1 -d -p 8081:80 jack/mynginx:v4
bf026f7e96b0a8f15377e75309b3338c36b505368ba13e1904fcf6bf0f2a4b16

1.6:访问宿主机的8081端口验证web界面:

1.7:yum版本的构建DockerFile:

from centos
MAINTAINER Jack.Zhang 123456@qq.com
run rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
run yum install nginx -y
run echo "daemon off;" >> /etc/nginx/nginx.conf
run echo "test nginx page" >  /usr/share/nginx/html/index.html
expose 80
expose 443
cmd ["nginx","ls"]

1.8:从yum构建的镜像启动一个容器:

[root@docker-server1 yum-nginx]# docker run  --name yum-nginx -d -p 8082:80 jack/mynginx:v5  nginx
0408e6f892a9c71e28d55162cc2efc7a2f69d72da8f1ae5dc2da5322efa38a31

1.9:访问通过yum安装nginx构建的docker镜像启动的实例: