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

简介:

      这里将展示使用Dockerfile来创建带Apache服务的Docker镜像的具体过程。
  (1) Apache
 这里将展示使用Dockerfile来创建带Apache服务的Docker镜像的具体过程。
 准备工作:
 首先,创建一个apache_centos工作目录,在其中
[root@docker1 ~]# mkdir apache_centos && cd apache_centos
[root@docker1 apache_centos]# touch Dockerfile run.sh
[root@docker1 apache_centos]# mkdir sample
-------------------------------------------------------------------------------------------------------------------------------
下面是Dockerfile的内容和各个部分的说明:
[root@docker1 apache_centos]# cat Dockerfile 
FROM docker.io/centos:latest
#设置继承来自我们创建的centos:latest镜像

MAINTAINER waitfish from dockerpool.com
#创建者的基本信息

#设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive

RUN echo "Asia/Shanghai" > /etc/timezone #&& \
        # dpkg-reconfigure -f noninteractive tzdata      #这也是设置时区的
#注意这里要更改系统的时区设置,因为在Web应用中经常会用到时区这个系统变量,默认的centos会让你的应用此程序发生不可思议的效果哦

#安装wget
RUN yum update
RUN yum install -y wget
WORKDIR /usr/local/src

#下载并解压源码包
RUN wget http://mirrors.shuosc.org/apache//httpd/httpd-2.2.34.tar.gz
RUN tar -xf httpd-2.2.34.tar.gz
WORKDIR httpd-2.2.34

#编译安装apache
RUN yum install -y gcc make apr-devel apr apr-util apr-util-devel pcre-devel
RUN ./configure --prefix=/usr/local/apache2 --enable-mods-shared=most --enable-so
RUN make
RUN make install

#修改apache配置文件
RUN sed -i 's/#ServerName www.example.com:80/ServerName localhost:80/g' /usr/local/apache2/conf/httpd.conf

#启动apache服务
RUN /usr/local/apache2/bin/httpd

#复制服务启动脚本并设置权限
ADD run.sh /usr/local/sbin/run.sh
RUN chmod 755 /usr/local/sbin/run.sh

#添加一个示例的Web站点,删除默认安装在apache文件夹下面的文件,并将我们添加的实例用软链接到/var/www/html目录下面
RUN mkdir -p /app && rm -fr /usr/local/apache2/html && ln -s /app /usr/local/apache2/html
COPY sample/ /app

#开放80端口
EXPOSE 80
WORKDIR /app
CMD ["/usr/local/sbin/run.sh"]
--------------------------------------------------------------------------------------------------------------------------------------
这个sample站点的内容很简单,就输出一句话Hello Docker! 在sample目录下创建index.html文件,内容为:
[root@docker1 apache_centos]# cd sample/
[root@docker1 sample]# vim index.html
<!DOCTYPE html>
<html>
<body>

<p>Hello, Docker!</p>

</body>
</html>

run.sh脚本内容也很简单,只是启动Apache服务:
[root@docker1 apache_centos]# vim run.sh 
#!/bin/bash
/usr/sbin/sshd &
/usr/local/apache2/bin/httpd -D FOREGROUND

此时,apache_centos目录下面的文件结构为:
[root@docker1 apache_centos]# tree
.
├── Dockerfile
├── run.sh
└── sample
   └── index.html

1 directory, 3 files

创建apache:centos镜像
使用docker build命令创建apache:centos镜像,注意命令最后的"."。
[root@docker1 apache_centos]# docker build -t apache:centos .
......
Successfully built ......  表示创建镜像成功
此时镜像已经创建成功了。下面,查看本地已有的镜像列表,可见新增的apache:centos镜像:
[root@docker1 apache_centos]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
apache               centos              fe364d4ee9ec        5 minutes ago       419.1 MB
......

[root@docker1 apache_centos]# docker run -d -P apache:centos
0fadd02039d6b16ae308faada8497f3ab9d72de73d5dd36a655e188eee9f1859
[root@docker1 apache_centos]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                          NAMES
0fadd02039d6        apache:centos       "/usr/local/sbin/run."   4 seconds ago       Up 3 seconds        0.0.0.0:32769->22/tcp, 0.0.0.0:32768->80/tcp   happy_jones


[root@docker1 apache_centos]# curl 127.0.0.1:32768
<html><body><h1>It works!</h1></body></html>

Docker创建的镜像具有继承性
[root@docker1 apache_centos]# docker port 0fadd02039d6 
22/tcp -> 0.0.0.0:32769
80/tcp -> 0.0.0.0:32768
[root@docker1 apache_centos]# vim run.sh 
#!/bin/bash
/usr/sbin/sshd &
/usr/local/apache2/bin/httpd -D FOREGROUND
默认会同时启动SSH和Apache服务。
file://C:\Users\Sheng\AppData\Local\Temp\ct_tmp/1.png



映射本地目录
[root@docker1 apache_centos]# docker run -i -d -p 100:80 -p 103:22 -e APACHE_SERVERNAME=test -v `pwd`/www:/var/www:ro apache:centos
f452f8f192bfda6fa5830ee67cac03694279a10e10c20e6d1c162aa863735a63
[root@docker1 www]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES
f452f8f192bf        apache:centos       "/usr/local/sbin/run."   37 minutes ago      Up 37 minutes       0.0.0.0:103->22/tcp, 0.0.0.0:100->80/tcp   amazing_mcnulty


[root@docker1 www]# docker rm f452f8f192bf 
Error response from daemon: You cannot remove a running container f452f8f192bfda6fa5830ee67cac03694279a10e10c20e6d1c162aa863735a63. Stop the container before attempting removal or use -f
[root@docker1 www]# docker stop f452f8f192bf 
f452f8f192bf
[root@docker1 apache_centos]# ls    #会自动在当前目录创建www目录,放上自定义的页面index.html,内容为:
Dockerfile  httpd  run.sh  sample  www
以上错误:apache的页面目录为/usr/local/apache2/html

[root@docker1 www]# docker run -i -d -p 100:80 -p 103:22 -e APACHE_SERVERNAME=test -v `pwd`/www:/usr/local/apache2/html:ro apache:centos
ab27e092fef8513ffe89c3f81498fe1b097e48d82dcdb3292059e8475a97d37e


…………………………………………………………………………………………………………………………………………

下载附录:httpd-2.2.34.tar.gz  http://down.51cto.com/data/2340238 



本文转自 Mr_sheng 51CTO博客,原文链接:http://blog.51cto.com/sf1314/1980710
相关文章
|
Linux 网络安全 数据安全/隐私保护
centos开启samba服务
通过以上步骤,您已成功在CentOS系统上安装、配置并启动了Samba服务,并且可以通过Windows或Linux客户端访问共享目录。Samba为跨平台文件共享提供了强大的支持,配置灵活且易于管理。无论是简单的家庭网络共享还是企业级文件服务器,Samba都能胜任。通过合理的配置和访问控制,您可以确保文件共享的安全性和便利性。
1893 74
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
2591 25
|
安全 Linux
CentOS下载ISO镜像的方法
访问CentOS官方网站(https://www.centos.org/download/),在“Downloads”页面找到ISO镜像下载链接,选择所需版本和架构(如x86_64)开始下载。CentOS分为Linux版和Stream版,前者每两年发行一次并提供10年安全维护,后者为滚动更新。旧版本可在Vault(https://vault.centos.org/)下载。建议选择DVD格式镜像,包含完整系统和常用软件。
38321 16
CentOS下载ISO镜像的方法
|
网络协议 Linux 网络安全
docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”
通过上述步骤,您可以有效解决在 Docker 中使用 CentOS 镜像安装 npm 包时遇到的 "npm ERR! code ECONNRESET" 错误。希望这些方法能帮助您顺利进行 npm 包的安装。
1470 26
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
862 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
1421 19
|
缓存 Linux
CentOS-6的iso下载地址镜像yum源
通过上述步骤,您可以成功下载CentOS 6的ISO镜像文件,并配置适用于CentOS 6的YUM源。尽管CentOS 6已经停止更新,但使用这些镜像和YUM源配置,可以继续在需要的环境中使用和维护CentOS 6系统。
9100 20
|
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 数据卷、健康检查及服务依赖配置,简化多容器管理。
2542 2
|
负载均衡 应用服务中间件 网络安全
docker swarm添加更多的服务
【10月更文挑战第16天】
564 6
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
528 5