Dockerシリーズの6:Volumeボリュームの使用-Dockerfileでの使い方

4528 ワード

シリーズリンク
Dockerシリーズの1つ:Dockerの紹介とUbuntuへのインストール
Dockerシリーズの2:Docker入門
Dockerシリーズの3つ:Dockerミラーと倉庫の使用
Dockerシリーズの4:Dockerfileの使用
Dockerシリーズの5:Volumeボリュームの使用-Redisを例に
Dockerシリーズの6:Volumeボリュームの使用-Dockerfileでの使い方
Dockerシリーズの7:Dockerネットワーク(内部ネットワーク、コンテナ間の接続)
Dockerシリーズの8:Dockerfileでマルチセグメントを使用してMuti-stage buildを構築する
Dockerシリーズの9:Dockerは継続的な統合に使用され、JenkinsとDockerサーバを構築します.
Dockerシリーズの10:Docker Componentの使用
概要
コンテナ内の1つのディレクトリにデータを永続化して格納する機能を持たせ、コンテナ自体で使用したり、他のコンテナに共有して使用したりすることができます.コンテナがAFSを使用していることを知っています.このファイルシステムはデータを永続化できません.コンテナが閉じると、すべての変更が失われます.この命令は、コンテナ内のアプリケーションがデータを永続化する必要がある場合にDockerfileで使用することができる.書式:
VOLUME [""]

まずフォルダとDockerfileを次のように作成し、ミラーを作成します./home/appフォルダがマウントされ、ストレージを永続化していることがわかります.
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# ls
Dockerfile  index.html
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# cat Dockerfile
FROM nginx
WORKDIR /usr/share/nginx/html
COPY . .
Volume /home/app
EXPOSE 80

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker volume ls
DRIVER              VOLUME NAME

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker build --tag cong .
Sending build context to Docker daemon  3.072kB
Step 1/4 : FROM nginx
 ---> dbfc48660aeb
Step 2/4 : WORKDIR /usr/share/nginx/html
 ---> Using cache
 ---> 49eb0195ae40
Step 3/4 : Volume /home/app
 ---> Running in 18c563ef43c2
Removing intermediate container 18c563ef43c2
 ---> 47f7e5ae3f63
Step 4/4 : EXPOSE 80
 ---> Running in fb5646e92dd0
Removing intermediate container fb5646e92dd0
 ---> 53f3634ef68d
Successfully built 53f3634ef68d
Successfully tagged cong:latest

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker volume ls
DRIVER              VOLUME NAME


最初のコンテナを作成すると、次のボリュームが表示されます.
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker run -itd -p 91:80 --name cong1 cong
e2368d6814df4c53ac4fb13b4a0f6a2337d09704f53e0cbab4997f85998f4a11

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker volume ls
DRIVER              VOLUME NAME
local               4efa3605bc23f528d22d4e40748f137a63299cbffcd9ff56d1ed1be277a29dd9

コンテナcong 1に入るとフォルダ/home/appが存在するが、内容が空でファイルlogが追加される.txtは文字列aaaに記入する.次にコンテナcong 2を作成し、--volumes-fromを使用してコンテナcong 1のすべてのボリュームを新しく作成したコンテナcong 2にマスターし、/home/app/logを表示します.txtファイル、値は存在します.
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker exec -it cong1 bash
root@e2368d6814df:/usr/share/nginx/html# cd /home/app
root@e2368d6814df:/home/app# echo "aaa">log.txt
root@e2368d6814df:/home/app# exit
exit

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker run -itd -p 92:81 --name cong2 --volumes-from cong1  cong
1a63d4479c83d715782efc261279a7c1b2a547d1a37b616d28adfca2324a592a
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker exec -it cong2 bash
root@1a63d4479c83:/usr/share/nginx/html# cat /home/app/log.txt
aaa

私たちはこのロゴを修正しようとした.txtは、aaaをbbbに変更し、このボリュームのデータが1部しか保存されていないのを見て、2つの容器で修正されているように見えます.
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker exec -it cong2 bash

root@1a63d4479c83:/usr/share/nginx/html# echo "bbb"> /home/app/log.txt
root@1a63d4479c83:/usr/share/nginx/html# cat /home/app/log.txt
bbb
root@1a63d4479c83:/usr/share/nginx/html# exit
exit

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker exec -it cong1 bash
root@e2368d6814df:/usr/share/nginx/html# cat /home/app/log.txt
bbb
root@e2368d6814df:/usr/share/nginx/html# exit
exit

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker volume ls
DRIVER              VOLUME NAME
local               4efa3605bc23f528d22d4e40748f137a63299cbffcd9ff56d1ed1be277a29dd9

コンテナcong 1が実行されていなくても、コンテナcong 2はこのボリュームにアクセスできますが、コンテナcong 1自体が存在する必要があることを前提として、2つのコンテナに1つのボリュームがマウントされています.この2つのコンテナを削除すると、このボリュームは依然として存在します.では、Dockerホストでパス/home/appを見つけることができますか?Dockerホスト上でフォルダ/home/appが最初から最後まで作成されていないことがわかります.
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker rm cong1 -f
cong1
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker rm cong2 -f
cong2
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker volume ls
DRIVER              VOLUME NAME
local               4efa3605bc23f528d22d4e40748f137a63299cbffcd9ff56d1ed1be277a29dd9
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# cd /home/app
-bash: cd: /home/app: No such file or directory