docker 실천 (8) docker 호스트 공유 볼 륨

10482 단어 docker호스트volume
1. host volume 을 용기 에 마 운 트 합 니 다.
1.1. 로 컬 자원 을 용기 에 마 운 트 할 것 을 지정 합 니 다.
1.1.1 로 컬 파일
# cat index.html 
There is nothing here

1.1.2. 용 기 를 만 들 고 로 컬 자원 을 마 운 트 합 니 다.
# docker run -d -p 80:80 -v ~/index.html:/usr/share/nginx/html/index.html --name "cklng" nginx
83826f3fdb3d940fb2fd18af4223da695758e8ac7eb73e07215c461904e161cb
# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
83826f3fdb3d        nginx               "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp       cklng

1.1.3. 접근 용기
# curl http://127.0.0.1:80
There is nothing here
# docker inspect 83826f3fdb3d
....
 "Mounts": [
            {
                "Type": "bind",
                "Source": "/root/index.html",  #      
                "Destination": "/usr/share/nginx/html/index.html",  #      
                "Mode": "", 
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
....

1.2. 로 컬 자원 을 용기 에 마 운 트 하지 않 음
1.2.1. 용 기 를 실행 하고 로 컬 자원 을 지정 하지 않 습 니 다.
# docker run -d -p 80:80 -v /usr/share/nginx/html/ --name "cklng1" nginx                       
8d8fc0a101a03bc7b098f0838e9583cf2a673ecbc6c543739cf2f2803bb713e3

1.2.2. 접근 용기
# curl http://127.0.0.1:80
html>


Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.


1.2.3. 용기 상세 보기
# docker inspect 8d8fc0a101a0
...
"Mounts": [
            {
                "Type": "volume",
                "Name": "af5af5d925c4e4109d5d9ab4ff9112bee5ec56b1dfc64ce1294e23ed458c50ef",
                "Source": "/var/lib/docker/volumes/af5af5d925c4e4109d5d9ab4ff9112bee5ec56b1dfc64ce1294e23ed458c50ef/_data",  #      
                "Destination": "/usr/share/nginx/html",  #        
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
....
#ls /var/lib/docker/volumes/af5af5d925c4e4109d5d9ab4ff9112bee5ec56b1dfc64ce1294e23ed458c50ef/_data/
50x.html    index.html

\ # 용기 에서 무 작위 디 렉 터 리 를 mount 의 원본 으로 만 듭 니 다.
\ # mount 원본 내용 보기:
# cat /var/lib/docker/volumes/af5af5d925c4e4109d5d9ab4ff9112bee5ec56b1dfc64ce1294e23ed458c50ef/_data/index.html 
html>


Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.


1.2.3. volume 상세 보기
# docker volume ls
DRIVER              VOLUME NAME
local               af5af5d925c4e4109d5d9ab4ff9112bee5ec56b1dfc64ce1294e23ed458c50ef
# docker volume inspect af5af5d925c4e4109d5d9ab4ff9112bee5ec56b1dfc64ce1294e23ed458c50ef
[
    {
        "CreatedAt": "2018-12-19T01:05:34-05:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/af5af5d925c4e4109d5d9ab4ff9112bee5ec56b1dfc64ce1294e23ed458c50ef/_data",
        "Name": "af5af5d925c4e4109d5d9ab4ff9112bee5ec56b1dfc64ce1294e23ed458c50ef",
        "Options": null,
        "Scope": "local"
    }
]

볼 륨 내용 수정:
# cat /var/lib/docker/volumes/af5af5d925c4e4109d5d9ab4ff9112bee5ec56b1dfc64ce1294e23ed458c50ef/_data/index.html    
THIS IS NO NO NO PANGE!

접근 용기:
# curl http://127.0.0.1:80
THIS IS NO NO NO PANGE!

용기 에 들 어가 보기:
# docker exec -it 8d8fc0a101a0 /bin/bash
root@8d8fc0a101a0:/# cat /usr/share/nginx/html/index.html 
THIS IS NO NO NO PANGE!

1.2.4. 용기 정지 후 volume
# docker stop 8d8fc0a101a0
8d8fc0a101a0
# docker rm 8d8fc0a101a0
8d8fc0a101a0
# cat /var/lib/docker/volumes/af5af5d925c4e4109d5d9ab4ff9112bee5ec56b1dfc64ce1294e23ed458c50ef/_data/index.html    
THIS IS NO NO NO PANGE!

\ # host 파일 이 여전히 존재 합 니 다.
사용 - v 로 컬 마 운 트 자원 삭제 가능
# docker rm -v 71b9d9f74d2a

2. 용기 공유 데이터
2.1. 위 와 같이 공유 하고 로 컬 의 같은 volume 을 마 운 트 합 니 다.
2.1.1. 세 개의 용 기 를 만 들 고 같은 디 렉 터 리 를 마 운 트 합 니 다.
# docker run -d -p 80 -v ~/index.html:/usr/share/nginx/html/index.html --name "cklng1" nginx
75cb89bb9430ed47022c76a854c64cdc043571d8be0215d7223355713fb9c078
[root@localhost ~]# docker run -d -p 80 -v ~/index.html:/usr/share/nginx/html/index.html --name "cklng2" nginx 
4e8699f856f0709088b1e24effb9f38b939018f6af9880c1a988a2e42fb13c35
[root@localhost ~]# docker run -d -p 80 -v ~/index.html:/usr/share/nginx/html/index.html --name "cklng3" nginx 
46c536bc8eeacb073f84cccef9c217edd8196e431b033f8c1182233aa02731df

용기 프로 세 스:
# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
46c536bc8eea        nginx               "nginx -g 'daemon of…"   5 seconds ago       Up 3 seconds        0.0.0.0:32771->80/tcp    cklng3
4e8699f856f0        nginx               "nginx -g 'daemon of…"   8 seconds ago       Up 7 seconds        0.0.0.0:32770->80/tcp    cklng2
75cb89bb9430        nginx               "nginx -g 'daemon of…"   14 seconds ago      Up 13 seconds       0.0.0.0:32769->80/tcp    cklng1

세 개의 용기 에 접근 하기:
# curl http://127.0.0.1:32771
There is nothing here
# curl http://127.0.0.1:32770
There is nothing here
# curl http://127.0.0.1:32769
There is nothing here
#    

\ # 원본 수정
# echo "it's changed" > index.html 
# curl http://127.0.0.1:32769      
it's changed
# curl http://127.0.0.1:32770
it's changed
# curl http://127.0.0.1:32771
it's changed

2.2. volme 용기 만 들 기
매개 변수 설명:
-- volumes - from Mount volumes from the specified container (s) \ # 볼 륨 을 지정 한 용기 에서 마 운 트 합 니 다
2.2.1. 먼저 volume 용 기 를 만 듭 니 다.
# docker create --name ckl_data -v ~/index.html:/usr/share/nginx/html/index -v /data/ckl/testdir centos
a1bb53fa787c470611e5ebd9fd06c399447f3fdf18442eba08ae1b745d63a70c

\ # 생 성 용기 볼 륨 에 대한 자세 한 내용 보기:
# docker inspect a1bb53fa787c
...
"Mounts": [
            {
                "Type": "bind",
                "Source": "/root/index.html",  #   1
                "Destination": "/usr/share/nginx/html/index",  #   1
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "e78b4894d0f13c2ab68d362728dd101dc3b3a55666dd5978a204f30731b4f9a6",
                "Source": "/var/lib/docker/volumes/e78b4894d0f13c2ab68d362728dd101dc3b3a55666dd5978a204f30731b4f9a6/_data", #     2
                "Destination": "/data/ckl/testdir",  #   2
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
....

2.2.2. 세 개의 용 기 를 만 들 고 마 운 트 할 용 기 를 지정 합 니 다.
# docker run -d --name "cklcent1" --volumes-from ckl_data nginx 
480ebd88ea200f23bb0f0ac336fc7183a81832bdfcd40ea02bc2902fd980ae3d
# docker run -d --name "cklcent2" --volumes-from ckl_data nginx 
9e4a4095722595dc196b5e39c10ee970067855970e69ef571ad0e2a118f461a2
# docker run -d --name "cklcent3" --volumes-from ckl_data nginx 
0a58aea9bd47895d9cf8c000f9d1f604f14970c47b1cb72e5d0f2015568de3d1

2.2.3 용기 내용 보기:
# docker exec -it 0a58aea9bd47 /bin/bash -c "cat  /usr/share/nginx/html/index && ls /data/ckl/testdir"
it's changed
# docker exec -it 9e4a40957225 /bin/bash -c "cat  /usr/share/nginx/html/index && ls /data/ckl/testdir"            
it's changed
# docker exec -it 480ebd88ea20 /bin/bash -c "cat  /usr/share/nginx/html/index && ls /data/ckl/testdir"            
it's changed

마 운 트 원본 에 들 어가 서 파일 추가, 테스트:
# cd /var/lib/docker/volumes/e78b4894d0f13c2ab68d362728dd101dc3b3a55666dd5978a204f30731b4f9a6/_data
[root@localhost _data]# touch ckl.log

\ # 공 유 된 디 렉 터 리, 파일 일치
#  docker exec -it 0a58aea9bd47 /bin/bash -c "cat  /usr/share/nginx/html/index && ls /data/ckl/testdir"
it's changed
ckl.log
# docker exec -it 9e4a40957225 /bin/bash -c "cat  /usr/share/nginx/html/index && ls /data/ckl/testdir" 
it's changed
ckl.log
#  docker exec -it 480ebd88ea20 /bin/bash -c "cat  /usr/share/nginx/html/index && ls /data/ckl/testdir" 
it's changed
ckl.log

\ # 용기 마 운 트 미 러 를 만 들 수도 있 습 니 다. 파일 을 용기 에 넣 고 새로 만 든 용 기 는 호스트 에 의존 하지 않 고 마 운 트 용 기 를 지정 합 니 다.

좋은 웹페이지 즐겨찾기