最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker自動部署Apache Tomcat的方法

 更新時間:2018年04月19日 15:06:21   作者:崔婧雯  
這篇文章主要介紹了Docker自動部署Apache Tomcat的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

介紹

本文會講述:

  1. 擴展Tomcat的官方Dockerfile
  2. 構(gòu)建新的鏡像
  3. 從修改過的新鏡像啟動容器
  4. 在容器里部署RESTful的Web服務并測試

Apache Tomcat

使用docker search可以查到最流行的(和官方的)Docker Tomcat容器:

$ sudo docker search tomcat
[sudo] password for craig: 
NAME                 DESCRIPTION                   STARS   OFFICIAL  AUTOMATED
tomcat                Apache Tomcat is an open source implementa...  103    [OK]    
tutum/tomcat             Tomcat image - listens in port 8080. For t...  38          [OK]
consol/tomcat-7.0           Tomcat 7.0.57, 8080, "admin/admin"       12          [OK]
consol/tomcat-8.0           Tomcat 8.0.15, 8080, "admin/admin"       9          [OK]
consol/tomcat-6.0           Tomcat 6.0.43, 8080, "admin/admin"       6          [OK]
consol/tomcat-4.1           Tomcat 4.1.40, 8080, "admin/admin"       4          [OK]
consol/tomcat-5.0           Tomcat 5.0.30, 8080, "admin/admin"       4          [OK]
consol/tomcat-5.5           Tomcat 5.5.36, 8080, "admin/admin"       4          [OK]
consol/tomcat-3.3           Tomcat 3.3.2, 8080, "admin/admin"        4          [OK]
readytalk/tomcat-native        Debian backed Tomcat + Tomcat Native Library  3          [OK]
malderhout/tomcat           Tomcat7 with OpenJDK7 on CentOS7        3          [OK]
dordoka/tomcat            Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba...  3          [OK]
meirwa/spring-boot-tomcat-mysql-app  a sample spring-boot app using tomcat and ...  2          [OK]
h2000/docker-tomcat-youtrack     Dockerfile for youtrack to run under tomcat.  1          [OK]
nicescale/tomcat           Tomcat service for NiceScale. http://nices...  1          [OK]
dmean/liferay-tomcat         Debian + Liferay CE Tomcat           1          [OK]
atomi/tomcat                                     0          [OK]
mminke/apache-tomcat         A Docker image which contains the Apache T...  0          [OK]
ericogr/tomcat            Tomcat 8.0.21, 8080, "docker/docker"      0          [OK]
holmes/tomcat                                     0          [OK]
paulkling/tomcat                                   0          [OK]
dynamind/tomcat                                    0          [OK]
fabric8/tomcat-8.0          runs Apache Tomcat 8.0 with jolokia enable...  0          [OK]
learninglayers/tomcat                                 0          [OK]
dmglab/tomcat             CentOS 7 based tomcat installation       0          [OK]

官方網(wǎng)站描述了所支持的標簽:

我正在用的是版本7,所以選擇了tomcat:7。

我是使用Docker的新手(在寫這邊文章的時候),因此不想稱此文是“最佳實踐”。本文所寫的是我認為好用的實踐,如果有不同意見也請告訴我。對于每一個想要啟動的Docker容器,我都創(chuàng)建了自己的Dockerfile并且擴展了鏡像。當然也完全可以不擴展鏡像,而直接使用它。不過基于目標鏡像構(gòu)建我們自己的鏡像應該是能穩(wěn)定擴展別人工作成果的更合適的方式。

本文示例中,創(chuàng)建了一個簡單的Dockerfile,如下:

FROM tomcat:7-jre7
MAINTAINER "Craig Trim <craigtrim@gmail.com>"

用如下命令構(gòu)建鏡像:

$ sudo docker build -t craig/tomcat .

這樣擴展的一個好處是簡化了環(huán)境。最終,我要為Eclipse、MySQL和其它應用使用容器。我會給每個應用一個簡化的命名空間和鏡像名稱。做項目的時候,我推薦使用項目的代碼名稱作為容器的命名空間。我也簡化了標簽名稱。這些都是很小的注意事項,不過又很重要。在大型項目中,有很多開發(fā)人員參與,這樣的方式就會很有幫助。通用的命名空間,簡化的鏡像名稱和標簽,會幫助項目成員更方便得使用官方項目鏡像。

我的示例如下:

tomcat:7-jre7  ns/tomcat
mysql:5.6.23  ns/mysql
fgrehm/eclipse:v4.4.1  ns/eclipse

ns代表命名空間,每個項目成員都能理解。啟動容器只需要記住項目代碼名(命名空間)和應用名稱即可。

運行Tomcat

如下命令會運行Tomcat,并將容器的8080端口暴露到宿主機器的8080端口:

$ sudo docker run -p 8080:8080 craig/tomcat

如果還需要從這個鏡像啟動容器,只需要:

$ sudo docker run -p 8081:8080 craig/tomcat

測試tomcat已經(jīng)啟動:

擴展Dockerfile

我需要擴展Dockerfile,來實現(xiàn)Maven的自動部署。需要添加settings.xml,更新tomcat-user.xml文件。如下所示:

tomcat-users.xml:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="craig" password="password" roles="manager,manager-gui,manager-script" />
</tomcat-users>

settings.xml:

<?xml version="1.0" encoding="UTF-8"?>
<settings>
<servers> 
<server>
<id>TomcatServer</id>
<username>craig</username>
<password>password</password>
</server> 
</servers>

這些文件和Dockerfile放在同一個目錄下。

Dockerfile更新為:

FROM tomcat:7-jre7

MAINTAINER "Craig Trim <craigtrim@gmail.com>"

ADD settings.xml /usr/local/tomcat/conf/
ADD tomcat-users.xml /usr/local/tomcat/conf/

當鏡像構(gòu)建時,配置文件會被放置到正確目錄下。從這個鏡像啟動的任意容器都會包含這些文件。

重構(gòu)鏡像

用之前的方法重新構(gòu)建鏡像:

$ sudo docker build -t craig/tomcat .
Sending build context to Docker daemon 5.632 kB
Sending build context to Docker daemon 
Step 0 : FROM tomcat:7-jre7
---> 77eb038c09d1
Step 1 : MAINTAINER "Craig Trim <craigtrim@gmail.com>"
---> Using cache
---> cadc51a3054c
Step 2 : ADD settings.xml /usr/local/tomcat/conf/
---> Using cache
---> 5009ba884f1f
Step 3 : ADD tomcat-users.xml /usr/local/tomcat/conf/
---> Using cache
---> 33917c541bb5
Successfully built 33917c541bb5

可以查看鏡像歷史:

$ sudo docker history craig/tomcat
IMAGE        CREATED       CREATED BY                   SIZE
33917c541bb5    4 hours ago     /bin/sh -c #(nop) ADD file:c1d08c42d5808537b4  1.761 kB
5009ba884f1f    4 hours ago     /bin/sh -c #(nop) ADD file:5dd8f0f6d0cd64de3c  212 B
cadc51a3054c    4 hours ago     /bin/sh -c #(nop) MAINTAINER "Craig Trim <cra  0 B
77eb038c09d1    3 weeks ago     /bin/sh -c #(nop) CMD [catalina.sh run]     0 B
a96609fc8364    3 weeks ago     /bin/sh -c #(nop) EXPOSE map[8080/tcp:{}]    0 B
ca99125fbf51    3 weeks ago     /bin/sh -c curl -SL "$TOMCAT_TGZ_URL" -o tomc  13.63 MB
e7ca14a4280a    3 weeks ago     /bin/sh -c #(nop) ENV TOMCAT_TGZ_URL=https://  0 B
eac866e259d8    3 weeks ago     /bin/sh -c #(nop) ENV TOMCAT_VERSION=7.0.59   0 B
d391d657b53a    3 weeks ago     /bin/sh -c #(nop) ENV TOMCAT_MAJOR=7      0 B
7b323fd1e0d3    3 weeks ago     /bin/sh -c gpg --keyserver pool.sks-keyserver  113.9 kB
4412b8a11fb6    3 weeks ago     /bin/sh -c #(nop) WORKDIR /usr/local/tomcat   0 B
b4ec9d590927    3 weeks ago     /bin/sh -c mkdir -p "$CATALINA_HOME"      0 B
681b802059fe    3 weeks ago     /bin/sh -c #(nop) ENV PATH=/usr/local/tomcat/  0 B
11b245da4142    3 weeks ago     /bin/sh -c #(nop) ENV CATALINA_HOME=/usr/loca  0 B
44faa7b2809f    3 weeks ago     /bin/sh -c apt-get update && apt-get install  164.5 MB
42c3653e1b26    3 weeks ago     /bin/sh -c #(nop) ENV JAVA_DEBIAN_VERSION=7u7  0 B
45ff981e92b4    3 weeks ago     /bin/sh -c #(nop) ENV JAVA_VERSION=7u75     0 B
5e9b188bc82c    3 weeks ago     /bin/sh -c apt-get update && apt-get install  676 kB
1073b544a1cb    3 weeks ago     /bin/sh -c apt-get update && apt-get install  44.34 MB
50ec2d202fe8    3 weeks ago     /bin/sh -c #(nop) CMD [/bin/bash]        0 B
3b3a4796eef1    3 weeks ago     /bin/sh -c #(nop) ADD file:fb7c52fc8e65391715  122.8 MB
511136ea3c5a    21 months ago                            0 B

所做的變動是四小時之前發(fā)生的?,F(xiàn)在可以從修改過的鏡像啟動容器,來測試自動化部署。

部署到Tomcat

這可能應該是另外一篇教程的主題,不過檢驗Tomcat安裝是否成功的最佳方式就是部署一個WAR文件。我用Maven創(chuàng)建了一個簡單的JavaEE項目,結(jié)構(gòu)如下:

$ tree
.
+-- pom.xml
+-- src
¦  +-- main
¦  ¦  +-- java
¦  ¦    +-- com
¦  ¦      +-- trimc
¦  ¦        +-- blogger

如下插件(在pom.xml文件里)指定了部署信息,包括暴露的端口和用戶名密碼:

<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<server>TomcatServer</server>
<path>/sample</path>
<username>craig</username>
<password>password</password>
</configuration>
</plugin>

使用Maven將其部署到Tomcat:

$ mvn tomcat7:deploy
[INFO] Scanning for projects...
[INFO]                                     
[INFO] ------------------------------------------------------------------------
[INFO] Building Test Runtime 1.0.0
[INFO] ------------------------------------------------------------------------
[INFO] 

*** SNIP ***

[INFO] --- tomcat7-maven-plugin:2.2:deploy (default-cli) @ sandbox-web2 ---
[INFO] Deploying war to http://localhost:8080/test 
Uploading: http://localhost:8080/manager/text/deploy?path=%2Ftest
Uploaded: http://localhost:8080/manager/text/deploy?path=%2Ftest (1352 KB at 18512.6 KB/sec)

[INFO] tomcatManager status code:200, ReasonPhrase:OK
[INFO] OK - Deployed application at context path /test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.495 s
[INFO] Finished at: 2015-03-31T19:08:12-07:00
[INFO] Final Memory: 15M/506M
[INFO] ------------------------------------------------------------------------

Tomcat日志顯示如下:

Apr 01, 2015 2:08:12 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.9 09/02/2011 11:17 AM' 
Apr 01, 2015 2:08:12 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deployment of web application archive /usr/local/tomcat/webapps/test.war has finished in 826 ms

輸出如下圖:

結(jié)論

什么是至關(guān)重要的?

我們不需要安裝Tomcat,而是需要在Dockerfile定義,然后從鏡像里啟動容器。似乎看起來比下載Tomcat,解壓,運行啟動腳本要復雜一些。

這樣做帶來的好處包括:

  1. 不是所有應用都像Tomcat一樣易于安裝。
  2. 幾乎所有應用在安裝后都需要額外的配置。

Docker的作用有點類似Vagrant/Puppet/Chef/Ansible等。需要寫一個腳本定義環(huán)境,之后build工具就可以自動搭建出環(huán)境。在這里Docker的優(yōu)勢顯而易見,那就是比虛擬機更為輕量。大多數(shù)情況下,就為了使用Tomcat而占用整個虛擬機會造成資源的浪費。而且很多程序員是在筆記本上工作,也很難同時啟動多個虛擬機。

這也就是Docker的第三個好處:可以從同一個鏡像啟動多個容器。啟動多個容器所占用的資源比啟動多個虛擬機要少得多,啟動時間也非??臁?br />

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Docker部署MySQL并實現(xiàn)客戶端連接

    Docker部署MySQL并實現(xiàn)客戶端連接

    這篇文章介紹了Docker部署MySQL并實現(xiàn)客戶端連接的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-01-01
  • 使用Grafana 展示Docker容器的監(jiān)控圖表并設置郵件報警規(guī)則(圖解)

    使用Grafana 展示Docker容器的監(jiān)控圖表并設置郵件報警規(guī)則(圖解)

    這篇文章主要介紹了使用Grafana 展示Docker容器的監(jiān)控圖表并設置郵件報警規(guī)則的圖文教程,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-01-01
  • 局域網(wǎng)內(nèi)部署 Docker Registry(推薦)

    局域網(wǎng)內(nèi)部署 Docker Registry(推薦)

    本文將從創(chuàng)建單機的 Docker Registry 開始,逐步完成局域網(wǎng)內(nèi)可用的 Docker Registry 的創(chuàng)建,并重點解釋如何使用 IP 地址訪問 Registry 的方法
    2017-05-05
  • Docker Compose 輕松管理多容器應用小結(jié)

    Docker Compose 輕松管理多容器應用小結(jié)

    Docker Compose 是管理多容器應用的利器,通過一個簡單的 YAML 文件,開發(fā)者可以輕松定義服務、網(wǎng)絡和數(shù)據(jù)卷的配置,這篇文章主要介紹了Docker Compose :輕松管理多容器應用,需要的朋友可以參考下
    2024-12-12
  • Docker容器沒有權(quán)限寫入宿主機目錄的解決方案

    Docker容器沒有權(quán)限寫入宿主機目錄的解決方案

    這篇文章主要介紹了Docker容器沒有權(quán)限寫入宿主機目錄的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • dockerfile中ENTRYPOINT與CMD的結(jié)合使用及區(qū)別

    dockerfile中ENTRYPOINT與CMD的結(jié)合使用及區(qū)別

    這篇文章主要介紹了dockerfile中ENTRYPOINT與CMD的結(jié)合使用,大家都知道CMD 與 ENTRYPOINT都是用于指定啟動容器執(zhí)行的命令,那么他們倆有什么區(qū)別呢,本文給大家詳細介紹,需要的朋友可以參考下
    2021-08-08
  • Docker部署RabbitMQ的實現(xiàn)方法(圖文并茂)

    Docker部署RabbitMQ的實現(xiàn)方法(圖文并茂)

    本文詳細介紹了如何使用Docker部署RabbitMQ的步驟,包括拉取RabbitMQ鏡像,創(chuàng)建與授權(quán)文件夾,創(chuàng)建RabbitMQ容器,查看啟動日志,訪問控制臺和登錄等,全程詳細的參數(shù)解釋和操作步驟,讓Docker部署RabbitMQ變得簡單易行
    2024-10-10
  • docker exec執(zhí)行多個命令的操作

    docker exec執(zhí)行多個命令的操作

    這篇文章主要介紹了docker exec執(zhí)行多個命令的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • PVE下擴展openwrt?for?x86分區(qū)大小方式

    PVE下擴展openwrt?for?x86分區(qū)大小方式

    本文介紹了在PVE環(huán)境下如何對OpenWRT虛擬機的分區(qū)進行擴容,包括磁盤調(diào)整、軟件安裝、分區(qū)配置和系統(tǒng)引導等步驟,操作前需做好備份,以防數(shù)據(jù)丟失
    2024-10-10
  • Docker Elasticsearch集群部署的操作過程

    Docker Elasticsearch集群部署的操作過程

    這篇文章主要介紹了Docker Elasticsearch集群部署的操作過程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-03-03

最新評論

红原县| 白玉县| 洪湖市| 高邮市| 瑞丽市| 怀来县| 西华县| 武宣县| 永兴县| 怀仁县| 伽师县| 西青区| 景泰县| 扎赉特旗| 揭东县| 琼结县| 吐鲁番市| 松桃| 金川县| 秀山| 浦城县| 衡山县| 南宫市| 嘉鱼县| 石林| 永康市| 新干县| 彰武县| 铜山县| 富锦市| 厦门市| 玉门市| 铅山县| 裕民县| 耒阳市| 大余县| 岐山县| 佳木斯市| 高碑店市| 郸城县| 塘沽区|