1. 程式人生 > >從零開始使用Docker構建Java Web開發執行環境

從零開始使用Docker構建Java Web開發執行環境

概述

前面我們講了關於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 "[email protected]"

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 "[email protected]"

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開發執行環境就講到這裡,鑑於能力有限,如有不如歡迎大家指正。