概要
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 件のコメント:
コメントを投稿