Docker Compose之容器編排開發初探

語言: CN / TW / HK

1、前言

  • Docker Compose 是 Docker 官方編排(Orchestration)專案之一,負責快速在叢集中部署分散式應用。

  • Compose 是一個用於定義和執行多個 Docker 應用程式的工具。使用 Compose,您可以使用 YAML 檔案來配置應用程式。然後,使用一個命令,您可以從您的配置中建立並啟動所有服務。

  • Dockerfile 可以讓使用者管理一個單獨的應用容器;而 Compose 則允許使用者在一個模板(YAML 格式)中定義一組相關聯的應用容器(被稱為一個 project,即專案),例如一個 Web 服務容器再加上後端的資料庫服務容器等。

首先介紹幾個術語

  • 服務(service):一個應用容器,實際上可以執行多個相同映象的例項。

  • 專案(project):由一組關聯的應用容器組成的一個完整業務單元。

可見,一個專案可以由多個服務(容器)關聯而成,Compose 面向專案進行管理。

2、安裝

:point_right: 官方文件在 這裡

我才用 curl 方式為所有使用者安裝。(也可以用 apt-get 方式,具體參考 文件

# 下載 Docker Compose 的當前穩定版本(安裝給所有伺服器使用者:/usr/local/bin)
sudo curl -L "http://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 檢視是否安裝成功
docker-compose -h
docker-compose --version # docker-compose version 1.29.2, build 5becea4c

# 對二進位制檔案應用可執行許可權
chmod +x /usr/local/bin/docker-compose

3、解除安裝

通過 curl 安裝 Compose CLI 外掛,使用下面命令解除安裝

rm /usr/local/bin/docker-compose

4、常用命令

docker-compose up  # 啟動
docker-compose up -d  # 後臺啟動

# 停止應用程式,方法是docker-compose down 在第二個終端的專案目錄中執行,或者在啟動應用程式的原始終端中按 CTRL+C。
docker-compose down / CTRL + C 
docker-compose stop

# 使用以下down 命令關閉所有內容,完全刪除容器。傳遞--volumes給 Redis 容器使用的資料卷
docker-compose down --volumes

5、官網示例啟動效果

示例配置在 這裡

  • 啟動日誌

  • 檢視映象

  • 瀏覽器執行效果

說明:

# 預設命名規則
# 預設的服務名: 檔名_服務名_num
# _num 代表副本,多個伺服器,叢集,高可用,高併發,負載均衡

composetest_redis_1
composetest_web_1

docker service ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

6、docker-compose網路

通過docker-compose啟動的專案(包含多個服務),都在同一個網路下,可以通過服務名字訪問

  • 檢視 docker-compose 網路
[[email protected] ~]# :point_right::point_right:docker network ls:point_left::point_left:
NETWORK ID     NAME                  DRIVER    SCOPE
8d10d0e8db5e   bridge                bridge    local
3fa1e11e2050   composetest_default   bridge    local   # docker-compose生成的
e8bf4fced9e2   host                  host      local
0096a971fd2c   mynet                 bridge    local
6263db0933b9   none                  null      local
0350d84612be   redis                 bridge    local
799426d70aa2   test-network          bridge    local
c143092e025f   todo-app              bridge    local
[[email protected] ~]# :point_right::point_right:docker network inspect 3fa1e11e2050:point_left::point_left:
[
    {
        "Name": "composetest_default",
        "Id": "3fa1e11e2050b81eb69691487789dd545d6ce3c36e686035c0a49db54f86b2f7",
        "Created": "2021-10-10T15:46:29.084459645+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.21.0.0/16",
                    "Gateway": "172.21.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "57876e08abc657e884e2f527d930e0ffc34d632928d38ae2e29efa03c91b1980": {
                "Name": "composetest_redis_1",
                "EndpointID": "b1803007038c048525602a20da0c2aac73f8a87741ce127e84f89084fd2b75f0",
                "MacAddress": "02:42:ac:15:00:03",
                "IPv4Address": "172.21.0.3/16",
                "IPv6Address": ""
            },
            "994a3c48416ace662a09b1179a695ee63c9a3c33fccefbb0886374260fcd6aab": {
                "Name": "composetest_web_1",
                "EndpointID": "cd7e479a22bd251c87214e27d033af3a1bf4164664457e9ceb8cf32f690cded7",
                "MacAddress": "02:42:ac:15:00:02",
                "IPv4Address": "172.21.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "composetest",
            "com.docker.compose.version": "1.29.2"
        }
    }
]
[[email protected] ~]#

7、docker-compose 啟動容器常見問題

7.1、映象更新之後容器服務沒有更新

可以通過 docker inspect containerName 檢視容器資訊

啟停容器並不會拉取最新映象

docker-compose up -d

或者 
docker-compose up -d 服務名

本篇完:tada::tada::tada:,後面接著分享 docker-compose 1分鐘搭建WordPress ,有興趣的話,麻煩看官點個贊,支援一下,謝謝啦:blush:

:balloon::balloon::balloon:

:rose: 持續更文,關注我,你會發現一個踏實努力的寶藏前端:blush:,讓我們一起學習,共同成長吧。

:tada: 喜歡的小夥伴記得點贊關注收藏喲,回看不迷路 :wink:

:gift: 歡迎大家評論交流, 蟹蟹:blush: