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