1. 程式人生 > Docker入門教學 >初識 DockerCompose

初識 DockerCompose

1. 為什麼要用docker compose

在多階段構建章節中,我們將flask應用打包成了映象myhello,然後建立myhello應用容器,它依賴redis服務,所以我們設定myhello容器通過宿主機網路與redis進行資料交換。

如果在別的伺服器上,使用Docker重新部署一邊,操作的過程還是比較麻煩的。一般來說,我們要求每個Docker容器只執行一個獨立服務,每個映象都要保持儘可能的簡潔、功能單一,貌似這些規範反而降低了我們的效率。

同時,隨著技術演進,我們越來越推崇將大型服務拆分成較小的微服務,分別部署到獨立的機器或容器中,也就是說,我們的應用系統往往由數十個甚至上百個小型服務組成。試想一下,使用之前講到的容器技術搭建系統,不僅需要眾多複雜的命令,處理眾多容器間的依賴更是非常消耗精力的。

歸結下來,我們缺少一個對容器組合進行管理的工具。

Docker Compose 是 Docker 官方編排專案。使用 Docker Compose 可以輕鬆、高效的管理容器,它是一個用於定義和執行多容器 Docker 的應用程式工具。在 Docker Compose 裡,我們通過一個配置檔案,將所有與應用系統相關的軟體及它們對應的容器進行配置,之後使用 Docker Compose 提供的命令進行啟動,就能讓 Docker Compose 將剛才我們所提到的那些複雜問題解決掉。

2. 獲取 Docker Compose

安裝 Docker Compose 可以通過下面命令自動下載適應版本的 Compose,併為安裝指令碼新增執行許可權

# 下載 docker-compose 
wget https://github.com/docker/compose/releases/download/1.26.0/docker-compose-Linux-x86_64
# 移到 /usr/local/bin/docker-compose
sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
# 給 docker-compose 執行許可權
sudo chmod +x /usr/local/bin/docker-compose

檢視安裝是否成功:

docker-compose -v

3. 使用 Docker Compose

使用 Docker Compose 的步驟分成三步。

  1. 也可以使用現有的映象 ,或者根據需要編寫容器所需映象的 Dockerfile
  2. 編寫獲取用於配置容器的 docker-compose.yml
  3. 使用 docker-compose 命令啟動應用

準備映象這一過程我們之前已經掌握了,編寫docker-compose.yml部分我們會放在下一節詳細介紹,這裡我們就直接來使用它,感受Docker Compose 的強大功能。

3.1 編寫 docker-compose.yml

進入dockerfiledir目錄,新建redis目錄,將之前部署redis容器用到的redis.conf拷貝到redis目錄下,修改redis.conf中的bind 127.0.0.1bind 0.0.0.0,以便其他容器訪問此服務。然後新建檔案docker-compose.yml,並將下面的內容寫入到這個檔案中。

version: "3.8"
services:
    cache:
      image: redis:6.0.5
      container_name: my_redis
      networks:
          - mynetwork
      volumes:
          - ./redis/redis.conf:/usr/local/etc/redis/redis.conf:ro
      command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    app:
      build:
          context: .
          dockerfile: ./Dockerfile-multi-stage
      container_name: my_hello
      networks:
          - mynetwork
      environment:
          - REDIS_HOST=my_redis
      depends_on:
          - cache
      ports:
          - "5000:5000"
networks:
  mynetwork:
    name: my_network
    driver: bridge

此時目錄結構如下:

圖片描述

3.2 啟動和停止

docker-compose up 命令類似於 Docker 中的 docker run,它會根據 docker-compose.yml 中配置的內容,建立所有的容器、網路、資料卷等等內容,並將它們啟動。與 docker run 一樣,預設情況下 docker-compose up 會在前臺執行,我們可以用 -d 選項使其“後臺”執行,大多數情況都會加上 -d 選項。

sudo docker-compose up -d

docker-compose 命令預設會識別當前控制檯所在目錄內的 docker-compose.yml 檔案,而會以這個目錄的名字作為組裝的應用專案的名稱。如果我們需要改變它們,可以通過選項 -f 來修改識別的 Docker Compose 配置檔案。

sudo docker-compose -f ./docker-compose.yml up -d

docker-compose down 命令用於停止所有的容器,並將它們刪除,同時消除網路等配置內容,也就是幾乎將這個 Docker Compose 專案的所有影響從 Docker 中清除。

sudo docker-compose down

Tips: 建議大家像容器使用一樣對待 Docker Compose 專案,做到隨用隨啟,隨停隨刪。

4. 小結

通過 Docker 讓我們能夠在開發過程中搭建一套不受干擾的獨立環境,而 Docker Compose 則讓我們可以處理多套環境,並能夠做到進行快速切換。在服務搭建的場景中,使用Docker Compose 編排容器,可以使容器技術發揮更大的價值。下一節,我們將走進Docker Compose的核心,深入瞭解Compose配置檔案的指令的作用和使用方式。