初識 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 的步驟分成三步。
- 也可以使用現有的映象 ,或者根據需要編寫容器所需映象的 Dockerfile
- 編寫獲取用於配置容器的 docker-compose.yml
- 使用 docker-compose 命令啟動應用
準備映象這一過程我們之前已經掌握了,編寫docker-compose.yml部分我們會放在下一節詳細介紹,這裡我們就直接來使用它,感受Docker Compose 的強大功能。
3.1 編寫 docker-compose.yml
進入dockerfiledir目錄,新建redis目錄,將之前部署redis容器用到的redis.conf拷貝到redis目錄下,修改redis.conf中的bind 127.0.0.1
為bind 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配置檔案的指令的作用和使用方式。