その7:イメージの作成のつづき。
前回作成した Dockerfile では、まだ不十分なところがあるので、少し仕上げていく。
EXPOSE を入れないと、イメージを受け取った人がどのポートで立ち上がるのかがわからないので、Dockerfile に記述することが重要である。
HEALTHCHECK
例えば、立ち上げている nginx コンテナの IP アドレスが 172.17.0.2 であり、それを、monitoring というコンテナから監視する場合、イメージ作成時に使用する Dockerfile には、以下のように記述するとよい。
--interval=DURATION (デフォルト30秒)
--timeout=DURATION(デフォルト30秒)
--start-period=DURATION(デフォルト0秒)
--retries=N (デフォルト 3)
(一例)
HEALTHCHECK --interval=5s CMD ping -c 1 172.17.0.2
(ローカルホストの監視の一例: curl の -f オプションは、結果だけを返す)
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1
上記は、docker run でも使用できる。
--health-cmd を使える。
この様な監視には、busybox イメージからコンテナを作成するのがいいだろう。
$ docker run -dt --name tmp --health-cmd "curl http://localhost" --health-interval=5s busybox sh
ENTRYPOINT は、ランタイムでのコマンドの上書きを防ぐ。
(一例)
ENTRYPOINT ["/bin/ping"]
WORKDIR を使うと、コンテナは、そこに誘導される。
EMV を使うと、Dockerfile のメンテナンスが楽になる。
(一例)
ENV NGINX 1.2
RUN curl -SL http://example.com/web-$NGINX.tar.gz
環境変数をコンテナ作成時に渡すことができる。
$ docker run -dt --name env02 --env USER=testuser busybox sh
以下のような INSTRUCTION がある。
CMD | ENTRIPOINT | ENV | EXPOSE | LABEL | ONBUILD | USER | VOLUME | WORKDIR