1、先說如何在docker中部署tomcat

    第一步:root使用者登入在系統根目錄下建立資料夾tomcat7,命令如:mkdir tomcat7,並且切換到該目錄下:cd tomcat7;

    第二步:建立Dockerfile,命令如:touch Dockerfile;

    第三步:編寫Dockerfile,命令如:vim Dockerfile,完成以下命令編寫:

                    FROM ubuntu:14.04
                    MAINTAINER zhaichong <[email protected]>
                    ENV REFRESHED_AT 2015-7-28

                    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 9000

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

                    說明:這裡的EXPOSE要把程式中需要使用到的埠都要暴露出去。根據環境變數CATALINA_BASE可以知道VOLUME指定的目錄就是tomcat部署war包的目錄。

      第四步:生成映象,命令如:docker build -t  test/test_app . (注意這裡有個英文的句號);注意,在這個過程中docker需要下載安裝的jdk和tomcat程式所以比較忙,可以通過命令:docker image檢視下,返回的資料中第一行有個REPOSITORY和TAG都是<none>的資料行,其中的VIRTUAL_SIZE是階段性變大的,說明是在下載。

      第五步:執行映象生成容器,命令如:docker run  --name test_app -d -p 8080:8080 -p 9000:9000 映象id,如果不知道映象id是多少就使用命令:docker images檢視下,注意這裡把EXPOSE出來的埠和宿主主機的埠繫結起來了,以後就可以使用宿主主機的IP地址和這個埠來訪問docker容器中的tomcat以及其中的應用程式了。

      第六步:測試:在瀏覽器位址列敲:http://宿主主機ip:8080/,好了成功了。

      可以使用命令:docker port 容器id 8080,這個命令檢視容器的8080埠和宿主主機埠之間的對映關係,而已看出來現在容器的8080埠對映的是宿主主機的8080埠。

2、再說如何部署我們的應用程式到docker容器的tomcat裡?

      大家知道tomcat在容器中,如果要像在宿主主機上那樣部署tomcat應用程式肯定是不行的。那麼採用什麼辦法呢?

      第一步:上一個問題中我們已經知道war包是部署在容器的位置是:/var/lib/tomcat7/webapps/,那麼這個位置到底在什麼地方?使用命令:docker inspect -f "{{.Volumes}}" 容器id,如果不知道容器id,則可以通過:docker ps的方式檢視到所有執行的容器,也可以通過docker ps -a的方式檢視所有容器,包括執行的和不執行的。

      會得出以下的結果:

      map[/var/lib/tomcat7/webapps:/var/lib/docker/vfs/dir/28d6dd0455d92f0160288a56f838d8aeeff402a843bd57d3b21fcd80eac7df02],在這個map的中括號裡,冒號前邊的是容器中的目錄,冒號後邊的對應的宿主主機中的目錄,所以我們只需要把我們的war包拷貝到這個地方然後重啟tomcat即可。

      這裡要注意,由於我們上邊寫的Dockerfile中預設容器啟動時是會啟動tomcat的,所以這裡只需要重啟容器就能讓tomcat把我們的容器載入上,命令如:

      docker restart 容器id

3、如果要看成tomcat的日誌呢?比如檢視啟動時的日誌,則可以使用命令:

       docker logs 容器id,如果要持續觀察日誌,則是:docker logs -f 容器id,這個時候日誌是從頭開時讀的,如果日誌很長會刷屏很久,如果只打算看最新的日誌可以採用以下的方式:docker logs --tail 0 -f  容器id

      注意,有的時候我們想在執行docker run命令的時候才指定對映的Volumes,則可以使用如下命令:

docker run --name gboat2_ca -d -p 8080:8080 -p 9000:9000 --link db001:db_ca -v /home/webapp/ca:/var/lib/tomcat7/webapps/ 64de1445c34c,這裡一定要注意的是最後的英文冒號前邊是宿主主機的資料夾路徑,冒號後邊是容器中的路徑。