(五)Docker镜像管理2之nginx镜像制作

简介:

下面我们来制作一个Nginx的镜像,通过编译安装方式来完成。


重新制作一个基础镜像

wKiom1jx5yqDQs_RAAFdkLRSvdA416.png

文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Version: 0.0.1
 
# 指定使用哪个基础镜像
FROM centos:6.6
# 说明该镜像的制作者和联系方式
MAINTAINER Rex.chen rex.chen@aaa.com
#设置标签,不是必须的只是为了说明里面的版本查看起来方便
LABEL Discrition= "更换了epel源,并安装了相应库和组件"
 
#备份系统默认的epel源,并设置新的EPEL源
RUN  cd  /etc/yum .repos.d/
RUN [ "mv" , "/etc/yum.repos.d/CentOS-Base.repo" , "/etc/yum.repos.d/CentOS-Base.repo.bak" ]
COPY . /Centos-6 .repo  /etc/yum .repos.d /CentOS-Base .repo
 
RUN yum makecache
 
# 安装必要库和组件
RUN yum update -y && yum groupinstall -y  'Development Tools'  && yum -y  install  wget \
     libmcrypt-devel mhash-devel libxslt-devel \
     libjpeg libjpeg-devel libpng libpng-devel \
     freetype freetype-devel libxml2 libxml2-devel \
     zlib zlib-devel glibc glibc-devel glib2 glib2-devel \
     bzip2  bzip2 -devel ncurses ncurses-devel \
     curl curl-devel e2fsprogs e2fsprogs-devel \
     krb5 krb5-devel libidn libidn-devel openssl \
     openssl-devel openldap-devel
 
#
RUN yum clean all

运行下面的命令制作镜像

我这里使用了-f来指定dockerfile

1
docker image build -t mycentos6:1.0 -f . /buildProImange  .


制作Nginx镜像

基于上面的基础镜像来制作一个Nginx的基础镜像,我们通过编译安装的方式来完成。

wKioL1j8WnCiudcDAAJTUvdNsBQ041.png

看一下制作Nginx镜像的Dockerfile怎么写的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# Version: 0.0.1
 
# 指定使用哪个基础镜像
FROM mycentos6:1.0
# 说明该镜像的制作者和联系方式
MAINTAINER Rex.chen rex.chen@aaa.com
#设置标签,不是必须的只是为了说明里面的版本查看起来方便
LABEL Nginx= "1.10.2"
 
# 建立用户和组
RUN [ "groupadd" , "-r" , "nginx" ]
RUN [ "useradd" , "-r" , "-g" , "nginx" , "-s" , "/sbin/nologin" , "nginx" ]
 
# 复制安装程序到指定目录,我这里使用COPY命令只是因为我要自行解压缩
ENV SOFT_DEST  /usr/local/src
ADD nginx /nginx-1 .10.2. tar .gz $SOFT_DEST
ADD nginx /openssl-1 .1.0c. tar .gz $SOFT_DEST
ADD nginx /zlib-1 .2.11. tar .gz $SOFT_DEST
ADD nginx /pcre-8 .39. tar .gz $SOFT_DEST
 
# 设置工作目录,这步可以不要
WORKDIR $SOFT_DEST
 
# 创建必要目录
RUN [ "mkdir" , "/var/tmp/nginx" , "-p" ]
RUN [ "mkdir" , "/var/run/nginx" , "-p" ]
RUN [ "mkdir" , "/var/log/nginx" , "-p" ]
RUN [ "mkdir" , "/var/lock/nginx" , "-p" ]
 
# 执行编译安装,这里一定要把进入目录和./configure以及后面的make和make install写在
#一起,否则会提示找不到,因为每一个命令都是一层镜像
RUN  cd  . /nginx-1 .10.2 && . /configure  \
     --prefix= /usr/nginx/  \
     --sbin-path= /usr/sbin/nginx  \
     --conf-path= /etc/nginx/nginx .conf \
     --error-log-path= /var/log/nginx/error .log \
     --http-log-path= /var/log/nginx/access .log \
     --pid-path= /var/run/nginx/nginx .pid \
     --lock-path= /var/lock/nginx/nginx .lock \
     --user=nginx --group=nginx \
     --with- file -aio --with-threads \
     --with-http_ssl_module \
     --with-http_flv_module \
     --with-http_stub_status_module \
     --with-http_gzip_static_module \
     --with-http_v2_module \
     --with-http_realip_module \
     --http-client-body-temp-path= /var/tmp/nginx/client/  \
     --http-proxy-temp-path= /var/tmp/nginx/proxy/  \
     --http-fastcgi-temp-path= /var/tmp/nginx/fcgi/  \
     --http-uwsgi-temp-path= /var/tmp/nginx/uwsgi/  \
     --http-scgi-temp-path= /var/tmp/nginx/scgi/  \
     --with-openssl= /usr/local/src/openssl-1 .1.0c \
     --with-zlib= /usr/local/src/zlib-1 .2.11 \
     --with-pcre= /usr/local/src/pcre-8 .39 &&  make  &&  make  install
 
EXPOSE 80

制作Nginx镜像

1
docker image build -t nginx:1.0 -f . /nginxDockerfile  .

上面是制作Nginx的基础镜像,下面我们就基于这个镜像来制作服务容器,因为Nginx镜像是可以重复使用的,个性化的东西要单独来做,Nginx在容器中通常是作为WEB服务器来运行的而不是反向代理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Version: 0.0.1
 
# 指定使用哪个基础镜像
FROM nginx:1.0
# 说明该镜像的制作者和联系方式
MAINTAINER Rex.chen rex.chen@aaa.com
#设置标签,不是必须的只是为了说明里面的版本查看起来方便
LABEL Nginx= "1.10.2"
 
# 在容器中建立挂载点,主要用于日志文件和网页文件
VOLUME [ "/var/nginx" ]
 
# 设置工作目录,不是必须的
WORKDIR  /var/nginx
 
# 拷贝nginx配置文件到容器中
ADD nginx /nginx .conf  /etc/nginx/nginx .conf
 
# 指定在容器启动时执行的命令
CMD [ "/usr/sbin/nginx" ]

然后你需要在宿主机上的/var/nginx中建立2个目录一个是log一个是www,www目录存放页面文件

wKioL1j8nWmSVOUnAADbM4jKYCE238.png

另外Nginx需要非守护进程方式启动,你只需在配置文件中加入daemon off;即可,如下图:

wKioL1j8mPHTWTp6AAEy__Y-0F8237.png

下面是Nginx的日志和网页文件的配置

wKioL1j8nMrTTsZXAAC6BD8dpLI980.png

制作镜像

1
docker image build -t webservices:1.0 -f . /nginxSrv  .

运行容器

1
docker run --name webSrv01 -d -p 80 - v  /var/nginx/ : /var/nginx/  webservices:1.0

wKioL1j8ni2QSMutAAHzVuEZXLc296.png

测试连接

wKioL1j8noKi-im_AABpaxxLjpE622.png

从本地看一下是否有日志文件呢:

wKiom1j8nqmzSzn6AACL0E6XS94888.png

我们这里用了一个新的参数就是-v,这个参数的作用就是把本地目录挂载到容器中,使用方法如下:

1
2
- v  /PATH 本地路径: /PATH 容器路径:<ro|rw> 
#后面的<ro|rw>是设置读写权限,默认是可读写

这个参数后面只能挂载一个目录到容器,通过docker inspect查看,默认是读写权限

wKiom1j8odzBdRZ6AABXK96KL24795.png

如果以后要修改网页内容,那么你只需修改/var/nginx/www目录下修改就好。







      本文转自linuxjavachen  51CTO博客,原文链接:http://blog.51cto.com/littledevil/1916292,如需转载请自行联系原作者






相关文章
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
4654 4
|
JavaScript Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
654 100
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
680 99
|
缓存 Docker 容器
优化Docker镜像大小的五个实用技巧
优化Docker镜像大小的五个实用技巧
1047 98
|
安全 Go Docker
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
560 5
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
1145 6
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
779 16
|
Java Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
503 8
|
运维 关系型数据库 数据库
应用官方 Docker 镜像已成熟,团队为何转向 Websoft9 而不再依赖 Bitnami
随着云原生发展,部署工具从 Bitnami 转向 Websoft9。后者基于官方镜像,提供多应用编排与统一运维,提升部署效率与维护能力,适合多系统协同场景。
应用官方 Docker 镜像已成熟,团队为何转向 Websoft9 而不再依赖 Bitnami