Docker(Ⅵ)-制作编译版Nginx 1.16.1镜像

DockerFile制作编译版Nginx 1.16.1镜像

  • DockerFile 可以说是一种被 Docker 程序解释的脚本,DockerFile 是由一条条的命令组成的,每条命令对应 linux 下面的一条命令,Docker 程序将这写 DockerFile 指令再翻译成真的 linux 命令,其有自己的书写方式和支持的命令,Docker 程序读取 DockerFile 并根据指令生成 Docker 镜像,相比手动制作镜像的方式,DockerFile 更能直观的展示镜像是怎么产生的,有了写好的各种各样的 DockerFile 文件,当后期某个镜像有额外的需求时,只要在之前的 DockerFile 添加或修改相应的操作即可重新生成新的 DockerFile 镜像,避免了重复手动制作镜像的麻烦,具体如下:
  • 官方参考文档:https://docs.docker.com/engine/reference/builder/
  • 以下变量中的指令列表支持环境变量Dockerfile:
    • ADD #将宿主机中的文件添加到镜像当中
    • COPY
    • ENV #设置容器变量,常用于向容器内传递用户密码等
    • EXPOSE #开放端口
    • FROM
    • LABEL
    • STOPSIGNAL
    • USER #指定该容器运行时的用户名和 UID,后续的 RUN 命令也会使用这里指定的用户执行
    • VOLUME #设置容器挂载主机目录
    • WORKDIR #指定工作目录
    • RUN #执行shell命令

下载镜像并初始化系统

//从DockerFile构建一个镜像

//确认工作目录
root@bj-magedu-v-study-14:/opt# pwd
/opt

//创建DockerFile目录环境
root@bj-magedu-v-study-14:/opt# mkdir dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}} -pv
mkdir: created directory 'dockerfile'
mkdir: created directory 'dockerfile/web'
mkdir: created directory 'dockerfile/web/nginx'
mkdir: created directory 'dockerfile/web/tomcat'
mkdir: created directory 'dockerfile/web/jdk'
mkdir: created directory 'dockerfile/web/apache'
mkdir: created directory 'dockerfile/system'
mkdir: created directory 'dockerfile/system/centos'
mkdir: created directory 'dockerfile/system/ubuntu'
mkdir: created directory 'dockerfile/system/redhat'

//验证目录信息(目录结构按照业务类型或系统类型等方式划分,方便后期镜像比较多的时候进行分类。)
root@bj-magedu-v-study-14:/opt# tree /opt/dockerfile/
/opt/dockerfile/
├── system
│   ├── centos
│   ├── redhat
│   └── ubuntu
└── web
    ├── apache
    ├── jdk
    ├── nginx
    └── tomcat

9 directories, 0 files

//进入指定的DockerFile目录
root@bj-magedu-v-study-14:/opt# cd ./dockerfile/web/nginx/

//确认工作目录
root@bj-magedu-v-study-14:/opt/dockerfile/web/nginx# pwd
/opt/dockerfile/web/nginx

编写DockerFile

  1 #Compile install nginx 1.16.1 image
  2 # '#'为注释,等于shell脚本中的'#'
  3 # 除了注释行以外的第一行,必须以 From xxx(xxx 是官方基础镜像)
  4 
  5 #第一行先定义基础镜像,后面的本地有效的镜像名,如果本地没有会从远程仓库下载,第一行很重要#
  6 From centos:7.5.1804
  7 
  8 #镜像维护者的信息#                                                                                                                                                              
  9 MAINTAINER boekbi 952098151@qq.com
 10 
 11 ###其他可选参数###
 12 #指定该容器运行时的用户名和 UID,后续的 RUN 命令也会使用这里指定的用户执行#
 13 #USER
 14 
 15 #指定工作目录#
 16 #WORKDIR /a #先定义
 17 #WORKDIR b #再定义,则最终工作目录为/a/b
 18 
 19 #设置容器挂载主机目录#
 20 #VOLUME["/dir_1","/dir_2"...]
 21 
 22 #设置容器变量,常用于向容器内传递用户密码等#
 23 #ENV password 123456
 24 ##################
 25 
 26 
 27 ###执行的命令,将编译安装nginx的步骤执行一遍###
 28 #配置epel源#
 29 RUN yum -y install epel-release
 30 
 31 #安装常用命令#
 32 RUN yum -y install  vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
 33 
 34 ##下载nginx 1.16.1源码包#
 35 ##RUN wget http://nginx.org/download/nginx-1.16.1.tar.gz
 36                                                                                                                                                          37 #添加nginx源码包到镜像中,自动解压打包文件#
 38 ADD nginx-1.16.1.tar.gz /usr/local/src/
 39 
 40 #RUN mkdir /usr/local/nginx
 41 
 42 #编译安装#
 43 RUN cd /usr/local/src/nginx-1.16.1/  &&  ./configure --prefix=/usr/local/nginx/  --with-http_sub_module && make && make install
 44 
 45 #进入工作目录#
 46 RUN cd /usr/local/nginx/
 47 
 48 #添加nginx配置文件到镜像中#
 49 #ADD nginx.conf /usr/local/nginx/conf/nginx.conf
 50 
 51 #创建nginx用户#
 52 RUN useradd nginx -s /sbin/nologin
 53 
 54 #创建nginx软连接#
 55 RUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx
 56 
 57 RUN ["/bin/sh","-c","/usr/bin/ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx"]
 58 
 59 #创建测试页面#
 60 RUN echo 'This is Compile install nginx-1.16.1 image' > /usr/local/nginx/html/index.html
 61 #ADD index.html /usr/local/nginx/html/
 62 
 63 ##向外开放的端口,多个端口用空格做间隔,启动容器时候-p需要使用此端口向外映射,如: -p 8081:80,则 80 就是这里的 80#
 64 EXPOSE 80 443
 65 
 66 ##运行的命令,每个 Dockerfile 只能有一条,如果有多条则只有最后一条被执行#
 67 CMD ["nginx","-g","daemon off"]

准备源码包与配置文件

//#使用其它服务器编译安装相同版本的 nginx 配置文件,而且配置文件中关闭 nginx 进程后台运行
root@bj-magedu-v-study-14:/opt/dockerfile/web/nginx# cp /usr/local/nginx/conf/nginx.conf . 

//准备 nginx-1.61.1 的源码包
root@bj-magedu-v-study-14:/opt/dockerfile/web/nginx# cp /usr/local/src/nginx-1.16.1.tar.gz . 

执行镜像构建

  • docker build -t nginx:v1 .

file

构建完成

file

查看是否生成本地镜像

  • docker images

file

从镜像启动容器

  • docker run -d -it -p 80:80 --name nginx-v1 nginx:v1 /bin/bash

file

访问web界面

  • 浏览器访问http://192.168.26.207/

file

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注