Docker Djangoコンテナをセットアップし、チュートリアルを使用してビルドを使用してイメージを作成しました here 。チュートリアルでは、基本的なDjangoアプリケーションを "/ code"にマウントします。データボリュームに含まれています。
ただし、このコードをどのように更新および開発し、それを出荷/展開できるようになるかを理解したいと思います。私がコミットするとき、それはデータボリュームの一部であるため、コードの変更は考慮されません。
Djangoコードを画像の一部にしたり、更新されたコードで画像を更新したりする方法はありますか?
質問に答えるのは遅すぎると思いますが、手を差し伸べる人にとっては有益かもしれません。
あなたが言及したチュートリアルは、初心者には少し扱いにくいので、構造を少し変更します。画像を公開する目的で、DockerhubなどのDockerレジストリアカウントを持っていると思います。これは、リモートホスト上のイメージにアクセスする場合に必要です(実際のイメージファイルをコピーできますが、お勧めしません)。
Django=でWebサイトを作成し、それをドッキングする場合を想定します。まず、次のようにします。
Django-admin startproject samplesite
以下を含むディレクトリsamplesite
を作成します(requirements.txtを追加しました)。
db.sqlite3 manage.py requirements.txt samplesite
ご覧のとおり、Dockerfile
の場合、Dockerfile
と比較して何も変更されていません。
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
ただし、docker-compose.yml
の場合:
version: '3'
services:
db:
image: postgres
web:
build: .
image: yourUserNameOnDockerHub/mywebsite:0.1 # this line is added
command: python manage.py runserver 0.0.0.0:8000
#volumes:
# - .:/code
ports:
- "8000:8000"
depends_on:
- db
docker-compose.yml
もチュートリアルで説明したものとほとんど同じですが、ボリュームがコメント化され、1行がimage: mywebsite:0.1
が追加されています。この行により、ビルドされたイメージを追跡し、いつでもデプロイできます。ボリュームのマウントではない作成したコードに関連し、そこに入れられてテイクアウトによって変更された動的コンテンツDjango(sqlite、アップロードされたファイルなど)。
ただし、最初にdocker-compose up
を実行した場合、新しい行が追加されているため、すべてが正常に機能するため、2回目以降にコードを変更すると、実行したコンテナに変更が反映されません。これは、各docker-compose up
に対して、composeがmywebsite:0.1
(すでに存在する)を検索し、新しいイメージを構築せず、古いイメージに基づいてコンテナーを作成するためです。イメージを公開/展開するにはそのイメージ名とタグが必要なので、代わりに次を使用する必要があります。
docker-compose up --build
変更が反映されたイメージが再構築されます。変更を加えるたびにそれを実行し、で表示できる新しい新しい画像を作成します(名前とタグは変更されていませんが、画像IDを変更すると、これが新しい画像であることを示します)。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yourUserNameOnDockerHub/mywebsite 0.1 033c9d2bfac0 7 seconds ago 974MB
Dockerhub(またはその他のレジストリ)にアカウントを設定している場合は、後で使用するためにイメージを公開したり、リモートサーバーにデプロイしたりできます。
docker Push yourUserNameOnDockerHub/mywebsite:01
これをリモートホストにデプロイし、docker-composeを再度使用する場合は、docker-compose.yml
を次のように変更します。
version: '3'
services:
db:
image: postgres
web:
image: yourUserNameOnDockerHub/mywebsite:0.1
command: python manage.py runserver 0.0.0.0:8000
#volumes:
# - .:/code
ports:
- "8000:8000"
depends_on:
- db
build: .
行が削除されていることに注意してください(実行するだけなので)。ローカルで開発する場合、docker-compose up --build
を実行するたびに、新しいイメージが作成およびタグ付けされ、それに基づくコンテナーが構成スタックで実行されます。変更に満足していると思われる場合は、公開手順に従ってサーバーに公開します。
イメージを更新する場合、たとえばアプリケーションコードの変更により、イメージのビルド中にCOPY
を使用するため、Dockerfile
では次のようにします
COPY /you/code/on/the/Host /var/www
「ボリューム」とイメージ作成に関する私の回答も参照してください https://stackoverflow.com/a/39314602/3625317 ビルドでコードが欠落している理由を明確にする