私はdockerを初めて使用し、docker composeを使用してプロジェクトを開発しています。ドキュメントから、データのみのコンテナを使用してデータを永続化する必要があることを学びましたが、docker-composeを使用してそうすることはできません。 docker-compose down
を実行すると、dbからデータが削除されますが、docker-compose stop
を実行してもデータは削除されません。これは、名前付きデータボリュームを作成しておらず、docker-compose down
がすべてのコンテナをほとんど削除しないためです。そこで、コンテナに名前を付けようとしましたが、エラーが発生しました。私のyml
ファイルを見てください:
version: '2'
services:
data_container:
build: ./data
#volumes:
# - dataVolume:/data
db:
build: ./db
ports:
- "5445:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_DB=postgres
# - PGDATA=/var/lib/postgresql/data/pgdata
volumes_from:
# - container:db_bus
- data_container
geoserver:
build: ./geoserver
depends_on:
- db
ports:
- "8004:8080"
volumes:
- ./geoserver/data:/opt/geoserverdata_dir
web:
build: ./web
volumes:
- ./web:/code
ports:
- "8000:8000"
depends_on:
- db
command: python manage.py runserver 0.0.0.0:8000
nginx:
build: ./nginx
ports:
- "83:80"
depends_on:
- web
Data_containerのDockerファイルは次のとおりです。
FROM stackbrew/busybox:latest
MAINTAINER Tom Offermann <[email protected]>
# Create data directory
RUN mkdir /data
# Create /data volume
VOLUME /data
これを試しましたが、docker-compose downを実行すると、データが失われます。コメント行が見えるようにdata_containerに名前を付けてみましたが、このエラーがスローされました:
ERROR: Named volume "dataVolume:/data:rw" is used in service "data_container" but no declaration was found in the volumes section.
だから今私がやっていることは、コンテナという名前のスタンドアロンデータを作成し、それをdbのvolumes_from
値に入れることです。正常に動作し、docker-compose down
を実行した後でもデータを削除しませんでした。
私のクエリ:
docker-compose
を使用してデータベースのデータを保存できるコンテナを作成し、それらを適切に使用するための最良の方法は何ですか?
私の意識は、スタンドアロンのデータコンテナを作成することで選択したアプローチについては同意していません。何かご意見は?
docker-compose down
次のことを行います
コンテナを停止し、upによって作成されたコンテナ、ネットワーク、ボリューム、およびイメージを削除します
したがって、あなたが経験している振る舞いが期待されます。
docker-compose stop
を使用して、docker-composeファイルで作成されたコンテナをシャットダウンしますが、ボリュームは削除しません。
第二に、docker composeのバージョン2ではdata-container
パターンは必要ありません。それを削除して使用するだけです
db:
...
volumes:
- /var/lib/postgresql/data
docker-compose downはコンテナを停止しますが、コンテナも削除します(すべて:ネットワークなど)。
代わりにdocker-compose stopを使用してください。
Docker-composeを使用してデータベースのデータを保存できるコンテナを作成する最良の方法は、名前付きボリュームを使用することです。
version: '2'
services:
db: #https://hub.docker.com/_/mysql/
image: mysql
volumes:
- "wp-db:/var/lib/mysql:rw"
env_file:
- "./conf/db/mysql.env"
volumes:
wp-db: {}
ここでは、「wp-db」という名前のボリュームを作成し(存在しない場合)、それを/ var/lib/mysql(読み取り/書き込みモード、デフォルト)にマウントします。これは、データベースがデータを保存する場所です(mysqlイメージ用)。
名前付きボリュームが既に存在する場合、作成せずに使用されます。
起動時に、mysqlイメージは、データベースを使用するために/ var/lib/mysql(ボリューム)にデータベースがあるかどうかを確認します。
Docker-composeファイルリファレンスで詳細を参照できます: https://docs.docker.com/compose/compose-file/#/volumes-volume-driver