この記事では、docker のデータ ボリュームに関する関連知識を提供します。データ ボリュームは、コンテナ間でデータを共有または再利用できます。データ ボリュームの変更は、イメージの更新には含まれません。みんなを助けます。
推奨学習: 「docker ビデオ チュートリアル 」
使用docker コンテナが作成されると、一連のデータ ファイルが生成されます。これらのデータ ファイルは、docker コンテナが削除されると消えますが、生成されたコンテンツの一部は他の目的に保存されることが期待されます。Docker は環境を適用して実行しますプログラマーは、パッケージ化されてコンテナーにリリースされると、実行プロセス中に生成されるデータの一部が保持されることを期待し、コンテナー間でデータを共有できることを期待します。
一般的に、Docker コンテナーのデータ ボリュームは、一般的に使用される USB ディスクとみなすことができます。これは 1 つ以上のコンテナーに存在し、Docker によってコンテナーにマウントされますが、共同ファイル システムには属しません。コンテナを削除すると、コンテナにマウントされているデータ ボリュームも削除されます。
データ ボリュームはコンテナ間でデータを共有または再利用できます
データ ボリュームの変更はすぐに有効になります
データ ボリュームの変更は、イメージの更新には含まれません
#データ ボリュームは、コンテナーが削除された場合でも、デフォルトで常に存在します#データ ボリュームのライフ サイクルは、コンテナーが使用しない限り継続します
コンテナ内のデータ管理
データ ボリューム コンテナ:データ ボリューム コンテナ特定のコンテナを使用して、データ ボリュームを維持する
Docker で一般的に使用されるコマンド cp
ホスト ファイルをコンテナにコピーする
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
コンテナ内のファイルをホストにコピーする
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
共通パラメータ
##-L: ソースターゲットにリンクを保持します基本的な使用ホストファイルをコンテナにコピーしますdocker cp /data/index.html nginx:/usr/share/nginx/html/index.htmlコンテナ内のファイルをホストにコピーします
docker cp nginx:/etc/nginx/nginx.conf /datadocker data volumeデータ ボリューム (データ ボリューム) は、1 つ以上のコンテナで使用できる特別なディレクトリであり、ホストをマップします。オペレーティング システム ディレクトリをコンテナに直接コピーします。
データ ボリュームに関する注意事項
データ ボリュームをマウントするには、create/start ではなく run で起動コンテナを作成することをお勧めします。起動コンテナを作成します。データボリュームを再度マウントするのは非常に面倒で、多くの設定ファイルを変更する必要がありますが、不可能ではありません。
Docker 公式 Web サイトでは、ファイルをマウントするのではなく、可能な限りディレクトリをマウントすることを推奨していますデータ ボリューム タイプ
ホスト データ ボリューム: ホスト上に直接ファイル システムですが、コンテナーはアクセスできます (バインド マウント)
名前付きデータ ボリューム: ディスク上で Docker によって管理されるデータ ボリュームですが、このボリュームには名前があります。 匿名データ ボリューム: ディスク上で Docker によって管理されるデータ ボリューム。名前がないため見つけるのは簡単ではありません。これらのファイルは Docker によって管理されます。ホスト データ ボリューム
バインド マウント: コンテナ内のデータは、一部の重要なシステム ディレクトリやファイルの中間を含め、ホスト ファイル システムの任意の場所に保存されます。 docker 以外のプロセスでも任意に変更できます。
バインド マウントを使用する場合、ホスト ディレクトリまたはファイルはコンテナーにマウントされます。コンテナーは、マウントするディレクトリまたはファイルの絶対パスに従って、ホストのデータを使用または変更します。ホスト内にディレクトリやファイルが事前に存在している必要はなく、必要に応じて自動的に作成されます。 バインド マウントの使用はパフォーマンスの点で非常に優れていますが、適切に構造化されたファイル システムを備えたホストに依存します。 バインド マウントを使用するコンテナは、重要なシステム ファイルやディレクトリの作成、変更、削除など、コンテナ内のプロセスを通じてホスト ファイル システムを変更できます。この機能は非常に強力ですが、明らかにセキュリティ上の問題も引き起こします。ホスト上の Docker 以外のプロセスへの影響を含む側面への影響Notes空のデータ ボリュームをコンテナ内の空ではないディレクトリにマウントする場合、このディレクトリ ファイルはデータ ボリュームにコピーされます。空ではないデータ ボリュームをコンテナ内のディレクトリにマウントすると、コンテナ内のディレクトリにはデータ ボリューム内のデータが表示されます。元のコンテナー内のディレクトリにデータがある場合、元のデータは非表示になります基本的な使用法構文docker run -v /宿主机绝对路径目录:/容器内目录 镜像名基本的な使用法
docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin -v /data/mysql:/var/lib/mysql mysql:5.7.31 --character-set-server=utf8 --collation-server=utf8_general_ciコンテナー ディレクトリのアクセス許可コンテナ内のパスに -v を渡します: ro rw 読み取りおよび書き込み権限を変更します ro:readonly read-onlyrw:readwrite readable and writabledocker run - it -v / ホストの絶対パス ディレクトリ:/コンテナ ディレクトリ:ro イメージ名docker run -it -v/ホストの絶対パス ディレクトリ:/コンテナ ディレクトリ:rw イメージ名例:
docker run -d -P --name nginx05 -v nginx1:/etc/nginx:ro nginx docker run -d -P --name nginx05 -v nginx2:/etc/nginx:rw nginxro ro が表示されている限り、このパスはホスト経由でのみ操作でき、コンテナー内では操作できないことを意味します!
名前付きデータ ボリューム
基本的な使用方法
docker run -itd --name nginx -p 80:80 -v lagouedu-nginx:/etc/nginx nginx:1.19.3-alpinedocker データ ボリュームの表示 docker volume lslaguedu-nginx ホスト ディレクトリの表示
docker volume inspect lagouedu-nginxDocker データ ボリュームのデフォルト ディレクトリを入力します
cd /var/lib/docker/volumes/lagouedu-nginxView fileslsDocker のすべてのファイルはデフォルトで _data ディレクトリに保存されます cd _dataDelete容器###
docker rm $(docker stop $(docker ps -aq))
查看挂载数据是否还存在,通过查看数据,发现删除容器后,宿主机中的数据还存在
ls
匿名数据卷
基本使用
docker run -itd --name nginx -p 80:80 -v /etc/nginx nginx:1.19.3-alpine 查看docker数据卷 docker volume ls
查看宿主机目录
docker volume inspect dbd07daa4e40148b11....
进入docker数据卷默认目录
cd /var/lib/docker/volumes/dbd07daa4e40148b11....
查看文件
ls
所有的文件docker默认保存在_data目录中 cd _data
删除容器
docker rm $(docker stop $(docker ps -aq))
查看挂载数据是否还存在,通过查看数据,发现删除容器后,宿主机中的数据还存在
ls
run命令
常用参数
--volumes-from
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器
也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。
发现创建好的数据卷容器是处于停止运行的状态,因为使用 —volumes-from 参数所挂载数据卷的容器 自己并不需要保持在运行状态。
基本使用
docker run -d --name data-volume -v /data/nginx:/usr/share/nginx/html -v /data/mysql:/var/lib/mysql centos:7.8.2003 docker run -itd --name nginx01 -p 80:80 --volumes-from data-volume nginx:1.19.3- alpine echo "nginx" > /data/nginx/index.html http://192.168.198.100 docker run -itd --name nginx02 -p 81:80 --volumes-from data-volume nginx:1.19.3- alpine http://192.168.198.100:81 docker run -itd --name mysql01 --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin --volumes-from data-volume mysql:5.7.31 -- character-set-server=utf8 --collation-server=utf8_general_ci docker run -itd --name mysql02 --restart always --privileged=true -p 3307:3306 -e MYSQL_ROOT_PASSWORD=admin --volumes-from data-volume mysql:5.7.31 -- character-set-server=utf8 --collation-server=utf8_general_ci
推荐学习:《docker视频教程》
以上がDocker データ ボリュームの整理に関する最も詳細なチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。