用Podman从零开始构建并运行一个Apache+PHP的容器镜像 (一)

前几天,我已经在不依赖Docker Hub等外部镜像源的情况下,使用Podman成功构建了一个Ubuntu容器镜像。具体过程我写在这篇博文里了:Docker受限?试试Podman,手动搭建Ubuntu容器镜像。这次,我想在此基础上更进一步,构建一个能够运行PHP脚本的Apache服务器容器。以下是我此次尝试的详细过程:

首先,我创建了一个名为php_apache的文件夹,并在其中新建了一个Containerfile文件。这个文件包含了通过apt安装apache2和php7.4所需的指令:

# 使用之前构建的ubuntu镜像作为基础
FROM localhost/ubuntu:20.04

# 添加以下两行是为了避免apt安装apache2时出现终端交互选择时区,否则构建过程会卡住无法完成
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai

# 使用apt安装apache2、php7.4及其他必要组件
RUN apt update && \
  apt install -y locales \
  apache2 \
  php7.4 \
  libapache2-mod-php7.4 && \
  apt-get clean && \
  rm -rf /var/lib/apt/lists/*

# 初始化locales
RUN localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
RUN localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8
ENV LANG=zh_CN.utf8

# 暴露80端口
EXPOSE 80

接下来,我开始构建容器镜像:

E:\containers\php_apache>podman build . -t php_apache:7.4
STEP 1/8: FROM localhost/ubuntu:20.04
STEP 2/8: ARG DEBIAN_FRONTEND=noninteractive
--> ceeae673b880
STEP 3/8: ENV TZ=Asia/Shanghai
--> 90247c11d4e1
...
STEP 8/8: EXPOSE 80
COMMIT php_apache:7.4
--> ca6b007bee0c
Successfully tagged localhost/php_apache:7.4
ca6b007bee0c0ea0186b38ab9fa9a93d028b1552ec4cd7e9fa673cef94a2da59

构建过程看似顺利。为了确认是否成功,我列出了所有镜像:

E:\containers\php_apache>podman image list -a
REPOSITORY            TAG         IMAGE ID      CREATED             SIZE
<none>                <none>      613971bb71cd  About a minute ago  245 MB
localhost/php_apache  7.4         ca6b007bee0c  About a minute ago  245 MB
...

看到了localhost/php_apache,说明构建确实成功了。虽然多了一些<none>标签的镜像,但暂时不影响大局。我迫不及待地想要运行这个容器,看看效果如何:

E:\containers\php_apache>podman run --rm -it -p8080:80 localhost/php_apache:7.4 /bin/bash
root@6e79eb841220:/#

容器运行成功。然而,当我在浏览器中访问http://localhost:8080时,却显示“当前无法使用此页面”。我猜想可能是Apache没有启动,于是尝试手动启动:

root@6e79eb841220:/# apache2
[Mon Aug 19 23:28:53.504823 2024] [core:warn] [pid 4] AH00111: Config variable ${APACHE_RUN_DIR} is not defined
apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot

果然出错了,似乎是一些必要的环境变量没有定义。经过一番搜索,我找到了解决方法:

root@6e79eb841220:/# source /etc/apache2/envvars
root@6e79eb841220:/# apache2
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.88.0.16. Set the 'ServerName' directive globally to suppress this message

尽管还有一条错误信息,但Apache似乎已经成功启动了。当我再次在浏览器中访问http://localhost:8080时,激动地看到了“It works!”的画面。

在这里插入图片描述

今天的尝试就到这里。虽然容器已经可以运行了,但还有很多需要完善的地方。由于时间已晚,我决定改天再继续优化。

下一步:实现自动启动Apache服务的折腾已经完成了,有兴趣的请点这个连接:https://blog.csdn.net/arthurchan2021/article/details/141371026

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值