Docker Certified Associate(DCA)認證考試學習- Docker Compose Yaml Services Docker Certified Associate(DCA)認證相關資源、Docker Compose Yaml Services

Published on Sunday, March 5, 2023

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:

所以我們知道目前屬於第一層的有 servicesvolumes,他們分別有自己的子層級
services 的第二層級為 dbwordpress
volumes 的第二層級為 db_datawp_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才能做到一樣的效果 如今只要一個命令就可以搞定,之後我們會在了解其他常用的設定值