使用docker部署nginx+tomcat架構(3):使用docker-compose簡化部署操作


經歷了之前的兩篇,我們已經大體上了解了docker部署容器的過程。

不過,整個部署過程中需要手動輸入很多的docker命令,稍顯繁瑣並且容易出錯。那么有沒有一種相對簡潔優雅的方式來完成這些部署工作呢?答案是有的,docker-compose(一下簡稱“compose”)正是為此而生。

 

關於docker-compose(了解更多:https://docs.docker.com/compose/):

Docker-Compose項目是Docker官方的開源項目,負責實現對Docker容器集群的快速編排。Compose 是一個用戶定義和運行多個容器的 Docker 應用程序。在 Compose 中你可以使用 YAML 文件來配置你的應用服務。然后,只需要一個簡單的命令,就可以創建並啟動你配置的所有服務。

“compose”的安裝過程這里就不詳述了,不過個人推薦通過pip進行安裝,具體安裝過程可百度得知。

 

下面就讓我們來使用“compose”完成之前的部署工作,看看“compose”是怎么簡化操作的。

先看一個配置文件docker-compose.yml:

version: "3"
services:
    mysql:
        image: mysql:5.7
        restart: always
        container_name: mysql
        ports:
            - "3306:3306"
        volumes:
            - ~/mysql/conf:/etc/mysql/conf.d
            - ~/mysql/data:/var/lib/mysql
            - ~/mysql/logs:/var/log/mysql
        environment:
            - MYSQL_ROOT_PASSWORD=admin

    tomcat1:
        image: tomcat
        container_name: tomcat1
        volumes:
            - ~/tomcat/conf:/usr/local/tomcat/conf
            - ~/tomcat/webapps:/usr/local/tomcat/webapps
        depends_on:
            - mysql
        links:
            - mysql

    tomcat2:
        image: tomcat
        container_name: tomcat2
        volumes:
            - ~/tomcat/conf:/usr/local/tomcat/conf
            - ~/tomcat/webapps:/usr/local/tomcat/webapps
        depends_on:
            - mysql
        links:
            - mysql

    nginx:
        image: nginx
        container_name: nginx
        ports:
            - "80:80"
        volumes:
            - ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
            - ~/nginx/www:/usr/share/nginx/html
            - ~/nginx/logs:/var/log/nginx
        links:
            - tomcat1
            - tomcat2

關於compose配置文件的詳細解釋請參看:https://docs.docker.com/compose/compose-file/

這里簡單說下,docker-compose.yml是“compose”的默認配置文件,“compose”就是通過這個文件對docker容器進行快速編排、部署管理的。配置文件遵循YAML語法,並且由三個核心部分組成:version、services和networks(本篇沒有用到)。

version指明當前版本,目前主要有1,2,3三個大版本,每個版本都跟docker-engine有着對應關系。大體的對應關系如下:

services定義了用於部署的服務(容器),以配置文件中的mysql為例進行說明:

image              指定容器鏡像及其版本
container_name     設置容器名稱
ports              配置容器的端口映射
volumes            綁定宿主機的本地路徑到容器
environment        預設容器的環境變量

 

tomcat1中還有depends_on和links,這是兩個很有使用的配置項。

depends_on         通過依賴關系按順序啟動docker服務
links              將依賴的服務以hosts形式注冊到容器

我們知道在部署軟件的時候,時常要考慮個組件之間的依賴關系。比如tomcat如果想訪問數據庫,必須要先啟動mysql(當然也可以是其他數據庫)。在傳統的做法中,一般依賴於軟件實施人員手動進行控制和確認,但是“compose”提供了depends_on配置項就解決了這個問題,只需配置好依賴的docker服務,“compose”就會在部署時優先啟動被依賴的服務。使用過spring的同學應該能夠理解,這就是容器間的“依賴注入”啊。

至於links這個配置項,就更是利器了。在之前的篇章中,我們都是在mysql部署后通過“docker inspect mysql|grep IPAddress”查看mysql的IP,然后再修改tomcat中關於mysql的配置,這樣的方式非常的不智能並且麻煩。但是通過links配置項,docker在啟動過程中會將容器所需連接的服務以hostname的形式注冊到網絡中,那么容器啟動后可通過hostname訪問對應的docker服務,免去了手動配置的痛苦。👍

*nginx的配置文件負載均衡部分:

upstream tomcat {
      server tomcat1:8080;
      server tomcat2:8080;
}

*tomcat關於mysql的配置:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="mysql/test" 
        auth="Container"
        type="javax.sql.DataSource" 
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://mysql:3306/test" 
        username="root"
        password="admin" 
        maxActive="20" 
        maxIdle="10" 
        maxWait="10000" />
</Context>

除上述所提到的,“compose”還提供了很多配置項,具體的就請自己通過官方文檔去了解吧。

 

好了,大體上介紹了配置文件的具體含義,那么接下來就讓我們操作下,來看看實際效果。

在配置文件所在目錄,執行命令:docker-compose up -d

OK,that's all。結束了,就是這么簡單,我們之前廢了半天勁才做好的部署工作,這么一條語句就搞定了。😄

 

#更新

參考源:
https://docs.docker.com/network/links/
https://docs.docker.com/network/bridge/

--link選項已被docker官方列為legacy feature,推薦使用user-defined networks(即自定義網絡)來配置容器間的網絡連接關系。

修改docker-compose.yml:

version: "3"
services:
    nginx:
        ...
        networks:
            - my_net
            
    tomcat:
        ...
        networks:
            - my_net
           
networks:
    my_net:
        driver: bridge

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM