2021年3月24日水曜日

docker configs 使ってみた

概要

docker config は k8s の ConfigMap のように使えます
ただし条件があり stack deployo (swarm 環境) でしか使えません
今回は 2 台の swarm 環境に対して docker config を使ってみました

環境

  • Ubuntu18.04
  • docker 20.10.5

動作確認用アプリの作成

こちらを参考に作成しました
動けばいいのでどんなアプリでも OK です
Sinatra アプリと Dockerfile まで作成しましょう

docker build & push

swarm 環境に対して stack デプロイする場合には事前にイメージをどこかのコンテナレジストリに配置しておく必要があります
build ディレクティブが stack deploy では使えないためこれは必須の作業となります
例えば以下のように実行します

  • docker build -t your.registry.com/user/app:latest .
  • docker push your.registry.com/user/app:latest

config として登録する default.conf の作成

今回は nginx のコンフィグファイルを docker config で使ってみます
まずはファイル自体を作成しましょう
これも過去の紹介記事と同じ default.conf の内容で OK です

config の作成

docker-compose.yml に configs として定義もするのですがどうやら事前に config を swarm 環境に対して作成しおく必要があるようです
docker-compose.yml に定義している configs が swarm 環境にないと「config not found」と言われてエラーになってしまいます

  • docker -H 192.168.100.10:2376 config create my_default_conf ./default.conf

swarm 環境の master ノードに対して実行しましょう

docker-compose.yml の作成

stack deploy で使用する docker-compose.yml を作成していきます
ポイントは configs で事前に作成しておいた config を指定するのとコンテナ側でそのコンフィグファイルをどこに配置するのか指定する部分です

ersion: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - 80:80
    depends_on:
      - app
    configs:
      - source: my_default_conf
        target: /etc/nginx/conf.d/default.conf
    deploy:
      replicas: 2
      placement:
        max_replicas_per_node: 1
  app:
    image: your.registry.com/user/app:latest

configs:
  my_default_conf:
    file: ./default.conf
    external: true

ちゃんと各ノードに config が散らばっているのかを確認するために nginx は各ノードに最低 1 台デプロイされるようにしました
また app サービス側では build は使用できないので事前にコンテナレジストリに push しておいたイメージを指定します

動作確認

  • docker -H 192.168.100.10:2376:2376 stack deploy -c docker-compose.yml test --with-registry-auth

これで各 swarm のノードの IP:80 にアクセスしてどちらも app からのレスポンスが返ってくれば OK です
swarm 環境からレジストリにアクセスできる必要もあるのでファイアウォールのルールなども確認しましょう
レジストリの認証情報は実行しているマシンですでに docker login しているのであれば --with-registry-auth で認証情報を渡すことができます

最後に

k8s の ConfigMap っぽく使えそうではあります
残念なのは事前に docker config create しなければいけない点かなと思います
本当は stack deploy で同時に config create もしてくれるのが良いのですがそれはしてくれないようです
また stack deploy のみサポートしているのも残念な感じはします

参考サイト

0 件のコメント:

コメントを投稿