はじめに
dockerコンテナ内でエントリーポイントとして指定された実行ファイルを更新する方法について調べた内容になります。
背景・問題点
JavaやkotlinでWebアプリケーション開発を行う上でdockerコンテナを立てて開発することはよくあるかと思います。
下に示すのはアプリケーション層用コンテナのDockerfileの一部です。
FROM openjdk:8-jdk-alpine
COPY build/libs/application.jar application.jar
ENTRYPOINT ["java", "-jar", "application.jar"]
ファイル内で行っているのは以下です。
1行目:ベースイメージの指定
2行目:ビルド済みjarファイル(実行ファイル)をホスト側(左)からコンテナ側(右)にコピー
3行目:コンテナの起動プロセスを設定(上記では渡したjarファイルを実行している)
最後のエントリーポイントで指定したコマンドの実行プロセスが起動することでアプリケーションが動作します。
開発中は変更のたびにプログラムの再ビルドを行いますが、実際のアプリケーション上で変更を確認するためには再ビルドした結果をコンテナに反映させなければなりません。単純な方法としては作成したコンテナを一旦停止し、削除した後でコンテナの再ビルド・起動を行うことが考えられますが、それなりの時間がかかってしまいます(特にコンテナの再ビルド)。
解決方法
上の問題の解決策の一つとして以下の方法があります。
解決策
1 . 起動中のコンテナに対してコンテナ内の古いjarファイルを新しいファイル(application-new.jar)で上書きする。
docker cp build/libs/application-new.jar application.jar
2 . コンテナ(コンテナ名:app)を再起動する。
docker restart app
この方法だとコンテナの再ビルドが必要ないため、より短時間でコンテナの更新ができます。
参考
- docker公式ドキュメント http://docs.docker.jp/engine/reference/builder.html#from