Docker安装Apache

Apache是一个高稳定性的、商业级别的开源Web服务器,由于其良好的跨平台和安全性,Apache被广泛应用在多种平台和操作系统上。

一、使用 Docker Hub的官方 httpd镜像

官方 Docker Hub 上的查看 httpd 镜像版本, 拉取官方的镜像,不拉取也可以,构建时会自动拉取)。

1、docker run命令创建并启动容器,使用数据卷

[root@centos7 ~]# mkdir -p /root/apache_docker/public-html
[root@centos7 ~]# docker run -d --rm --name my-apache-app -p 80:80 -v /root/apache_docker/public-html:/usr/local/apache2/htdocs/ httpd:2.4.43 
[root@centos7 ~]# vim /root/apache_docker/public-html/index.html
[root@centos7 ~]# cat /root/apache_docker/public-html/index.html
<!DOCTYPE html>
<html>
<body>
<p>Docker install Apache ok!</p>
</body>
</html>

打开浏览器,访问:

2、基于官方镜像编写 Dockerfile文件

1. 编写 Dockerfile文件

[root@centos7 apache_docker]# cat Dockerfile 
FROM httpd:2.4
# 替换
RUN sed -i 's/#ServerName www.example.com:80/ServerName localhost:80/g'  /usr/local/apache2/conf/httpd.conf
COPY ./public-html  /usr/local/apache2/htdocs/
[root@centos7 apache_docker]# tree
.
├── Dockerfile
└── public-html
    └── index.html

2. 构建自定义镜像,创建并启动容器

[root@centos7 apache_docker]# docker build -t apache-image:v2 . 
[root@centos7 apache_docker]# docker run -d -p 81:80 apache-image:v2
ebc6ac005c1e6a3b1ae2366c7dc60e94e480e7a2f6aabcb6b9d5628faedca751

打开浏览器,访问:

上面都是基于官方提供的 Apache镜像,仅仅支持运行静态HTML文件,/usr/local/apache2/htdocs/目录为存放页面。
 

二、基于系统镜像,完全自己安装构建Apache的自定义镜像

使用上次添加SSH服务 ubuntu:18.04镜像作为基础镜像来构建。

1、创建上下文路径

创建一个 apache_ubuntu 工作目录,在其中创建Dockerfile文件、run.sh 文件和 public-html目录。

在 public-html目录下创建 index.html文件。

[root@centos7 ~]# mkdir -p /root/apache_ubuntu/public-html
[root@centos7 ~]# cd /root/apache_ubuntu/
[root@centos7 apache_ubuntu]# touch Dockerfile run.sh
[root@centos7 apache_ubuntu]# tree
.
├── Dockerfile
├── public-html
│   └── index.html
└── run.sh

[root@centos7 apache_ubuntu]# cat ./public-html/index.html
<!DOCTYPE html>
<html>
<body>
<p>Docker install Apache ok!</p>
</body>
</html>
[root@centos7 apache_ubuntu]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sshd2               ubuntu              1f075a2c9f56        23 hours ago        208MB

2、编写 Dockerfile文件

[root@centos7 apache_ubuntu]# cat Dockerfile 
FROM sshd2:ubuntu
LABEL author="赵云"

# 安装apache需要的依赖
RUN set -eux && \
        apt-get update && \
        apt-get install -y --no-install-recommends libapr1-dev  libaprutil1-dev  libaprutil1-ldap && \
        rm -rf /var/lib/apt/lists/*

RUN set -eux && \
        apt-get update && \
        apt-get install -y --no-install-recommends  bzip2  ca-certificates  dirmngr  dpkg-dev gcc gnupg  libbrotli-dev  libcurl4-openssl-dev libjansson-dev  liblua5.2-dev  libnghttp2-dev  libpcre3-dev libssl-dev libxml2-dev make wget  zlib1g-dev  && \
        rm -r /var/lib/apt/lists/*

# 下载apache并编译安装
RUN wget https://www.apache.org/dist/httpd/httpd-2.4.46.tar.gz
RUN tar -zxvf httpd-2.4.46.tar.gz

WORKDIR httpd-2.4.46
RUN  ./configure --prefix=/usr/local/apache2  --enable-modules=all --enable-mods-shared=all --enable-so
RUN make &&  make install

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

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

#COPY /public-html  /usr/local/apache2/htdocs/ 

#开放80端口
EXPOSE 80
CMD ["/usr/local/sbin/run.sh"]

RUN ./configure --prefix=/usr/local/apache2 --enable-modules=all --enable-mods-shared=all --enable-so

参数说明下:

(1)--prefix:指定安装目录,如果不指定的话,默认就是 /usr/local/apache2;

(2)--enable-modules=all:加载所有模块;

(3)--enable-mods-shared=all:所有模块使用动态编译的方式进行编译。如果不加此参数,默认为静态编译。

  • 静态是直接编译进httpd中,
  • 动态编译会提供一个module.so 文件,需要在httpd.conf配置文件中使用时用 loadmodule 这个语法来加载;

(4)--enable-so:其实使用动态编译方式(可以不写)时该模块会自动生效。

3、编写run.sh脚本

[root@centos7 apache_ubuntu]# cat run.sh 
#!/bin/bash

# 后台运行
/usr/sbin/sshd  -D &
# 前端运行
exec /usr/local/apache2/bin/httpd -D FOREGROUND

4、构建自定义镜像,创建并启动容器

[root@centos7 apache_ubuntu]# docker build -t apache:uv1 .

[root@centos7 apache_ubuntu]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
apache              uv1                 77d8232efcf7        8 seconds ago       602MB
[root@centos7 apache_ubuntu]# docker run -d -p 82:80 --name "apache82" apache:uv1
4054191b5811574eec390bf60dae880b9dea8bd7e009f56c50473e761d3fbd82
[root@centos7 apache_ubuntu]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                        NAMES
4054191b5811        apache:uv1          "/usr/local/sbin/run…"   31 seconds ago      Up 30 seconds       22/tcp, 0.0.0.0:82->80/tcp   apache82

打开浏览器,访问:

访问的是 默认页面。上面的 #COPY /public-html  /usr/local/apache2/htdocs/ 不小心被注释掉了。

使用数据卷,重新创建并启动

[root@centos7 apache_ubuntu]# docker run -d -p 83:80  -v /root/apache_ubuntu/public-html:/usr/local/apache2/htdocs/  apache:uv1
13f2246cd94b7b544a5340854869da2184bade8b7498c36a817306fc8c575ccb
[root@centos7 apache_ubuntu]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                        NAMES
13f2246cd94b        apache:uv1          "/usr/local/sbin/run…"   2 seconds ago       Up 1 second         22/tcp, 0.0.0.0:83->80/tcp   peaceful_morse

 

官网下载比较慢,可以使用:https://mirror.bit.edu.cn/apache//httpd/httpd-2.4.46.tar.gz

因为这种方式我们加载了所有模块(--enable-modules=all),所以比方式一支持的更多。

 

—— Stay Hungry. Stay Foolish. 求知若饥,虚心若愚。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值