您的位置:首页 > 运维架构 > Docker

DockerFile实战(二):DockerFile编写要求与基本风格

2016-07-08 10:27 661 查看
之前分享了一个Nginx的Dockerfile实战文章,但这是基于原有镜像的基础上去添加修改的,那么本文 来详细讲解一下,如何从ubuntu镜像生成一个Nginx镜像

Step1:
#最开始,还是需要先搜索一个可用的镜像
$docker search ubuntu
#在这里,可以看到许多的相关镜像,但这里我们安装第一个就可以,可以看STARS评级很高的那个
$docker pull ubuntu
#如果网络情况够好的话,稍等片刻,一个可用的镜像就下载完毕了

Step2:
下载完镜像以后,我们需要在一个特定的目录下编写Dockerfile文件,文件名字也建议以Dockerfile命名
$mkdir -p /opt/docker/dfs/nginx
$vi Dockerfile
在Dockerfile内非注释行的第一行,必须填写来源镜像,这里以ubuntu为例
FROM ubuntu
注意,Dockerfile指令,不区分大小写,但为了写作规范,建议以大写为好。
接着,可以编写一些维护人员信息
MAINTAINER Leonlong Email@Domain.com
为了安全起见,建议不要使用root用户来管理和启动镜像,在这里,可以用以下指令指定管理镜像的用户
USER yourusername
还可以指令工作目录,以免在Dockerfile中写过长的路径名称
RUN adduser --diabled-login nginx
WORKDIR /home/nginx
可能需要修改一下时区信息,以免应用程序调用时出现问题
RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
在安装Nginx之前,需要更新一下Ubuntu的apt源,因为Docker在Build的时候会创建Cache,所以建议这里使用个指令,把所有需要安装的软件装完。以免在后续步骤出问题时,修改Dockerfile后重新build会带来额外的时间开销。当然,有一些软件并不在官方源当中,可以使用以下两条RUN指令来安装想要的应用。如果使用编译安装,可能流程就比较长,这里主要讲Dockerfile各个注意事项,所以请自行研究
RUN ECHO "deb http://sourceurlinfo" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
在安装完以后,其实就可以直接使用CMD参数启动nginx,但是我们可能以后还需要修改配置。而如果在这里直接修改配置,容器的生生命周期结束后,这些配置就荡然无存。所以,可以通过挂载卷的方法来完成我们的配置。而这里,仅仅需要修改主配置文件的一点内容就可以不再去管它。具体配置方案,可以根据自己的情况来。我的博客也有nginx相关的配置文档,可以自行研究。
RUN mkdir -p /etc/nginx/vhost/ && mkdir -p /opt/nginx/www
下面,将我们需要观察或者修改的动态内容,通过挂载卷的方式,从宿主机目录挂载到以下目录,并给出启动命令参数
VOLUME /etc/nginx/vhost
VOLUME /var/log/nginx
VOLUME /opt/nginx/www
ADD nginx.conf /etc/nginx/nginx.conf
CMD nginx
在启动完成nginx之后,我们想要外部对其访问,那么就让主机映射其端口
EXPOSE 80
EXPOSE 443
:wq!

还是要注意,无论如何配置nginx.conf文件,必须包含"daemon off;"一行
至此,一个简单的Dockerfile已经编写完成,当然,在Dockerfile中也有一些其它的指令参数可以使用,比如ENV、COPY、ARG等,之前已经写过Dockerfile指令使用指南,可以查看 http://leon0long.blog.51cto.com/3011404/1768324

Step3:
那么Dockerfile编写完毕以后,就需要将编写好的dockerfile,制作成我们想要的镜像,方便我们使用
$cd /opt/docker/dfs/nginx ;docker build -t nginx:private .
命令最后的'.'就代表使用当前目录的Dockerfile进行构建了。另外注意,在构建的时候,最好不要使用latest标签
现在,就可以使用docker run来启动一个容器了
$docker run -it -p 80:80 -p 443:443
-v /opt/docker/mounts/nginx/log:/var/log/nginx
-v /opt/docker/mounts/nginx/conf:/etc/nginx/vhost
-v /opt/docker/mounts/nginx/www:/opt/nginx/www
--name nginxtest nginx:private
使用docker ps,就可以看到正在运行当中的容器了

如果想要对镜像进行修改,只用再次编辑新的dockerfile,并生成一个新的镜像即可。
顾头不顾尾,不是我的风格,docker在网络方面一直是很让人纠结的地方,后面会针对网络进行专讲
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编写 风格 dockerfile