2016年11月23日星期三

Docker_013:构建一个 Java Web 应用

环境:MAC OS  X 10.12.1 + Docker 1.12.3

该应用包括两个镜像:
(1)一个镜像从 URL 拉取指定的 war 文件,并将其保存到卷里。
(2)一个镜像安装了 Tomcat,运行这些 war 文件。

1. 构建 fetcher 镜像
$ cd /Users/maping/mygit/dockerbook-code/code/6/tomcat

$ cd fetcher

$ cat Dockerfile
FROM ubuntu:16.04
MAINTAINER James Turnbull
ENV REFRESHED_AT 2016-06-01

RUN apt-get -yqq update
RUN apt-get -yqq install wget

VOLUME [ "/var/lib/tomcat7/webapps/" ]
WORKDIR /var/lib/tomcat7/webapps/

ENTRYPOINT [ "wget" ]
CMD [ "--help" ]

$ docker build -t jamtur01/fetcher .

$ docker images

2. 获取 war 文件
$ docker run -it --name sample jamtur01/fetcher https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war
因为设置了容器的工作目录,sample.war 最终会保存到 /var/lib/tomcat7/webapps/ 目录中。
由于长城墙原因,导致无法获取  https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war。
因此,提前下好 https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war,并拷贝到 fetcher 目录下。

修改 Dockerfile 如下:
FROM ubuntu:16.04
MAINTAINER James Turnbull
ENV REFRESHED_AT 2016-06-01

RUN apt-get -yqq update
RUN apt-get -yqq install wget

VOLUME [ "/var/lib/tomcat7/webapps/" ]
WORKDIR /var/lib/tomcat7/webapps/

COPY sample.war /var/lib/tomcat7/webapps/

ENTRYPOINT [ "wget" ]
CMD [ "--help" ]

运行命令改为 $ docker run -it --name sample jamtur01/fetcher 

查看某个卷的具体位置
$ docker inspect -f "{{ .Config.Volumes }}" sample
map[/var/lib/tomcat7/webapps/:{}]

$ ls -l /var/lib/docker/vfs/dir // 我是 MAC,没有此目录

3. 构建 tomcat7 镜像
$ /Users/maping/mygit/dockerbook-code/code/6/tomcat

$ cd tomcat7

$ cat Dockerfile
FROM ubuntu:16.04
MAINTAINER James Turnbull
ENV REFRESHED_AT 2016-06-01

RUN apt-get -yqq update
RUN apt-get -yqq install tomcat7 default-jdk

ENV CATALINA_HOME /usr/share/tomcat7
ENV CATALINA_BASE /var/lib/tomcat7
ENV CATALINA_PID /var/run/tomcat7.pid
ENV CATALINA_SH /usr/share/tomcat7/bin/catalina.sh
ENV CATALINA_TMPDIR /tmp/tomcat7-tomcat7-tmp

RUN mkdir -p $CATALINA_TMPDIR

VOLUME [ "/var/lib/tomcat7/webapps/" ]

EXPOSE 8080

ENTRYPOINT [ "/usr/share/tomcat7/bin/catalina.sh", "run" ]

$ docker build -t jamtur01/tomcat7 .
$ docker images

4. 运行 war 文件
$ docker run --name sample_app --volumes-from sample -d -P jamtur01/tomcat7
说明:-P (大写的P)表示发布容器所有暴露的端口给宿主机

$ docker port sample_app 8080
0.0.0.0:32769

访问 http://localhost:32769/sample


没有评论: