Docker Compose Yaml Services
在昨天的文章中: Docker Certified Associate(DCA)認證考試學習- Docker Compose
我們使用docker compose 非常快速的建立出一個可用的 wordpress 網站,今天要來詳細了解 docker-compose.yml
的內容
根據官方 文檔 的說明, Docker Compose File 中有以下基礎類別的定義
- version (以廢棄)
- services 在這邊 container 等同於 service(必填)
- networks
- volumes
- configs
- secrets
這代表什麼意思呢,我們在來看一次昨天 docker-compose.yml
的內容
首先需要知道 yaml 有層級的概念,越靠左的越上層,之後同樣數量空白鍵的為同一層級稱為子層級
services:
db:
# We use a mariadb image which supports both amd64 & arm64 architecture
image: mariadb:10.6.4-focal
# If you really want to use MySQL, uncomment the following line
#image: mysql:8.0.27
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
wordpress:
image: wordpress:latest
volumes:
- wp_data:/var/www/html
ports:
- 80:80
restart: always
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
volumes:
db_data:
wp_data:
所以我們知道目前屬於第一層的有 services
和 volumes
,他們分別有自己的子層級
services
的第二層級為 db
和 wordpress
volumes
的第二層級為 db_data
和 wp_data
以此類推可以繼續推出第三層級
我們根據文檔得知目前兩個第一層級都為docker compose 的基礎設定值,其中 services
為必填項,用來設定要啟動哪些 container
接下來我們可以試著撰寫我們自己的 docker compose 檔案
mkdir my_compose && cd $_
vi docker-compose.yml
輸入以下內容,之後使用命令 docker compose up -d
,這個命令預設會去讀取同一個資料夾底下的 docker-compose.yml
services:
alpine1:
image: alpine
alpine2:
image: alpine
這邊看輸出結果,有按照我們設計的那樣運行起兩個 alpine container
[node1] (local) root@192.168.0.13 ~/my_compose
$ docker compose up -d
[+] Running 3/3
⠿ alpine2 Pulled 1.9s
⠿ 63b65145d645 Pull complete 0.6s
⠿ alpine1 Pulled 1.9s
[+] Running 3/3
⠿ Network my_compose_default Created 0.1s
⠿ Container my_compose-alpine2-1 Started 1.4s
⠿ Container my_compose-alpine1-1 Started
使用我們比較熟悉的命令 docker ps -a
也能看出確實有兩個 container 被起動過
這邊可以注意一下 NAMES 欄位,這邊的值如果沒有特別指定會去讀取資料夾名稱 + 服務名稱 + 數字
這邊的服務名稱我們可以按照自己的需求來命名
[node1] (local) root@192.168.0.13 ~/my_compose
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
289aa6782b6b alpine "/bin/sh" 8 minutes ago Exited (0) 8 minutes ago my_compose-alpine2-1
32e0c01043bf alpine "/bin/sh" 8 minutes ago Exited (0) 8 minutes ago my_compose-alpine1-1
Summary
今天學到了 docker-compose.yml
中最重要的設定值 services
, 照以前的作法需要使用次 docker run才能做到一樣的效果
如今只要一個命令就可以搞定,之後我們會在了解其他常用的設定值