概述
前面我们讲了关于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 .
可以看到已经生成了一个镜像名为pobaby/java的镜像,接下来我们检验一下该镜像能否正常使用,通过该镜像启动一个容器,然后看看java命令是否能执行。
$ sudo docker run -it pobaby/java
可以看到启动的容器中能正常运行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 .
可以看到,这里我们又生成了一个名为pobaby/resin的镜像。接下来我们通过该镜像启动一个容器,观察一下环境是否正常。
$ sudo docker run -d -p 80:8080 --name web001 pobaby/resin
这里我们启动了一个容器,然后把本机80端口映射到容器的8080端口上,接下来我们访问一下该容器。
可以看到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
这里我们启动了一个名为web-demo容器,并把webapps下的项目web-demo挂载到容器/opt/resin/webapps下(此处我们只挂载了应用程序,当然也可以使用多个-v参数挂载不同的目录,比如resin的配置文件等)。然后我们访问一下该应用是否能访问,具体效果如下:
从上面可以看到,我们已经实现了一个简单的基于Docker容器运行的Java Web程序,这个程序比较简单,没有数据库连接等功能,后面我们会进行完善,然后搭建一个功能更完善的应用程序。
关于使用Docker搭建Java简易Web开发运行环境就讲到这里,鉴于能力有限,如有不如欢迎大家指正。