Help us understand the problem. What is going on with this article?

dockerize を使って他のコンテナ内サービス起動を待つ

More than 3 years have passed since last update.

docker-compose では depends_on によってコンテナの起動順をある程度
制御することができます.
ただし depends_on が保証するのはコンテナの起動順だけでコンテナ内の
サービスの準備が完了するまでは待ってくれません.

参考: http://docs.docker.jp/compose/startup-order.html

現在, docker-compose にて APP + DB の構成に k6 を追加して手軽に
負荷試験もできるようにしようとしたのですが, k6 の実行が APP のサービス
準備完了後にならず試験の最初の方がアクセスエラーが発生してしまいました.

そこで上記サイトでも紹介されている dockerize を使用しました.
(ネット上で検索すると環境を docker 化するのを dockerize と呼んでいる
ところがあるので情報は転がってそうでなかったです)

dockerize は docker のコンテナ動作に関するユーティリティーモジュールです.
コンテナにて使用するにはイメージに dockerize を含める必要があります.

ということで今回作成した k6 イメージビルドする Dockerfile です.
dockerize: https://github.com/jwilder/dockerize
k6: https://github.com/loadimpact/k6

FROM loadimpact/k6:0.17.0

ENV DOCKERIZE_VERSION v0.5.0

RUN curl -sL https://deb.nodesource.com/setup_6.x | bash \
  && apt-get install -y \
    wget \
  && wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
  && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
  && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
  && apt-get purge -y --auto-remove wget \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ENTRYPOINT []

k6 のベースイメージ指定以外が dockerize のインストールです.

次に docker-compose を使って APP のサービス起動を待ちつつ k6 でテストをやってみます.

docker-compose run -p 6565:6565 --rm k6 dockerize -wait http://hogehoge:80/healthcheck k6 run k6_test.js

dockerize -wait <<待つ対象サービスのURL>> <<コマンド>>
http の場合は 200 ok が返るまで対象 URL を叩き続けます.
なのでそういった API も実装しておく必要があります.
ちなみに mysql の場合は tcp://mysql:3306 みたいな感じで起動待ちできます.

既存イメージにちょっと足すだけで厄介な起動順番の問題が解消できるので
試してみてはいかがでしょうか.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした