Docker의 데이터 볼륨 및 데이터 볼륨 컨테이너
36546 단어 docker
데이터 볼륨
데이터 볼륨은 호스트 디렉터리를 용기에 직접 비추는 특수한 디렉터리입니다.하나 이상의 컨테이너로 사용할 수 있습니다.
데이터 볼륨 디자인의 목적은 데이터의 지속화를 위해 용기의 생명 주기와 완전히 독립하는 것이다.따라서 용기를 삭제할 때 마운트된 데이터 볼륨을 삭제하지 않고 유사한 스팸 메커니즘이 용기에 존재하는 데이터 볼륨을 처리하지 않는다.
데이터 볼륨의 특성:
컨테이너에 데이터 볼륨을 만드는 데 사용되는 명령은 다음과 같습니다.
[root@localhost ~]# docker run -v /root/datavolume:/data -it hub.c.163.com/library/ubuntu /bin/bash
여기서 -v 는 컨테이너에 데이터 볼륨을 생성함을 나타냅니다./root/datavolume:/data, 호스트의 디렉터리/root/datavolume가 용기에 비친/data 디렉터리를 표시합니다.예:
[root@localhost ~]# docker run -v /root/datavolume:/data -it hub.c.163.com/library/ubuntu /bin/bash
root@c863c5094922:/# ll
total 24
drwxr-xr-x. 22 root root 4096 Mar 24 02:30 ./
drwxr-xr-x. 22 root root 4096 Mar 24 02:30 ../
-rwxr-xr-x. 1 root root 0 Mar 24 02:30 .dockerenv*
drwxr-xr-x. 2 root root 4096 Jan 19 16:33 bin/
drwxr-xr-x. 2 root root 6 Apr 12 2016 boot/
drwxr-xr-x. 2 root root 15 Mar 22 11:30 data/
drwxr-xr-x. 5 root root 380 Mar 24 02:30 dev/
drwxr-xr-x. 42 root root 4096 Mar 24 02:30 etc/
drwxr-xr-x. 2 root root 6 Apr 12 2016 home/
drwxr-xr-x. 8 root root 90 Sep 13 2015 lib/
drwxr-xr-x. 2 root root 33 Jan 19 16:32 lib64/
drwxr-xr-x. 2 root root 6 Jan 19 16:31 media/
drwxr-xr-x. 2 root root 6 Jan 19 16:31 mnt/
drwxr-xr-x. 2 root root 6 Jan 19 16:31 opt/
dr-xr-xr-x. 223 root root 0 Mar 24 02:30 proc/
drwx------. 2 root root 35 Jan 19 16:33 root/
drwxr-xr-x. 6 root root 68 Mar 24 02:30 run/
drwxr-xr-x. 2 root root 4096 Jan 20 21:43 sbin/
drwxr-xr-x. 2 root root 6 Jan 19 16:31 srv/
dr-xr-xr-x. 13 root root 0 Mar 3 18:56 sys/
drwxrwxrwt. 2 root root 6 Jan 19 16:33 tmp/
drwxr-xr-x. 10 root root 97 Jan 20 21:43 usr/
drwxr-xr-x. 11 root root 4096 Jan 20 21:43 var
root@c863c5094922:/# [root@localhost ~]#
[root@localhost ~]# ll
4
-rw-------. 1 root root 1209 3 4 02:52 anaconda-ks.cfg
drwxr-xr-x. 3 root root 39 3 23 13:51 backup
drwxr-xr-x. 2 root root 15 3 22 19:30 datavolume
drwxr-xr-x. 4 root root 34 3 23 10:01 dockerfile
[root@localhost ~]# pwd
/root
[root@localhost ~]#
다음은 터치 명령을 사용하여 파일vo 만들기file1
root@c863c5094922:/data# touch vo_file1
root@c863c5094922:/data# ls -l
-rw-r--r--. 1 root root 0 Mar 24 02:49 vo_file1
root@c863c5094922:/data#
만약 권한과 유사한 문제가 발생한다면, 예를 들어 터치: cannot 터치
xxxx': Permission denied
su-c 'setenforce 0' 아래에 파일에 내용을 좀 쓰고, 용기와 호스트가 동기화되었는지 테스트하십시오.root@c863c5094922:/data# echo "this is a test datavolume" > vo_file1
root@c863c5094922:/data# cat vo_file1
this is a test datavolume
root@c863c5094922:/data# [root@localhost datavolume]#
[root@localhost datavolume]# cat /root/datavolume/vo_file1
this is a test datavolume
[root@localhost datavolume]#
용기에 보이는vofile1과 숙박 호스트의vo파일1의 내용은 같습니다.
docker inspect id/
를 사용하여 다음과 같은 mounts 세부 정보를 볼 수 있습니다.[root@localhost datavolume]# docker inspect c863c5094922
"Mounts": [
{
"Source": "/root/datavolume",
"Destination": "/data",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
Docker가 데이터 볼륨을 마운트하는 기본 권한은 읽기와 쓰기 (rw) 입니다. 위의 "RW":true를 통해 볼 수 있습니다. 우리는 만들 때 읽기 전용으로 설정하고 ro를 사용할 수 있습니다.
docker run -v /root/datavolume:/data:ro -it hub.c.163.com/library/ubuntu /bin/bash
예:
root@localhost datavolume]# docker run -v /root/datavolume:/data:ro -it hub.c.163.com/library/ubuntu /bin/bash
root@2a8706e63796:/# touch /data/vo_file2
touch: cannot touch '/data/vo_file2': Read-only file system
docker inspect에서는 컨테이너에 대한 정보를 볼 수 있습니다.
"Mounts": [
{
"Source": "/root/datavolume",
"Destination": "/data",
"Mode": "ro",
"RW": false,
"Propagation": "rprivate"
}
],
여기 "RW"는 false입니다.Dockerfile을 사용하여 데이터 볼륨을 포함하는 미러를 만듭니다. 다음과 같은 Dockerfile을 만들었습니다.
[root@localhost vo_test]# cat Dockerfile
FROM hub.c.163.com/library/ubuntu
VOLUME ["/datavolume1","/dockervolume2"]
CMD /bin/bash
[root@localhost vo_test]# pwd
/root/dockerfile/vo_test
[root@localhost vo_test]#
다음은 미러링을 구성합니다.
[root@localhost vo_test]# docker build -t df_vo .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM hub.c.163.com/library/ubuntu
---> f49eec89601e
Step 2 : VOLUME /datavolume1 /dockervolume2
---> Running in 39ce6de3a943
---> 4921812de13d
Removing intermediate container 39ce6de3a943
Step 3 : CMD /bin/bash
---> Running in f9afdbaf2471
---> 2ee7e110e18d
Removing intermediate container f9afdbaf2471
Successfully built 2ee7e110e18d
[root@localhost vo_test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
df_vo latest 2ee7e110e18d 6 seconds ago 129.5 MB
다음은 이 거울을 이용하여 용기votest1을 만듭니다.
[root@localhost vo_test]# docker run --name votest1 -it df_vo
root@a98bbf9dbfae:/# ls
bin boot datavolume1 dev dockervolume2 etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@a98bbf9dbfae:/#
이 용기에는 데이터volume1과 데이터volume2 두 개의 데이터 볼륨이 포함되어 있는 것을 볼 수 있습니다.이 미러를 사용하여 컨테이너 votest2를 다시 실행합니다.
[root@localhost _data]# docker run --name votest2 -it df_vo
root@9501be4f50d4:/#
root@9501be4f50d4:/# ls
bin boot datavolume1 dev dockervolume2 etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@9501be4f50d4:/# [root@localhost _data]#
docker inspect를 통해 이 두 용기의 정보를 각각 보십시오.두 용기 내의 데이터 볼륨이 호스트에 대응하는 주소 (docker가 직접 만든 것) 가 다음과 같지 않다는 것을 알 수 있습니다:votest1의 용기 정보:
[root@localhost vo_test]# docker inspect votest1
"Mounts": [
{
"Name": "4ae9914bc4bd127e669b89ee6b703a0c9cc91f18c8dfe5034dbb838de2ca8062",
"Source": "/var/lib/docker/volumes/4ae9914bc4bd127e669b89ee6b703a0c9cc91f18c8dfe5034dbb838de2ca8062/_data",
"Destination": "/datavolume1",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Name": "753a10fd08491a41aa953427a4cf7b30276604175b8e237cfea2aed0ddbeaf48",
"Source": "/var/lib/docker/volumes/753a10fd08491a41aa953427a4cf7b30276604175b8e237cfea2aed0ddbeaf48/_data",
"Destination": "/dockervolume2",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
votest2의 컨테이너 정보:
[root@localhost _data]# docker inspect votest2
"Mounts": [
{
"Name": "a455e9d38eb656375316c0a96ec0dd69d900f3477d39752a417dac725d8b6854",
"Source": "/var/lib/docker/volumes/a455e9d38eb656375316c0a96ec0dd69d900f3477d39752a417dac725d8b6854/_data",
"Destination": "/dockervolume2",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Name": "449d3f7c271d0f6ab8f3cd7df0fc4f79510ebeeee888b65283db58c77031d66c",
"Source": "/var/lib/docker/volumes/449d3f7c271d0f6ab8f3cd7df0fc4f79510ebeeee888b65283db58c77031d66c/_data",
"Destination": "/datavolume1",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
해당 호스트 데이터 볼륨 위치:
[root@localhost _data]# cd /var/lib/docker/volumes/
[root@localhost volumes]# ll
32
drwxr-xr-x. 3 root root 18 3 7 11:48 122d96164df0f84b6132c67cb7db1368b67df81420b03c48ccd0bce682241e4b
drwxr-xr-x. 3 root root 18 3 7 09:46 174a0ebf6f790834a04d7dda48b1e24702e9a98f805c0c6331aa49e294736143
drwxr-xr-x. 3 root root 18 3 7 09:47 335c944921f8ec1f4d96fe8a0a15802f69f591549461710fea4bc9c92cd13018
drwxr-xr-x. 3 root root 18 3 7 10:03 3893ab8ce0aca2128bd3847488f57431285a943ded814843f1aaf993e64b902e
drwxr-xr-x. 3 root root 18 3 24 11:53 449d3f7c271d0f6ab8f3cd7df0fc4f79510ebeeee888b65283db58c77031d66c
drwxr-xr-x. 3 root root 18 3 24 11:48 4ae9914bc4bd127e669b89ee6b703a0c9cc91f18c8dfe5034dbb838de2ca8062
drwxr-xr-x. 3 root root 18 3 23 10:12 6cd6a34adf1fe157cf813a0016011966f97c866874ad10137728ebf824b76e01
drwxr-xr-x. 3 root root 18 3 24 11:48 753a10fd08491a41aa953427a4cf7b30276604175b8e237cfea2aed0ddbeaf48
drwxr-xr-x. 3 root root 18 3 22 20:02 7764cd58f82d0d782e97c9b719825c42dc34806ae995257f0082342396b4a630
drwxr-xr-x. 3 root root 18 3 24 11:53 a455e9d38eb656375316c0a96ec0dd69d900f3477d39752a417dac725d8b6854
drwxr-xr-x. 3 root root 18 3 7 10:07 a4af7ebbb3da863176fe4db6234d9e69b2e47ce628b0f3770854ed75c40e3604
drwxr-xr-x. 3 root root 18 3 22 20:02 abecf3deb59ded6262a20ddc94f0e6505ea3dd1c717260594fa4a8b0260c136c
drwxr-xr-x. 3 root root 18 3 6 15:27 db6529f59f1ceb789047f7c340951c48c463c840e74974d7cfd04d7fad2a3468
drwxr-xr-x. 3 root root 18 3 7 09:58 e33c562f6e4beb2711ba50cb188ba51faf670b2aa56e571749fc96ce876c0d5c
drwxr-xr-x. 3 root root 18 3 23 10:12 e82ea714065869185dad3e50703ed44f877794a0a201143679c4b40dc2af4a4d
-rw-------. 1 root root 65536 3 24 11:53 metadata.db
[root@localhost volumes]#
데이터 볼륨 컨테이너 사용자는 여러 컨테이너 간에 데이터를 공유해야 하기 때문에 데이터 볼륨 컨테이너를 사용할 수 있다.
이름이 붙은 용기는 데이터 볼륨을 마운트하고 다른 용기는 이 용기를 마운트하여 데이터 공유를 실현하며 데이터 볼륨을 마운트하는 용기를 데이터 볼륨 용기라고 부른다.
1. 먼저 용기를 만듭니다. 2.그런 다음 마운트합니다.데이터 볼륨 컨테이너를 마운트하는 방법:
docker run --volumes-from
예:
먼저 컨테이너 votest3을 만듭니다.
[root@localhost volumes]# docker run --name votest3 -it df_vo
root@c31f85a96a68:/# ls
bin boot datavolume1 dev dockervolume2 etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@c31f85a96a68:/#
데이터 볼륨 데이터volume1과 dockervolume2가 있는 것을 볼 수 있으며 데이터volume1에 파일vo 를 생성합니다file:
root@c31f85a96a68:/# touch datavolume1/vo_file
root@c31f85a96a68:/# ls datavolume1/
vo_file
그리고 용기votest4를 다시 만들어서votest3을 마운트하면 같은 데이터 볼륨을 포함하고 데이터volume1에 파일vo 를 만들 수 있습니다file1:
[root@localhost volumes]# docker run -it --name votest4 --volumes-from votest3 hub.c.163.com/library/ubuntu /bin/bash
root@917fc6a610df:/# ls
bin boot datavolume1 dev dockervolume2 etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@917fc6a610df:/# ls datavolume1/
vo_file
root@917fc6a610df:/# touch datavolume1/vo_file1
root@917fc6a610df:/# ls datavolume1/
vo_file vo_file1
마찬가지로 용기votest5를 하나 더 만들고 데이터volume에서 파일vofile2
[root@localhost volumes]# docker run -it --name votest5 --volumes-from votest3 hub.c.163.com/library/ubuntu /bin/bash
root@61eb42648402:/# ls
bin boot datavolume1 dev dockervolume2 etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@61eb42648402:/# ls datavolume1/
vo_file vo_file1
root@61eb42648402:/# touch datavolume1/vo_file2
root@61eb42648402:/# ls datavolume1/
vo_file vo_file1 vo_file2
root@61eb42648402:/#
우리 연결 각각 votest3 및 vo테스트 4에서 파일을 보려면 다음과 같이 하십시오.
[root@localhost volumes]# docker attach votest3
root@c31f85a96a68:/#
root@c31f85a96a68:/# ls datavolume1/
vo_file vo_file1 vo_file2
root@c31f85a96a68:/#
[root@localhost volumes]# docker attach votest4
root@917fc6a610df:/#
root@917fc6a610df:/# ls datavolume1/
vo_file vo_file1 vo_file2
root@917fc6a610df:/#
데이터가 동기화된 것을 볼 수 있다.votest3을 삭제하면 데이터 볼륨이 삭제되지 않은 것을 알 수 있습니다.
[root@localhost volumes]# docker rm votest3
votest3
[root@localhost volumes]# docker attach votest4
root@917fc6a610df:/#
root@917fc6a610df:/# ls datavolume1/
vo_file vo_file1 vo_file2
root@917fc6a610df:/#
데이터 볼륨 백업 및 복원 데이터 볼륨 백업에 사용되는 명령:
docker run --volumes-from -v $(pwd):/backup --name tar cvf /backup/backup.tar
$(pwd) 현재 경로
예(이전에 생성된 votest5 사용):
[root@localhost volumes]# docker run --volumes-from votest5 -v /root/backup:/backup hub.c.163.com/library/ubuntu tar cvf /backup/vof.tar /datavolume1
tar: Removing leading `/' from member names
/datavolume1/
/datavolume1/vo_file
/datavolume1/vo_file1
/datavolume1/vo_file2
[root@localhost volumes]# ls /root/backup/
vof.tar
[root@localhost volumes]#
/root/backup/에 백업된 것을 볼 수 있습니다.
데이터 볼륨 복원:
다음과 같이 명령을 사용합니다.
docker run --volumes-from -v $(pwd):/backup --name tar xvf /backup/backup.tar
예: 컨테이너votest8 복원 데이터 볼륨 만들기
[root@localhost backup]# docker run --volumes-from votest5 -v /root/backup:/backup --name votest8 hub.c.163.com/library/ubuntu tar xvf /backup/vof.tar
datavolume1/
datavolume1/vo_file
datavolume1/vo_file1
datavolume1/vo_file2
그리고 용기 마운트votest8 만들기
[root@localhost backup]# docker run -it --volumes-from votest8 hub.c.163.com/library/ubuntu /bin/bash
root@ee4d4f932ce4:/#
root@ee4d4f932ce4:/# ls
backup bin boot datavolume1 dev dockervolume2 etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@ee4d4f932ce4:/# cd backup/
root@ee4d4f932ce4:/backup# ll
-rw-r--r--. 1 root root 10240 Mar 24 06:44 vof.tar
root@ee4d4f932ce4:/backup#
이상은 데이터 볼륨과 데이터 볼륨 용기의 관련 조작이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swarm의 도커 비밀이 게시물에서는 Redis를 사용한 실제 시나리오 예제를 제공하여 사용 방법을 보여주고자 합니다. Docker 기술에 대한 기본 지식 Docker Swarm 오케스트레이터에 대한 기본 지식 "Docker Swarm ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.