使用Dockerfile创建带编译安装znginx服务的Centos Docker镜像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Dockerfile创建带编译安装znginx服务的Centos Docker镜像相关的知识,希望对你有一定的参考价值。

使用Dockerfile创建带nginx服务的Centos Docker镜像

【Dockerfile】使用Dockerfile创建带nginx服务的Centos Docker镜像


在宿主机上准备的文件清单:

Dockerfile
#启动ssh和apache服务的脚本
run.sh

以上文件都放到/root/nginx_centos目录下

mkdir -p /root/nginx_centos
cd /root/nginx_centos

一、准备run.sh文件 
在/root/nginx_centos目录新建run.sh

vim run.sh

脚本内容如下:

#!/bin/bash
/usr/sbin/sshd &
/usr/local/nginx/sbin/nginx

二、准备Dockerfile 
在/root/nginx_centos目录新建Dockerfile

vim Dockerfile

文件内容如下:

#新生成的镜像是基于sshd:dockerfile镜像FROM sshd-centos
MAINTAINER by cmzsteven
WORKDIR /usr/local/src
#安装wget
RUN yum install -y  wget
#下载并解压源码包
RUN wget  
RUN tar -zxvf nginx-1.8.0.tar.gz
WORKDIR nginx-1.8.0
#编译安装nginx
RUN yum install -y gcc make pcre-devel zlib-devel
RUN ./configure   --prefix=/usr/local/nginx   --with-pcre
RUN make
RUN make install
#启动Nginx服务
RUN /usr/local/nginx/sbin/nginx
#修改Nginx配置文件,以非daemon方式启动
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
#复制服务启动脚本并设置权限
ADD run.sh /usr/local/sbin/run.sh
RUN chmod 755 /usr/local/sbin/run.sh
#设置生成容器时需要执行的脚本
CMD ["/usr/local/sbin/run.sh"]
#开放22、80、443端口
EXPOSE 22
EXPOSE 80
EXPOSE 443

需要注意的是:在Dockerfile文件中更换当前目录不可以用“cd”命令,而要改用“WORKDIR”. 
三、根据Dockerfile生成镜像

docker build -t nginx_dockerfile:centos .11

查看镜像:

[[email protected] nginx_centos]# docker images
REPOSITORY         TAG         IMAGE ID            CREATED          VIRTUAL SIZE
nginx_dockerfile    centos        9ad55461b2fe        5 minutes ago       386.1 MB
nginx           centos         b738cec02b29        47 minutes ago      369.9 MB
sshd-centos       latest         64136bdc0cc8        46 hours ago        261.8 MB
centos           latest        0f73ae75014f        5 weeks ago         172.3 MB

四、根据镜像生成的容器并进行测试 
1、生成新的容器

[[email protected] nginx_centos]#docker run -d -p 2224:22 -p 8001:80 -p 4443:443 nginx_dockerfile:centos /usr/local/sbin/run.sh11

将容器的22端口、80端口和443端口分别映射到到宿主机上的2224端口、8001端口和4443端口,并运行服务脚本。 
也可以使用-P参数来让系统随机指定端口映射到22、80和443端口:

docker run -d -P nginx_dockerfile:centos11

因为在Dockerfile中指定了EXPOSE所以系统会自动将指定的端口映射出来;同时使用CMD来指定生成容器时所需要执行的角本,所以这里省略了“/usr/local/sbin/run.sh”。 
2、查看新生成的容器:

[[email protected] nginx_centos]# docker ps -a
CONTAINER ID   IMAGE             COMMAND            CREATED        STATUS        PORTS                                            NAMES
c69d42541f52  nginx_dockerfile:centos  "/usr/local/sbin/run  26 seconds ago  Up 25 seconds  0.0.0.0:2224->22/tcp, 0.0.0.0:8001->80/tcp, 0.0.0.0:4443->443/tcp  high_colden
f5a87e085a0b  nginx:centos         "/usr/local/sbin/run   49 minutes ago   Up 49 minutes  0.0.0.0:2223->22/tcp, 0.0.0.0:8000->80/tcp               stoic_kirch
ed9361b598c8  sshd-centos         "/usr/sbin/sshd -D"   About an hour ago   Up About an hour    0.0.0.0:2222->22/tcp                        distracted_mclean

3、测试 
测试nignx:

[[email protected] nginx_centos]# curl localhost:8001
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {        width: 35em; 
               margin: 0 auto;        
               font-family: Tahoma, Verdana, Arial, sans-serif;    }</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>12345678910111213141516171819202122232425261234567891011121314151617181920212223242526

测试成功!

测试ssh

[[email protected] nginx_centos]# ssh localhost -p 2224
The authenticity of host '[localhost]:2224 ([::1]:2224)' can't be established.RSA key fingerprint is d7:fd:3d:40:46:b6:0c:c9:ee:f1:fb:9e:08:c4:12:57.Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:2224' (RSA) to the list of known [email protected]'s password:12345671234567

测试成功!


以上是关于使用Dockerfile创建带编译安装znginx服务的Centos Docker镜像的主要内容,如果未能解决你的问题,请参考以下文章

解决编译安装 nginx时遇到的报错

使用Dockerfile创建带mysql的Centos Docker镜像

系列2使用Dockerfile创建带sshd服务的Centos Docker镜像

使用Dockerfile创建带Apache服务的Centos Docker镜像1

使用Dockerfile创建一个带 ssh 服务的基础镜像

使用Dockerfile创建带tomcat的Centos Docker镜像