docker コンテナの HAproxy で、config と一緒に ユーザーリスト を取り込む方法
docker 版 HAproxy を使う。その際に、Basic 認証 などで使う ユーザーリスト や、設定ファイル ( haproxy.cfg )を どうやって取り込ませるか?食わせるか?
できたので、記録しておく。
ついでに https で使う pem ファイルも取り込んだ。
- 1. docker pull
- 2. haproxy の稼働に必要なファイルの準備
- 3. DockerFile の作成
- 4. docker build
- 5. HAproxyコンテナの設定検証
- 6. docker run
1. docker pull
# docker pull haproxy
2. haproxy の稼働に必要なファイルの準備
・ haproxy.cfg
・ userlist.cfg (Basic認証で使うユーザーリストなど必要に応じて)
3. DockerFile の作成
Dockerfile という名前のファイルを作る。中身
COPY ./haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
COPY ./userlist.cfg /usr/local/etc/haproxy/userlist.cfg
COPY ./haproxy.pem /usr/local/etc/haproxy/cert/haproxy.pem
ここで、COPY コマンドの引数2つについて。
左側: コマンドを打つDocker ホスト側の世界。ファイル名(パス)
右側: コンテナ内のファイル名(パス)
haproxy コンテナ内に /usr/local/etc/haproxy というパスがあるので、
その中に、手元のファイルを放り込んであげる形。
( 挙動を見ている限りではビルド時にコピーされるようなので、稼働中は、難しそう )
・用意ができたら確認
自分はこんな感じです。
# pwd
/root/dev/haproxy
# ls
Dockerfile haproxy.cfg haproxy.pem userlist.cfg
4. docker build
上記、場所にいる状態で コマンドを打つ。
# docker build -t myhaproxyなど任意コンテナ名 .
5. HAproxyコンテナの設定検証
haproxy 設定ファイル の docker 検証を行います。
# docker run -it --rm --name haproxy-syntax-check myhaproxy haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg -f /usr/local/etc/haproxy/userlist.cfg
< 解説 >
・ -f で haproxy に 直接食わせたいコンフィグファイルを指定。
・ -c で 設定ファイルのチェック。
設定ファイルのチェックでNGなら 問題箇所を修正して 2.から再度チャレンジ。
OKなら 以下に進んでコンテナを起動する。
6. docker run
(ユーザーリストなどなしの例)
# docker run -d --name my-running-haproxy myhaproxy
(ユーザーリストなどありの例)
# docker run -d --name my-running-haproxy myhaproxy -c -f /usr/local/etc/haproxy/haproxy.cfg -f /usr/local/etc/haproxy/userlist.cfg
-f で指定するファイルパスは、コンテナ内のファイルパス。
DcokerFile で指定、Build でコピーしてあげたファイル。
これで起動できても、haproxy が監視するサーバーが止まっているかアクセスできていないと、haproxyも止まってしまうようなので、注意。
run した後、何らかの理由で停止状態としていた際に、もう一度 その設定を保持した状態で動作させたい場合は、以下コマンドも便利。
# docker restart コンテナID
次回は、HAproxy コンテナ 動作中でもできる 設定ファイルの リロードについて。
別途、docker compose でも できたので機会があればそちらも記録しておこうかなと思う。