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

Published on Saturday, March 4, 2023

Docker Compose

關於Docker 基礎的部份已經大致上學習完了,接下來準備進入到Docker Compose 的世界

之前在學習 Dockerfile 時,我們可以透過 Dockerfile 把一個程式包裝成 Image,之後我們可以使用此 Image 運行起來一個 container
但在現實世界的運用中通常會需要多個 container 互相合作,才能稱作一個完整的產品
例如今天我們要架設一個 wordpress 網站,最少就需要一個 wordpress 程式的 container 在加上一個資料庫例如 MySQL,才能讓這個 wordpress 正常運作 雖然我們可以把程式跟資料庫全部包在一個 image 內,不過這樣做 image 大小會變成非常的大,並且如果 container 異常那程式加上資料庫都會暫時停止服務,所以這樣不是一個好的習慣

Docker 官方提供了一個更好的方法,那就是 Docker Compose,此功能利用了一個額外的設定檔來說明哪些 container 需要啟動
這個設定檔通常叫做 docker-compose.ymlDockerfile 的命名一樣並沒有強制規定,我們可以自己指定名稱,並且使用 yml 或 yaml 做為副檔名

今天主要先來試試 docker compose 的功能,之後會在詳細研究 docker-compose.yml 的語法
首先我們參考官方的 docker compose 範例來建立一個可以用的 wordpress 網站,Github Sample

先建立一個資料夾,並且新增一個 docker-compose.yml 檔案

mkdir my_wordpress && cd $_
vi docker-compose.yml

在 docker-compose.yml 輸入以下內容,此範例會啟動一組mariadb和一組wordpress container

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:

最後輸入以下指令

docker compose up -d

這邊看起來跟我們使用 docker run 運行 container 很像,本地沒有image會去網路上下載一份
並且設定了一組網路,跟兩個volume

$ docker compose up -d
[+] Running 33/33
 ⠿ wordpress Pulled                                                                                                                                                                                                                                                                33.4s
   ⠿ 3f9582a2cbe7 Pull complete                                                                                                                                                                                                                                                     7.8s
   ⠿ 0b95dc92ce55 Pull complete                                                                                                                                                                                                                                                     7.9s
   ⠿ 3630ff9f8131 Pull complete                                                                                                                                                                                                                                                    20.0s
   ⠿ 49efbc577363 Pull complete                                                                                                                                                                                                                                                    20.2s
   ⠿ df983cae2963 Pull complete                                                                                                                                                                                                                                                    22.3s
   ⠿ 52fed2cf4dcf Pull complete                                                                                                                                                                                                                                                    22.5s
   ⠿ badf42672f1b Pull complete                                                                                                                                                                                                                                                    22.7s
   ⠿ baaffcad7804 Pull complete                                                                                                                                                                                                                                                    23.1s
   ⠿ e65c63290641 Pull complete                                                                                                                                                                                                                                                    23.4s
   ⠿ 56fbc7142e6c Pull complete                                                                                                                                                                                                                                                    24.8s
   ⠿ 0b0f64aca9a8 Pull complete                                                                                                                                                                                                                                                    24.9s
   ⠿ 1a0de30c1e15 Pull complete                                                                                                                                                                                                                                                    25.1s
   ⠿ c28dd6954d0b Pull complete                                                                                                                                                                                                                                                    25.2s
   ⠿ 12b130c64439 Pull complete                                                                                                                                                                                                                                                    27.3s
   ⠿ b7956b05af90 Pull complete                                                                                                                                                                                                                                                    28.8s
   ⠿ bce2c530d546 Pull complete                                                                                                                                                                                                                                                    29.0s
   ⠿ 275d52fd4f6c Pull complete                                                                                                                                                                                                                                                    29.1s
   ⠿ 841c64b802b3 Pull complete                                                                                                                                                                                                                                                    29.3s
   ⠿ af298c263b20 Pull complete                                                                                                                                                                                                                                                    32.7s
   ⠿ 6d98f1e7e80e Pull complete                                                                                                                                                                                                                                                    32.9s
   ⠿ e77d1e0ab8c5 Pull complete                                                                                                                                                                                                                                                    33.1s
 ⠿ db Pulled                                                                                                                                                                                                                                                                       22.4s
   ⠿ 7b1a6ab2e44d Pull complete                                                                                                                                                                                                                                                     6.5s
   ⠿ 034655750c88 Pull complete                                                                                                                                                                                                                                                     6.7s
   ⠿ f0b757a2a0f0 Pull complete                                                                                                                                                                                                                                                     7.7s
   ⠿ 5c37daf8b6b5 Pull complete                                                                                                                                                                                                                                                     8.3s
   ⠿ b4cd9409b0f6 Pull complete                                                                                                                                                                                                                                                     8.5s
   ⠿ dbcda06785eb Pull complete                                                                                                                                                                                                                                                     9.7s
   ⠿ a34cd90f184c Pull complete                                                                                                                                                                                                                                                     9.9s
   ⠿ fd6cef4ce489 Pull complete                                                                                                                                                                                                                                                    10.1s
   ⠿ 3cb89a1550ea Pull complete                                                                                                                                                                                                                                                    21.9s
   ⠿ df9f153bd930 Pull complete                                                                                                                                                                                                                                                    22.1s
[+] Running 5/5
 ⠿ Network my_wordpress_default        Created                                                                                                                                                                                                                                      0.1s
 ⠿ Volume "my_wordpress_db_data"       Created                                                                                                                                                                                                                                      0.0s
 ⠿ Volume "my_wordpress_wp_data"       Created                                                                                                                                                                                                                                      0.0s
 ⠿ Container my_wordpress-db-1         Started                                                                                                                                                                                                                                      1.8s
 ⠿ Container my_wordpress-wordpress-1  Started  

到這邊看了輸出的資訊,大概可以猜測到 docker compose 跟我們直接呼叫 docker cli 很像,只是它可以一次做很多件事情

全都運行成功之後我們可以開啟 Host IP 加上 80 port 就可看到 wordpress 的設定網站了

這就是docker compose 的優勢,當然你可以全部使用 docker cli 做到相同的功能
不過你要先知道 docker rundocker volumedocker network 等Cli的相關知識
相比之下我可以直接把此 docker-compose.yml 傳送給任何一個人, 之後只要輸入 docker compose up 就可以直接建立起一個可以使用的網站 你可以完全不懂 docker 的相關知識只要記得一句 docker compose up 就可以快速的建立起多個熱門的網站,入手的難度反而低很多


Summary

今天試用了 docker compose 的功能並且建立了一個 wordpress 網站,使用起來非常的方便快速
現在大多的開源專案都有提供此方法來建立,例如 ELK 或者 Postgres,都只要一句指令就可以直接使用目前熱門的服務
而且不用再把程式安裝在本機上了,例如不靠容器要成功把 ELK 完整的功能架設出來,就需要許多 ELK 的相關知識
等於連試用都很困難了更不用說要先閱讀許多的設定檔案就會勸退許多人了,今後會對 docker compose 的相關語法做深入研究