概要
結論から述べると開発用の機能で sync はファイルの同期で rebuild はコンテナの再作成になります
それぞれ指定のファイルが更新されると発火する感じになっています
環境
- Ubuntu 22.04
- docker 27.0.3
アプリ作成
何でも OK です
- pyenv local 3.11.6
- pip install pipenv
- pipenv install flask
- vim app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
print("hello")
return "hello"
Dockerfile 作成
- vim Dockerfile
FROM python:3.11.6-slim-bullseys
ADD . /app
WORKDIR /app
RUN pip install pipenv
RUN pipenv install
ENV FLASK_APP app.py
EXPOSE 5000
CMD ["pipenv", "run", "flask", "run", "--host", "0.0.0.0"]
compose.yaml
今回のポイントとなるファイルです
services:
server:
build:
context: .
develop:
watch:
- action: sync
path: .
target: /app/
- action: rebuild
path: ./rebuild_test.txt
ports:
- 5000:5000
develop -> watch -> action で発火するイベントを指定できます
sync がファイル同期で rebuild がコンテナ再作成になります
特定のファイルやディレクトリを指定することでそのファイルが更新された際に action を自動で実行してくれます
watch で起動する
up の代わりに watch を使います
なお -d オプションはないようです
- docker compose watch
「Watch enabled」で起動すれば OK です
動作確認
sync
まずは sync を確認してみます
ワーキングディレクトリで新規でファイルを作成してみましょう
- touch hoge
すると watch 側のログに「Syncing “server” after changes ware detected」と表示されるのが確認できます
試しに /app 配下を確認すると hoge ファイルがあるのが確認できます
-
docker compose exec server ls -l /app/hoge
rebuild
今回は rebuild_test.txt を変更するとコンテナの再作成が走ります
- echo test > rebuild_test.txt
watch 側のログにコンテナが再作成されているのが確認できると思います
最後に
これまではホスト領域をマウントしてコンテナの再起動や再作成を手動で行っていましたがそれらを自動で行ってくれます
コンテナの再作成は Dockerfile に記載の内容を再度実行するので可能な限り軽量な処理を記載したほうが良いかなと思います
watch は Ctrl+c で抜けれます
なお watch 終了後はコンテナ自体は起動しているので down してあげましょう
なお rebuild でコンテナが再作成された場合は古いコンテナは自動で削除されるようです
0 件のコメント:
コメントを投稿