一: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镜像启动的实例: