Dockerfile制作nginx镜像(10)

1595人浏览 / 0人评论

DockerFile可以说是一种可以被Docker程序解释的脚本,DockerFile是由一条条的命令组成的,每条命令对应linux下面的一条命令,Docker程序将这些DockerFile指令再翻译成真正的linux命令,其有自己的书写方式和支持的命令,Docker程序读取DockerFile并根据指令生成Docker镜像,相比手动制作镜像的方式,DockerFile更能直观的展示镜像是怎么产生的,有了DockerFile,当后期有额外的需求时,只要在之前的DockerFile添加或者修改响应的命令即可重新生成新的Docke镜像,避免了重复手动制作镜像的麻烦,具体如下:

一、创建一个centos容器

docker run -it docker.io/centos "/bin/bash"

 

ctrl+PQ退出

[root@1 ~]# mkdir /opt/dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}}  -pv

#目录结构按照业务类型系统类型等方式划分,方便后期镜像比较的时候进行分类。

[root@1 ~]# cd /opt/dockerfile/web/nginx/
 

二、编写dockerfile

 #生成的镜像的时候会在执行命令的当前目录查找Dockerfile文件,所以名称不可写错,而且D必须大写

[root@1 nginx]# vim ./Dockerfile

#My Dockerfile
#'#'为注释符号
#除了注释行之外的第一行,必须是Fror xxx (xxx是基础镜像)
From centos #第一行先定义基础镜像,后面的是本地有效的镜像名,如果本地没有 会从远程仓库下载,第一行很重要。

#镜像维护者的信息 maintainer
MAINTAINER 2249902650@qq.com

#其他可选参数
#USER 指定改容器运行时的用户名和UID,后续的RUN命令也会使用这面指定的用户执行
#WORKDIR /a 
#WORKDIR b (workdir)    #指定工作目录,最终为/a/b
#VOLUME    (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.10.3.tar.gz /usr/local/src/ #自动解压压缩包
RUN cd /usr/local/src/nginx-1.10.3  && ./configure  --prefix=/usr/local/nginx --with-http_sub_module && 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
XPOSEE 80 443 #向外开放的端口,多个端口用空格做间隔,启动容器时候-p需要使用此端香外映射,如-怕8081:80,则80就是这里的80
CMD ["nginx"] #运行的命令,每个Dockerfile只能有一条,如果有多条则只有最厚一条被执行
#如果在从该镜像启动容器的时候也指定了命令,那么指定的命令会覆盖Dockerfile构建的镜像里面的CMD命令,即指定的命令优先级更高,Dockerfile的优先级较低一些
#CMD ["nginx","-g","daemon off;"]

#VOLUME 
#ENTRYPOINT  参数替换

准备源码包与配置文件:

[root@docker-server1 nginx]#  cp /usr/local/nginx/conf/nginx.conf .  #配置文件关闭后台运行

[root@docker-server1 nginx]# cp /usr/local/src/nginx-1.10.3.tar.gz . #nginx源码

 

2.2.4:执行镜像构建:

[root@docker-server1 nginx]# docker build –t jack/nginx-1.10.3:v1   /opt/dockerfile/web/nginx/

 

2.2.5:构建完成:

可以清晰看到各个步骤执行的具体操作

 

 

2.2.6:查看是否生成本地镜像:

 

2.2.7:从镜像启动容器:

[root@docker-server1 nginx]# docker run -d  -p 80:80 --name yum-nginx  jack/nginx-1.10.3:v1 /usr/sbin/nginx

 

2.2.8:访问web界面

2.2.9:编译过程中使用过的镜像:

 

2.3手动制作编译版本nginx 镜像

过程在centos 基础镜像之上手动编译安装nginx,然后再提交为镜像。

2.3.1:下载镜像并初始化系统:

[root@docker-server1 ~]# docker pull centos

[root@docker-server1 ~]# docker run -it docker.io/centos /bin/bash

[root@86a48908bb97 /]# yum install wget  -y

[root@86a48908bb97 /]# cd /etc/yum.repos.d/

[root@86a48908bb97 yum.repos.d]# rm -rf ./* #更改yum

[root@86a48908bb97 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 

[root@86a48908bb97 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

 

2.3.2:编译安装nginx:

[root@86a48908bb97 yum.repos.d]#  yum install -y vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop  #安装基础包

[root@86a48908bb97 yum.repos.d]# cd /usr/local/src/

[root@86a48908bb97 src]# wet http://nginx.org/download/nginx-1.10.3.tar.gz

[root@86a48908bb97 src]# tar xvf nginx-1.10.3.tar.gz

[root@86a48908bb97 src]# cd nginx-1.10.3

[root@86a48908bb97 nginx-1.10.3]# ./configure  --prefix=/usr/local/nginx --with-http_sub_module

[root@86a48908bb97 nginx-1.10.3]# make && make install

[root@86a48908bb97 nginx-1.10.3]# cd /usr/local/nginx/

 

2.3.3:关闭nginx后台运行:

[root@86a48908bb97 nginx]# vim conf/nginx.conf

user  nginx;

worker_processes  auto;

daemon off;

[root@86a48908bb97 nginx]# ln -sv /usr/local/nginx/sbin/nginx  /usr/sbin/nginx  #创建软连

 

2.3.4:创建用户及授权:

[root@86a48908bb97 nginx]# useradd  nginx -s /sbin/nologin

[root@86a48908bb97 nginx]# chown  nginx.nginx /usr/local/nginx/  -R

 

2.3.5:自定义web界面:

[root@86a48908bb97 nginx]# echo "My Nginx Test Page" >  /usr/local/nginx/html/index.html

 

2.3.6:提交镜像:

[root@docker-server1 ~]# docker commit -m "test nginx" 86a48908bb97  jack/nginx-test-image

sha256:fce6e69410e58b8e508c7ffd2c5ff91e59a1144847613f691fa5e80bb68efbfa

[root@docker-server1 ~]# docker commit -m "test nginx" 86a48908bb97  jack/nginx-test-image:v1

sha256:474cad22f28b1e6b17898d87f040dc8d1f3882e2f4425c5f21599849a3d3c6a2

 

2.3.:7从自己的镜像启动容器:

[root@docker-server1 ~]# docker run -d -p 80:80  --name my-centos-nginx jack/nginx-test-image:v1  /usr/sbin/nginx

8042aedec1d6412a79ac226c9289305087fc062b0087955a3a0a609c891e1122

备注 -name是指定容器的名称,-d是后台运行,-p是端口映射,jack/nginx-test-image是xx仓库下的xx镜像的xx版本,可以不加版本,不加版本默认是使用latest,最后面的nginx是运行的命令,即镜像里面要运行一个nginx命令,所以才有了前面将/usr/local/nginx/sbin/nginx软连接到/usr/sbin/nginx,目的就是为了让系统可以执行此命令。

 

2.3.8:访问测试:

 

2.3.9:查看Nginx访问日志:

 

 

=============

dockerfile制作ssh

 

编写init.sh脚本

ssh root@10.0.0.8:1023 进行连接docker容器

 

 

 

 

 

全部评论