第11章 Web服务与应用

本章会展示两种创建镜像的过程,其中一些操作比较简单的镜像使用Dockerfile来创建,而像Weblogic这样复杂的应用,则使用commit方式来创建,读者可根据自己的需求进行选择。

通过本章的介绍,用户操作可以根据自己需求轻松定制Web服务或应用镜像。

11.2 Apache

   Apache  是一个高稳定性的、商业级别的开源Web服务器。目前Apache已经是巨世界使用排名第一的Web服务器软件。由于其良好的跨平台和安全性。Apache被广泛应用在多种平台和操作系统上。作为Apache软件基金会支持的项目,这的开发者社区完善而高效。自1995年发布至今,一直以高标准进行维护与开发。Apache名 称源自美国西南部一个印第安人部落:阿帕奇族,它支持类UNIX和Window系统。

编写Dockerfile文件,内容如下:

FROM httpd:2.4
COPY ./public-html /usr/local/apache2/htdocs/

创建项目目录public-html,并在此目录下创建index.html文件:

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

构建自定义镜像:

[root@localhost ~]# docker build -t apache2-image .

构建完成后,使用docker run指令运行镜像:

[root@localhost ~]# docker run -it --rm --name apahce-container -p 80:80 apache2-image

通过本地的80端口即可访问静态页面,如图11-1所示。


                    图11-1 Apache 运行界面

也可以不创建自定义镜像,直接通过映射目录方式运行Apache容器:

[root@localhost ~]# docker run -it --rm --name my-apache -p 8080:80 -v "$PWD"/public-html:/usr/local/apache2/htdocs httpd:2.4

2.使用自定义镜像

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

[root@localhost ~]# mkdir apache_ubuntu && cd apache_ubuntu
[root@localhost apache_ubuntu]# touch Dockerfile run.sh

下面是Dockerfile的内容和各个部分的说明:

#设置继承用户创建的sshd镜像
FROM sshd:dockerfile
#创建者基本信息
MAINTAINER [email protected]
#设置环境变量,所有操作都是非交互的
ENV DEBIAN_FRONTEND noninteractive
#安装
RUN apt-get -yq install apache2 && \
 rm -rf /var/lib/apt/lists/*
#注意这里要更改系统的时区设置,因为在web应用中经常会用到时区这个系统变量,默认的ubuntu会让你的应用程序发生不可思议的后果
RUN echo "Asia/Shanghai" > /etc/timezone && \
        dpkg-reconfigure -f noninteractive tzdata
#添加用户脚本,并设置权限,这会覆盖之前在这个位置的脚本
ADD run.sh /run.sh
RUN chmod 755 /*.sh
#添加一个示例的web站点,删掉默认安装在apahce文件下面文件,并将应用添加到示例中,用软链接到/var/www/html目录下面
RUN mkdir -p /var/lock/apache2 && mkdir -p /app && rm -rf /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/run/apache2
ENV APACHE_LOCK_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目录下创建inde.html,内容如下:


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

run.sh脚本内容也很简单,只是启动apache服务

#!/bin/bash
exec apache2 -D FOREGROUND

此时,apache_ubuntu目录下面的文件结构为:

[root@localhost apache_ubuntu]# tree .
.
├── Dockerfile
├── index.html
├── run.sh
└── sample

1 directory, 3 files

下面,创建apache_ubuntu镜像:

#docker build -t apahce:ubuntu .

下面开始使用docker run指令测试镜像。可以使用-P参数映射需要开放的端口(22和80端口):

[root@localhost apache_ubuntu]# docker run -d -P apache:ubuntu
80f0b3f9d01bda0b96c019bee6a48b627a45979b3d26b8b840e1eaf38d72dd43
[root@localhost apache_ubuntu]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                          NAMES
80f0b3f9d01b        apache:ubuntu       "/run.sh"           7 seconds ago       Up 4 seconds        0.0.0.0:32771->22/tcp, 0.0.0.0:32770->80/tcp   stupefied_bose

在本地上使用curl抓取网页来验证刚才创建的sample站点

[root@localhost apache_ubuntu]# curl 127.0.0.1:32770
<!DOCTYPE html>
<html>
        <body>
                <p>Hello,Docker!</p>
        </body>
</html>

读者也可以在其他设备上通过访问宿主主机ip:32770来访问sample站点。

不知道有没有细心的读者发现,在apache镜像的Dockerfile中只用EXPOSE定义了对外开放的80端口,而在docker ps -a命令的返回中,却看到新启动的内容映射了两个端口:22和80。

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

命令

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

再次创建镜像:

[root@localhost apache_ubuntu]# docker build -t apache:ubuntu . 

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

   下面,来看看如何映射本地目录。可以通过映射本地目录的方式,来指定容器内Apache服务响应的内容,例如映射本地主机上当前目录下的www目录到容器的/var/www目录:


[root@localhost ~]# docker run -i -d -P -e APACHE_SERVERNAME=test -v `pwd`/www:/var/www/html apache:ubuntu

在当前目录内创建 www目录,并放上定义的页面index.html,内容如下:

<!DOCTYPE HTML>
<HTML>
        <body>
                <h1>HI,DOcker</h1>
                <p>This is the first day I meet the new world</p>
                <p>Huw are you?</p>
                <hr>
        </body>
</HTML>

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


11.2 Nginx

1.使用官方镜像

    用户可以使用docker run指令直接运行官方Nginx镜像 :

[root@localhost ~]# docker run -d -p 80:80 --name webserver nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
f2aa67a397c4: Pull complete 
3c091c23e29d: Pull complete 
4a99993b8636: Pull complete 
Digest: sha256:0fb320e2a1b1620b4905facb3447e3d84ad36da0b2c8aa8fe3a5a81d1187b884
Status: Downloaded newer image for nginx:latest
54214f78667d8f9a197de3244cb698329ef673ebd050ce0bced39f917602869f
然后使用docker ps指令查看当前运行的docker ps 指令查看当前运行的内容:
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                                          NAMES
54214f78667d        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp                             webserver

目前,Nginx容器已经在0.0.0.80启动,并映射了80端口,此时可以打开浏览器访问此地址,就可以看到Nginx输出的页面,如图11-2所示:


                                        图11-2 访问Nginx服务

2.自定义Web界面

同样的,创建index.html文件,并将index.html文件挂载至容器中,即可看到显示自定义的页面。

[root@localhost ~]# docker run -i -d -P -v `pwd`/www:/usr/share/nginx/html nginx

另外,也可以使用Dockerfile来构建新镜像。Dockerfile内容如下:

FROM nginx
COPY ./index.html /usr/share/nignx/html
[root@localhost nginx_dockerfile]# docker search tomcat | wc -l
26

开始构建镜像my-nginx:

[root@localhost nginx_dockerfile]# docker build -t my-nginx .

    构建成功后执行docker run指令:

[root@localhost nginx_dockerfile]# docker run --name nginx-container -d my-nginx

11.3  Tomcat

Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Mircosystems提供的技术规范,实现了对Servlet和Java Server Page(JSP)的支持。同时,它提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,也可以当作一个单独的Web服务器来使用。下面介绍如何定制Tomcat镜像。

首先,尝试的Docker Hubh 搜索已有的Tomcat相关镜像的个数:

[root@localhost nginx_dockerfile]# docker search tomcat | wc -l
26

下面能Tomcat 7.0 为例介绍定制Tomcat镜像的步骤。

1.准备工作

 创建tomcat7.0_jdk1.6文件夹,从www.oracle.com网站上下载sun_jdk 1.6压缩包,解压为jdkd目录。

创建Dockerfile和run.sh文件;

[root@localhost ~]# mkdir tomcat7.0_jdk1.6
[root@localhost ~]# cd tomcat7.0_jdk1.6/
[root@localhost tomcat7.0_jdk1.6]# touch DOckerfiel run.sh
[root@localhost tomcat7.0_jdk1.6]# ls
DOckerfiel  run.sh

下载Tomact,可以到官方网站下载最新版本,也可以直接使用下面链接中给出的版本

[root@localhost tomcat7.0_jdk1.6]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.88/bin/apache-tomcat-7.0.88.zip
解压后,tomcat7.0_jdk1.6目录结构应如下所示(多余的压缩文件忆被删除)

猜你喜欢

转载自blog.csdn.net/tjjingpan/article/details/80350449