捐血一袋救人一命

2024年7月18日 星期四

docker config

docker config

  • 這個命令是用在 Docker Swarm 環境下
  • 你可以將你的應用程式容器需要的靜態檔案/設定檔,透過 docker config create 存到 Manager Node 上。
  • 當你的應用程式容器在 Worker Nodes 上部署運行時,可以將這些 config 檔案掛載到容器之中
  • 它跟 Volume 的差異,在於 Volume 的掛載是無法跨 Nodes,除非每個 Nodes 都去掛載網路磁碟(smb/nfs/…)

指令表

指令 Description 說明
docker config create Create a config from a file or STDIN 從 STDIN 或是應用程式設定檔來建立 config
docker config inspect Display detailed information on one or more configs 顯示 config 的詳細資訊(其中包含檔案被base64編碼的內容)
docker config ls List configs 條列 Manager Node 上的 config
docker config rm Remove one or more configs 刪除指定的 config

用實例離說明:

部署簡單的 php 程式到 Worker Node web

  1. 建立簡單的 php 程式檔案作為首頁 index.php,用來驗證部署結果
<?php
// 獲取伺服器的 IP 地址
$server_ip = $_SERVER['SERVER_ADDR'];

// 顯示在網頁上
echo "伺服器的 IP 地址是: " . $server_ip;

phpinfo()
?>
  1. 建立 apache 虛擬主機設定檔 ~/000-default.conf
<VirtualHost *:80>
    ServerAdmin webmaster@official.company.com
    ServerName official.company.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  1. 以 apache 虛擬主機設定檔 000-default.conf,在 Docker Swarm Manager Node 上,建立 config
docker config create apache_vhost ./000-default.conf
  1. 列出 config,確認一下
docker config ls

image

  1. 檢查一下 apache vhost config 詳細資訊,你會發現,設定檔內容以 base64 編碼,存在 Data 中
docker config inspect apache_vhost

image

  1. 驗證一下apache_vhost config內容
docker config inspect apache_vhost | jq -r '.[0].Spec.Data' | base64 --decode

image

  1. 驗證一下 index.php config內容
docker config inspect official_homepage | jq -r '.[0].Spec.Data' | base64 --decode

image

  1. 編寫 docker-compose.yml
version: '3.8'

services:
  php_apache:
    image: php:7.1-apache
    deploy:
      replicas: 1
      placement:
        constraints: [node.labels.server == web]
    configs:
      - source: official_homepage
        target: /var/www/html/index.php
        uid: '33'
        gid: '33'
        mode: 0444
      - source: apache_vhost
        target: /etc/apache2/sites-available/000-default.conf
    networks:
      - my_network

configs:
  official_homepage:
    external: true
  apache_vhost:
    external: true

networks:
  my_network:
    driver: overlay
  1. 執行 odcker stack deploy 進行部署
docker stack deploy -c docker-compose.yml official_homepage

image
10. 檢查一下,看看 config 是不是都被容器掛載到對應的路徑

docker ps -a
docker exec -it 6476ac33e359 cat /var/www/html/index.php
docker exec -it 6476ac33e359 cat /etc/apache2/sites-available/000-default.conf

image

  • 從上圖可以看到, php:7.1-apache 被部署到 server 標籤為 web 的 node (lab2)
  • index.php 與 000-default.conf 也都被掛載到正確的路徑下了

0 意見: