Day 2: Docker 基本概念與安裝指南
Day 3: Dockerfile 語法解析與實踐
Day 4: 如何使用 Docker Compose 管理多容器應用程式
Docker Compose 是一個用來定義和運行多容器 Docker 應用程序的工具。通過撰寫一個 docker-compose.yml 文件,你可以定義多個服務(容器)、網絡、卷等資源,並使用簡單的命令來啟動或停止整個應用程序。這使得管理復雜的多容器應用更加方便,尤其是在開發和測試環境中。Docker Compose 還支持設置環境變量、資源限制、依賴關係等,幫助你模擬生產環境,快速部署應用。
這裡要先推薦一個強大的腳本倉庫
是由VMware長期維護,稱作為bitnami
Bitnami 是一家提供開源應用程式封裝與部署解決方案的公司,它將流行的開源軟體打包成易於部署的容器、虛擬機和本地安裝包。這些封裝應用已經過預先配置,簡化了部署和維護的流程,並能在多種平台上快速啟動,廣泛應用於開發、測試和生產環境。
由於我們已經安裝好Docker Compose了
底下直接以部署MySQL作為玩轉Docker Compose的例子
誰說只有寫code才能copy&paste,開源軟體也是可以copy&paste的喔!
bitnami倉庫的路徑:bitnami/mysql/docker-compose.yml
建立一個專案目錄
mkdir mysql
#移動至專案目錄
cd mysql
#撰寫腳本
sudo nano docker-compose.yml
貼入以下內容
# Copyright Broadcom, Inc. All Rights Reserved.
# SPDX-License-Identifier: APACHE-2.0
version: '2.1'
services:
#容器名稱
mysql:
#映像檔來源
image: docker.io/bitnami/mysql:8.4
#映射端口
ports:
- '3306:3306'
#掛載目錄
volumes:
- 'mysql_data:/bitnami/mysql/data'
#環境變數
environment:
#允許密碼為空
- ALLOW_EMPTY_PASSWORD=yes
#健康檢查
healthcheck:
test: ['CMD', '/opt/bitnami/scripts/mysql/healthcheck.sh']
interval: 15s
timeout: 5s
retries: 6
volumes:
mysql_data:
driver: local
-f代表套用哪個yml腳本,適用於同一目錄底下有多個腳本
-d跟docker一樣代表在背景運行
docker compose -f docker-compose.yml up -d
#查看容器運行狀態並記下容器ID
docker ps
#進入容器
docker exec -it <容器ID> bash
過多的SQL指令這裡不贅述,登入時可帶參數
-p是帶密碼
-h是帶host ip
#登入資料庫,剛才腳本裡配置的是空密碼不用打
mysql -u root
進入資料庫之後隨意下SQL指令驗證
#查看所有庫
show databases;
-f代表套用哪個yml腳本,適用於同一目錄底下有多個腳本
-v代表將掛載目錄也解除掛載
docker compose -f docker-compose.yml down -v
Commands:
build Build or rebuild services
config Parse, resolve and render compose file in canonical format
cp Copy files/folders between a service container and the local filesystem
create Creates containers for a service.
down Stop and remove containers, networks
events Receive real time events from containers.
exec Execute a command in a running container.
images List images used by the created containers
kill Force stop service containers.
logs View output from containers
ls List running compose projects
pause Pause services
port Print the public port for a port binding.
ps List containers
pull Pull service images
push Push service images
restart Restart service containers
rm Removes stopped service containers
run Run a one-off command on a service.
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker Compose version information
wait Block until the first service container stops
由於在一個docker-compose.yml中能夠一次起多個服務(尤其他們相依)
當然可以只重啟單一服務,而剛才宣告的服務名稱即為「mysql」
docker compose -f docker-compose.yml restart mysql
寫在docker-compose.yml最末尾的volumes:
冒號後面又沒有路徑?那麼掛載出來的文件究竟存放在哪裡?
#預設路徑
sudo ls /var/lib/docker/volumes
若要指定的話,可以指定存放到本地當前的路徑
以下是docker-compose.yml寫法
volumes:
- ./data:/var/lib/mysql
至此Docker章節結束(因為不想在這裡浪費太多天)
有沒有突然覺得好像也就這樣而已XD
大家可以到bitnami倉庫挖一挖自己感興趣的部署腳本來玩玩看喔