概述

前面我们讲了关于Docker的一些基本概念和操作,今天我们以一个简单的Java Web例子来说一下Docker在日常工作中的应用,本篇主要讲如下几部分内容:创建jdk镜像、创建resin镜像、启动web项目。因为本篇中的内容都是基于Dockerfile来创建的,针对于不是很熟悉Dockerfile的读者来说可以先熟悉一下Dockerfile的相关知识:https://docs.docker.com/reference/builder/

创建jdk镜像

首先我们来创建一个包含jdk的基础镜像,这里我们把所有的文件都放置在docker目录下,分别为不同的功能创建不同的目录。

$ sudo mkdir docker/java
$ sudo cd docker/java

接下来我们在该目录下创建一个jdk的Dockerfile文件,具体内容如下:

# openjdk 6
# version 1.0

FROM ubuntu:14.04
MAINTAINER mhy "mhy2011@gmail.com"

RUN apt-get update
RUN apt-get install -y -q openjdk-7-jdk

WORKDIR /

ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
CMD ["/bin/bash"]

创建完Dockerfile之后我们来生成一个jdk的镜像

$ sudo docker build -t pobaby/java .


docker 构建java应用环境 docker搭建java开发环境_docker

可以看到已经生成了一个镜像名为pobaby/java的镜像,接下来我们检验一下该镜像能否正常使用,通过该镜像启动一个容器,然后看看java命令是否能执行。

$ sudo docker run -it pobaby/java


docker 构建java应用环境 docker搭建java开发环境_java_02


可以看到启动的容器中能正常运行Java命令,说明我们的第一个jdk的镜像没有问题,接下来就是要创建包含resin的镜像。


创建resin镜像

这里我们使用的webserver是resin,没有使用tomcat,两个创建镜像的方式都差不多。resin和tomcat一样,在启动时都依赖于底层的jdk,因此我们在创建resin镜像时有两种选择:1、使用我们刚才创建的pobaby/java的镜像为基础镜像来创建;或者2、使用ubuntu这种基础镜像来创建。个人建议是使用第一种方式,保证资源的重复利用,避免不必要的浪费。具体的Dockerfile内容如下:

# resin
# version 1.0

FROM pobaby/java
MAINTAINER mhy "mhy2011@gmail.com"

RUN apt-get update
ADD resin-3.1.14.tar.gz /opt/

WORKDIR /opt/

RUN mv resin-3.1.14 resin

EXPOSE 8080

ENTRYPOINT ["/opt/resin/bin/httpd.sh"]

关于这个Dockerfile中有一行

ADD resin-3.1.14.tar.gz /opt/

是把当前目录下的resin-3.1.14.tar.gz添加到容器的/opt/目录下并解压,当然也可以指定从网络上下线(因为公司网速太慢了,这里就使用这种方式了)。

接下来我们再生成一个包含resin的镜像

$ sudo docker build -t pobaby/resin .


docker 构建java应用环境 docker搭建java开发环境_Dockerfile_03

可以看到,这里我们又生成了一个名为pobaby/resin的镜像。接下来我们通过该镜像启动一个容器,观察一下环境是否正常。

$ sudo docker run -d -p 80:8080 --name web001 pobaby/resin


docker 构建java应用环境 docker搭建java开发环境_Dockerfile_04


这里我们启动了一个容器,然后把本机80端口映射到容器的8080端口上,接下来我们访问一下该容器。

docker 构建java应用环境 docker搭建java开发环境_docker 构建java应用环境_05

可以看到resin能正常启动了,接下来就到我们最重要的一步了。如何把开发好的Java Web程序部署到resin的容器中。

启动Web项目

针对于我们的Web程序来说,因为时常要更新程序并打包,所以不建议把程序直接打包的镜像中,建议采用的方式是:创建一个包含WebServer的基本镜像,然后启动一个容器,在启动容器的时候挂载上我们的web应用,具体如下:

$ sudo docker run -d -p 8881:8080 --name web-demo -v $PWD/webapps:/opt/resin/webapps pobaby/resin



docker 构建java应用环境 docker搭建java开发环境_Docker Java_06

这里我们启动了一个名为web-demo容器,并把webapps下的项目web-demo挂载到容器/opt/resin/webapps下(此处我们只挂载了应用程序,当然也可以使用多个-v参数挂载不同的目录,比如resin的配置文件等)。然后我们访问一下该应用是否能访问,具体效果如下:

docker 构建java应用环境 docker搭建java开发环境_Docker Java_07


docker 构建java应用环境 docker搭建java开发环境_docker_08

从上面可以看到,我们已经实现了一个简单的基于Docker容器运行的Java Web程序,这个程序比较简单,没有数据库连接等功能,后面我们会进行完善,然后搭建一个功能更完善的应用程序。

关于使用Docker搭建Java简易Web开发运行环境就讲到这里,鉴于能力有限,如有不如欢迎大家指正。