心地よいライフハック

これ便利だな〜と思ったことなど

docker コンテナの HAproxy で、config と一緒に ユーザーリスト を取り込む方法

 
docker 版 HAproxy を使う。その際に、Basic 認証 などで使う ユーザーリスト や、設定ファイル ( haproxy.cfg )を どうやって取り込ませるか?食わせるか?
 
できたので、記録しておく。
 
ついでに https で使う pem ファイルも取り込んだ。
 

  
 

 
 

  1. docker pull

 
    # docker pull haproxy
 

  2. haproxy の稼働に必要なファイルの準備

 
    ・ haproxy.cfg
    ・ userlist.cfg (Basic認証で使うユーザーリストなど必要に応じて)
    ・ SSL(HTTPS)で使うpemファイルなど 取り込みたいファイル
 

  3. DockerFile の作成

 
    Dockerfile という名前のファイルを作る。中身
 
 

 
    FROM haproxy:1.9
    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 でも できたので機会があればそちらも記録しておこうかなと思う。
 

 
動作確認環境 ( 2019年 2月初旬 )
 
Docker version 1.13.1, build 07f3374/1.13.1
docker-compose version 1.23.2, build 1110ad01
CentOS Linux release 7.4.1708 (Core)
HAproxy 1.9