【系列3】使用Dockerfile创建带编译安装nginx服务的Centos Docker镜像

简介:

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

Dockerfile

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

nginx-1.12.2.tar.gz     #http://nginx.org/en/download.html 

以上文件都放到/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配置文件,以非daemon方式启动

RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf


#启动Nginx服务

RUN /usr/local/nginx/sbin/nginx


#复制服务启动脚本并设置权限

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 .

查看镜像: 

[root@docker1 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、生成新的容器

[root@docker1 nginx_centos]#docker run -d -p 2224:22 -p 8001:80 -p 4443:443 nginx:centos /usr/local/sbin/run.sh

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

[root@docker1 nginx_centos]#docker run -d -P nginx:centos

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

 
2、查看新生成的容器:

[root@localhost nginx_centos]# docker ps -a

CONTAINER ID   IMAGE        COMMAND            CREATED        STATUS        PORTS              NAMES

c69d42541f52  nginx: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


3、测试 
测试nignx:

[root@docker1 nginx_centos]# curl localhost:8001

测试成功!


测试ssh

[root@docker1 nginx_centos]# ssh localhost -p 2224

测试成功!


 各个版本的nginx源码安装包:http://down.51cto.com/data/2369729 


 YUM源  http://down.51cto.com/data/2387451 


本文转自 Mr_sheng 51CTO博客,原文链接:http://blog.51cto.com/sf1314/2044884


相关文章
|
10月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
940 87
|
10月前
|
应用服务中间件 Linux 网络安全
技术指南:如何把docsify项目部署到基于CentOS系统的Nginx中。
总结 与其他部署方法相比,将docsify项目部署到基于CentOS系统的Nginx中比较简单。以上步骤应当帮助你在不花费太多时间的情况下,将你的项目顺利部署到Nginx中。迈出第一步,开始部署你的docsify项目吧!
410 14
|
NoSQL MongoDB 数据库
使用 docker 快速搭建开发环境的 mongodb 服务
本指南介绍如何使用 Docker 和 Docker Compose 部署 MongoDB 和 Mongo Express。首先,通过 Docker 命令分别启动 MongoDB(镜像 `mongo:7.0.14`)和 Mongo Express(镜像 `mongo-express:1.0.2-20-alpine3.19`),并配置环境变量确保两者能正确连接。接着,提供了一个 `docker-compose.yaml` 文件示例,包含 MongoDB 数据卷、健康检查及服务依赖配置,简化多容器管理。
2048 2
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
1041 19
|
负载均衡 Ubuntu 应用服务中间件
nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
1722 13
|
负载均衡 应用服务中间件 网络安全
docker swarm添加更多的服务
【10月更文挑战第16天】
322 6
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
390 5
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
382 4
|
Docker 容器
Docker 1.13 新特性 —— Docker服务编排相关
近期发布的1.13的版本中,Docker对Docker Engine内置的编排能力做了很多的更新,使用新的这些特性,我们能更好的编排和迭代我们的应用。
5327 0