【系列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


相关文章
|
7月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
483 99
|
7月前
|
关系型数据库 数据库 PostgreSQL
docker 安装 Postgres 17.6
本文介绍如何通过Docker安装和配置PostgreSQL 17.6。内容包括拉取镜像、导出配置文件、运行容器并挂载数据与配置文件目录,以及进入容器使用psql操作数据库的完整步骤,便于持久化管理和自定义配置。
1088 3
docker 安装 Postgres 17.6
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
736 6
|
6月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
554 2
|
7月前
|
Java Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
329 8
|
应用服务中间件 Linux API
若依系统在linux上部署,前台dist文件使用nginx服务,接口无法正常使用的问题?
若依系统在linux上部署,前台dist文件使用nginx服务,接口无法正常使用的问题?
565 0
|
Kubernetes 应用服务中间件 nginx
k8s基础使用--使用k8s部署nginx服务
本文介绍了Kubernetes中核心概念Deployment、Pod与Service的基本原理及应用。Pod作为最小调度单元,用于管理容器及其共享资源;Deployment则负责控制Pod副本数量,确保其符合预期状态;Service通过标签选择器实现Pod服务的负载均衡与暴露。此外,还提供了具体操作步骤,如通过`kubectl`命令创建Deployment和Service,以及如何验证其功能。实验环境包括一台master节点和两台worker节点,均已部署k8s-1.27。
1337 1
|
前端开发 应用服务中间件 调度
rancher部署nginx服务
rancher部署nginx服务
1059 0
rancher部署nginx服务
|
Cloud Native 应用服务中间件 nginx
【云原生】rancher2.6部署nginx服务—2023.03
【云原生】rancher2.6部署nginx服务—2023.03
580 0