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

在我的前篇博文(用Podman从零开始构建并运行一个Apache+PHP的容器镜像 (一))里记录了我在不依赖像Docker Hub这样的镜像源的情况下粗略的搭建了一个php+apache的服务器Podman容器。但是那确实还是有点粗糙,今天我想尝试在这个基础上进一步完善它。

首先,现在的这个容器的Apache服务不会自动启动,需要启动容器后再手工启动容器,这显然太不方便了。现在先解决这个自动启动Apache服务的问题。

熟悉Ubuntu的朋友应该都知道,再Ubuntu下启动Apache服务器其实只要使用service命令就可以了的。先进入运行容器试试:

C:\Users\arthur>podman run --rm -p8080:80 -it localhost/php_apache:7.4 /bin/bash

root@2f001f233a91:/# service apache2 start
 * Starting Apache httpd web server apache2 
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.88.0.17. Set the 'ServerName' directive globally to suppress this message *

貌似可以的。为了确认,用ps命令看看有没有apache2的进程在运行:

root@2f001f233a91:/# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.1  0.0  10300  3936 pts/0    Ss   22:46   0:00 /bin/bash
root          30  0.3  0.5 193460 19908 ?        Ss   22:46   0:00 /usr/sbin/apache2 -k start
www-data      33  0.0  0.2 193484  8300 ?        S    22:46   0:00 /usr/sbin/apache2 -k start
www-data      34  0.0  0.2 193484  8300 ?        S    22:46   0:00 /usr/sbin/apache2 -k start
www-data      35  0.0  0.2 193484  8300 ?        S    22:46   0:00 /usr/sbin/apache2 -k start
www-data      36  0.0  0.2 193484  8300 ?        S    22:46   0:00 /usr/sbin/apache2 -k start
www-data      37  0.0  0.2 193484  8300 ?        S    22:46   0:00 /usr/sbin/apache2 -k start
root          40  0.0  0.0  11968  3376 pts/0    R+   22:46   0:00 ps aux

很明显,我看到了5个apache2的进程在后台运行。在浏览器上也是可以正常访问http://localhost:8080/的。说明成功了,那么现在只要在Containerfile文件中把service apache2 start命令加到ENTRYPOINT中应该就可以了:

FROM localhost/ubuntu:20.04 

#为了节省篇幅,这中间的代码省略了。需要的朋友请看我的前一篇博文....

EXPOSE 80

ENTRYPOINT ["service", "apache2", "start"]

接着就是重新build,过程就不记录在这里了。

马上运行容器看看:

E:\containers\php_apache>podman run --rm -p8080:80 -it localhost/php_apache:7.4 /bin/bash
 * Starting Apache httpd web server apache2                                                                             
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.88.0.18. Set the 'ServerName' directive globally to suppress this message
 *

奇怪!虽然看到启动Apache服务的提示,但是没有进入bash,而是直接退出了。在浏览器上也访问不了http://localhost:8080。

一阵搜索后,感觉要专门写一个entrypoint脚本才能脚本才行。那么就试试吧,在Containerfile所在的文件夹下创建一个名为entrypoint.sh的脚步文件,内容如下:

#!/bin/bash

service apache2 start

exec "$@"


*这里有一个坑,我是在windows下编辑这个文件的,结果容器运行时出错了。后来查了好久才发现是文件的换行符问题,这个文件的换行符一定要是LF,否则不行!

再给修改Containerfile文件:

FROM localhost/ubuntu:20.04 

# 这里有省略的内容...

COPY entrypoint.sh /usr/local/bin
RUN chmod 755 /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]

EXPOSE 80

CMD ["/bin/bash"]

重新build后,再次尝试运行(这里我没有在命令后面加/bin/bash,因为在Containerfile里已经通过CMD参数指定了):

E:\containers\php_apache>podman run --rm -p8080:80 -it localhost/php_apache:7.4
 * Starting Apache httpd web server apache2                                                                            
 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.88.0.28. Set the 'ServerName' directive globally to suppress this message
 *
root@be9b30ee722b:/#

功夫不负有心人,终于成功了。在浏览器也可以访问。

当然,虽然现在可以自动启动Apache服务了,但仍然离完全可用还有一定距离。不过今天已经晚了,改天接着折腾。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值