一、前言
看了很多人的dockerfile,都是长篇大论,解释的又很少,对于初学者来说根本不知道指令的意思,哪怕知道指令的意思,也不知道指令后面配置的一大串东西来自于哪里,而这一大串又无需去记忆,例如:
开头的RUN指令都能根据dockerfile的指令说明可以知道该指令是干嘛用的,但是后面这一串这么长的东西又是来自于哪里?
所以在编写dockerfile之前,你必须懂的nginx(该文章是基于dockerfile创建nginx镜像)在linux上的安装流程,否则,需要安装什么依赖等都不知道,就无从下手。
二、准备
在百度上,可以搜索到很多在linux上安装nginx的教程,这里给出一个安装教程地址:http://www.runoob.com/linux/nginx-install-setup.html。
在尝试着在自己的linux(非docker)机器上尝试的安装一遍nginx后,可以总结出大概这么几个流程(后面的dockerfile可以根据此流程来编写):
1.基于linux系统的docker容器是精简版的linux系统,里面很多命令等都没安装,比如vim等,所以我们安装软件时,都需要提前安装依赖包、工具等,比如nginx安装时依赖编译工具和相关库文件:
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
2.必要的安装依赖pcre
安装流程:解压,进入解压目录,运行make编译命令,最后运行make install命令
3.最后就是安装nginx
安装流程:解压,进入解压目录,最后是编译安装
三、编写dockerfile
该dockerfile是根据上方的流程一步步编写下来,完全可以对照在linux上的安装流程:
#base image
FROM centos
#MAINTAINER,this dockerfile creater
MAINTAINER loose@docker.com
#拷贝宿主机nginx-1.12.2.tar.gz到/usr/local/nginx目录
ADD nginx-1.12.2.tar.gz /usr/local/nginx
#拷贝宿主机pcre-8.35.tar.gz到/usr/local/pcre目录
ADD pcre-8.35.tar.gz /usr/local/pcre
#安装编译工具及库文件
RUN yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
#进入pcre解压目录
WORKDIR /usr/local/pcre/pcre-8.35
#开始安装并编译pcre
RUN ./configure
RUN make && make install
#安装nginx,首先进入nginx目录
WORKDIR /usr/local/nginx/nginx-1.12.2
#开始安装并编译nginx,注意pcre这里指定的是绝对路径
RUN ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/pcre/pcre-8.35 && make && make install
#添加nginx组和账户
RUN /usr/sbin/groupadd nginxGroup
RUN /usr/sbin/useradd -g nginxGroup nginxAdmin
#指定端口
EXPOSE 80
当然,这只是个入门,设计到的指令比较少,比如CMD、ENV、VOLUME就没有,后面的文章会一个个通过案例展示出来。
四、通过dockerfile构建镜像
执行命令:
docker build -t nginx:v1.0 .
说明:nginx为dockerfile构建的镜像名称,v:1.0为构建镜像TAG,最后面的 . 代表的是相对路径的当前目录,如果需要全路径则为/home/env/(Dockerfile文件目录)
build完毕后,我们来查看镜像列表:
最后,根据该镜像,启动容器,并在网页上访问nginx: