继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Docker Web 服务器与应用之Apache

慕码人8056858
关注TA
已关注
手记 1247
粉丝 350
获赞 1323

Apache 是目前使用排名第一的 Web 服务器软件,其良好的跨平台和安全性,Apache 被广泛应用在多种平台和操作系统上。
下面介绍使用 Dockerfile 来创建带 Apache 服务的 Docker 镜像。

准备工作

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

root@localhost:~# mkdir apache_ubuntu && cd apache_ubunturoot@localhost:~/apache_ubuntu# touch Dockerfile run.shroot@localhost:~/apache_ubuntu# mkdir sample

下面是 Dockerfile 部份

FROM  sshd:dockerfile# 设置继承自我们创建的 sshd 镜像MAINTAINER waitfish from dockerpool.com(dwj_zz@163.com)# 创建作者信息# 设置环境变量,所有操作都是非交互式ENV DEBIAN_FRONTEND noninteractive# 安装RUN apt-get -yq install apache2&& \
        rm -rf /var/lib/apt/lists/*
RUN echo "Asia/Shanghai" > /etc/timezone && \
        dpkg-reconfigure -f noninteractive tzdata# 注意这里要该系统的时区设置,因为在web应用中经常会用到时区这个系统变量,默认的 ubuntu 会让你的应用程序发和不可思议的效果# 添加我们的脚本,并设置权限,这会覆盖之前放在这个位置的脚本ADD run.sh /run.sh
RUN chmod 755 /*.sh# 添加一个示例的web站点,删掉默认安装在 apache 文件夹下面的文件,并将我们添加的示例用软连接到 /var/www/html 目录下面RUN mkdir -p /var/lock/apache2 &&mkdir -p /app && rm -fr /var/www/html && ln -s /app /var/www/html
COPY sample/ /app# 设置 apache 相关的一些变量,在容器启动的时候可以使用 -e 参数替代ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/lock/apache2
ENV APACHE_SERVERADMIN admin@localhost
ENV APACHE_SERVERNAME localhost
ENV APACHE_SERVERALIAS docker.localhost
ENV APACHE_DOCUMENTROOT /var/www

EXPOSE 80
WORKDIR /APP
CMD ["/run.sh"]

这个sample 站点内容简单,就输出一句 Hello Docker! 。在 sample 目录下创建 index.html 文件,内容为:

<!DOCTYPE html><html><body><p>Hello, Docker! </p></body></html>

run.sh 脚本内容,只是启动 Apache 服务:

#!/bin/bashexec apache2 -D FOREGROUND

创建 apche:ubuntu 镜像

sudo docker build -t apache:ubuntu .

镜像创建成功,使用 docker images 查看镜像列表

测试镜像

运行镜像,并使用 -p 参数映射需要开放的端口 (22 和80 端口)

sudo docker run -d -P apache:ubuntusudo docker ps -a在本地主机上用 curl 来验证刚才创建的 sample 站点:curl 127.0.0.1:39172也可以在其他设备上通过访问宿主主机 ip:49172 来访问 sample 站点。

Docker file 创建的镜像拥有继承的特性

SSH 登录到容器时,会发现无法登录。
因为在 run.sh 脚本中未启动 SSH 服务。
这说明在使用 Dockerfile 创建镜像时,会继承父镜像的开放端口,但不会继承启动命令。因此,需要在 run.sh 脚本中添加启动 sshd  的服务命令:

#!/bin/bash/usr/sbin/sshd &exec apache2 -D FOREGROUND

再次创建镜像:
sudo docker build -t apache:ubuntu .

这次创建的镜像将默认会同时启动 SSH  和 Apache 服务。

映射本地目录

例如映射本地主机上当前目录下的www 目录到容器内的 /var/www 目录:

sudo docker run -i -d -p 80:80 -P 103:22 -e APACHE_SERVERNAME=test -v `pwd`/
www:/var/www:ro apache:ubuntu

在当前目录内创建 www 目录,并放上自定义的 index.html ,内容为:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>Hi Docker</title>
</head><body>
<h1>Hi Docker</h1>
<p>This is the first day I meet the new world.</p>
<p>How are you?</p>



<address>Apache/2.4.7 (Ubuntu) Server at 127.0.0.1 Port 80</address>
</body></html>


在本地主机上可访问测试容器提供的 Web 服务,查看内容为新配置的 index.html 信息。



作者:刘远鑫
链接:https://www.jianshu.com/p/9828b234cda8


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP