1. 程式人生 > >在Docker容器中部署Web應用

在Docker容器中部署Web應用

本文直接講解如何在Docker容器中實戰部署一個Web應用程式,關於Docker相關的概念和如何安裝Docker請參考相關資料完成。

第一步:工具準備

演示如何在Docker容器中部署一個Java Web應用程式,需要準備的軟體工具包括:jre,tomcat和webapp應用。另外,為了實現在容器啟動時自動啟動webapp,需要編寫一個指令碼工具完成該工作。

如何在tomcat中部署webapp,請參考:

jre1.8.0_31.tar.gz   // 可以選擇其他版本

apache-tomcat-6.0.35.tar.gz // 可以選擇其他版本

MyWeb.war // 自己寫一個web應用即可,才發現csdn不允許上傳附件

start_tomcat.sh

第二步:製作映象

通過編寫Dockerfile的方式製作映象。

需要在Dockerfile中完成如下幾項工作:

(1)安裝jre

(2)安裝tomcat,並完成在tomcat中部署web應用的基本配置(為實現此功能:在製作映象之前直接先完成tomcat的基礎配置,然後直接拷貝到映象中即可)。

(3)對外開發8080埠(具體的埠值可以根據實際Tomcat配置引數為準)。

$mkdir docker

$cd docker

$mkdir webapps

$cp jre1.8.0_31.tar.gz .

$tar xzvf jre1.8.0_31.tar.gz

$cp apache-tomcat-6.0.35.tar.gz

$tar xzvf apache-tomcat-6.0.35.tar.gz

$cp MyWeb.war ./webapps/

$vim apache-tomcat-6.0.35/conf/server.xml

編輯tomcat配置檔案:server.xml,在<Host>節點中新增如下配置:<Context path="myweb"docBase="/webapps/MyWeb.war" reloadable="false"workDir="/tomcat_work"/>,配置片段如下所示:

<Host name="localhost"  appBase="webapps"

     unpackWARs="true" autoDeploy="true"

     xmlValidation="false" xmlNamespaceAware="false">

<!-- SingleSignOn valve, shareauthentication between web applications

       Documentation at:/docs/config/valve.html -->

  <!--

  <Valve className="org.apache.catalina.authenticator.SingleSignOn"/>

  -->

  <!-- Access log processes all example.

       Documentation at:/docs/config/valve.html -->

  <!--

  <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs" 

        prefix="localhost_access_log." suffix=".txt"pattern="common" resolveHosts="false"/>

  -->

<Contextpath="/myweb"docBase="/webapps/MyWeb.war"reloadable="false"workDir="/tomcat_work"/>

</Host>

 

$vim start_tomcat.sh

#!/bin/bash

#Date: 2015/02/02

#Desc:

#       Start tomcat with docker containerstart.  

echo "Start Tomcat ..."

# Export java path

export PATH=$PATH:/usr/local/java/bin

# Display container ipaddress

ifconfig

# Start tomcat

bash /usr/local/tomcat/bin/catalina.sh run

注意:啟動tomcat時必須通過$TOMCAT_HOME/bin/catalina.sh實現,不能使用$TOMCAT_HOME/bin/startup.sh啟動,否則指令碼執行後容器立刻就退出了。

編寫Dockerfile

#Build java web app container image

FROM docker.cn/docker/ubuntu:14.04

MAINTAINER chenchanghui<nuccch2010.163.com>

#Make java and tomcat install directory

RUN mkdir /usr/local/java

RUN mkdir /usr/local/tomcat

#Copy jre and tomcat into image

ADD jre1.8.0_31 /usr/local/java/

ADD apache-tomcat-6.0.35 /usr/local/tomcat/

ADD start_tomcat.sh start_tomcat.sh

#Expose http port

EXPOSE 8080


建立映象

$sudo docker build -t=”ubuntu/myweb:tomcat”.

Sendingbuild context to Docker daemon 270.6 MB

Sendingbuild context to Docker daemon

Step 0 :FROM docker.cn/docker/ubuntu:14.04

 ---> b39b81afc8ca

Step 1 :MAINTAINER chenchanghui <nuccch2010.163.com>

 ---> Running in cd9ba3324dae

 ---> ab45c422bdf5

Removingintermediate container cd9ba3324dae

Step 2 :RUN mkdir /usr/local/java

 ---> Running in f640de521691

 ---> bd94048cb633

Removingintermediate container f640de521691

Step 3 :RUN mkdir /usr/local/tomcat

 ---> Running in de4a392ec89d

 ---> 956ac99b8bec

Removingintermediate container de4a392ec89d

Step 4 :ADD jre1.8.0_31 /usr/local/java/

 ---> e3181a61f635

Removingintermediate container b69c147f28fe

Step 5 :ADD apache-tomcat-6.0.35 /usr/local/tomcat/

 ---> 9169a4ab9a80

Removingintermediate container c190162d7a5c

Step 6 :ADD start_tomcat.sh start_tomcat.sh

 ---> cf61f83dc0b0

Removingintermediate container 3f10c2a9e374

Step 7 :EXPOSE 8080

--->abea02c999a2

Removingintermediate container a3841acba123

Successfullybuilt abea02c999a2


第三部:啟動容器

webapp通過資料卷掛在到容器中進行部署,不需要拷貝到映象中。

$sudo docker run -t -i --name tomcat –v /home/$username/docker/webapps:/webapps/

ubuntu/myweb:tomcat /bin/bash/start_tomcat.sh

Start Tomcat ...

eth0     Link encap:Ethernet  HWaddr02:42:ac:11:00:0c 

         inet addr:172.17.0.12 Bcast:0.0.0.0  Mask:255.255.0.0

……..

Feb 02, 2015 1:38:42 PMorg.apache.catalina.core.AprLifecycleListener init

INFO: The APR based Apache Tomcat Nativelibrary which allows optimal performance in production environments was notfound on the java.library.path:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

Feb 02, 2015 1:38:42 PMorg.apache.coyote.http11.Http11Protocol init

INFO: Initializing Coyote HTTP/1.1 onhttp-8080

Feb 02, 2015 1:38:42 PMorg.apache.catalina.startup.Catalina load

INFO: Initialization processed in 788 ms

Feb 02, 2015 1:38:42 PMorg.apache.catalina.core.StandardService start

INFO: Starting service Catalina

Feb 02, 2015 1:38:42 PM org.apache.catalina.core.StandardEnginestart

INFO: Starting Servlet Engine: ApacheTomcat/6.0.35

Feb 02, 2015 1:38:42 PMorg.apache.catalina.startup.HostConfig deployDirectory

INFO: Deploying web application directorymanager

Feb 02, 2015 1:38:42 PM org.apache.catalina.startup.HostConfigdeployDirectory

INFO: Deploying web application directorydocs

Feb 02, 2015 1:38:42 PMorg.apache.catalina.startup.HostConfig deployDirectory

INFO: Deploying web application directoryROOT

Feb 02, 2015 1:38:42 PM org.apache.catalina.startup.HostConfigdeployDirectory

INFO: Deploying web application directoryexamples

Feb 02, 2015 1:38:43 PMorg.apache.catalina.startup.HostConfig deployDirectory

INFO: Deploying web application directoryhost-manager

Feb 02, 2015 1:38:43 PM org.apache.coyote.http11.Http11Protocolstart

INFO: Starting Coyote HTTP/1.1 on http-8080

Feb 02, 2015 1:38:43 PMorg.apache.jk.common.ChannelSocket init

INFO: JK: ajp13 listening on /0.0.0.0:8009

Feb 02, 2015 1:38:43 PMorg.apache.jk.server.JkMain start

INFO: Jk running ID=0 time=0/27  config=null

Feb 02, 2015 1:38:43 PMorg.apache.catalina.startup.Catalina start

INFO: Server startup in 842 ms


如日誌所示,Docker容器已經啟動,並且其中安裝的tomcat已經成功啟動。

小技巧:啟動容器時帶引數-t -i和不帶引數的區別:帶引數-t -i時可以通過Ctrl+C停止容器執行,不帶引數-t -i啟動時,停止容器只能通過命令:$sudo docker stop $containerid實現。