본문 바로가기

가상화/Kubernetes

[Docker] Volume 관리

반응형

개요

 

구성환경

docker-ce-19.03.05 / centos 7.6

 

1. Volume 생성

 1.1 volume 이름 지정

shell> docker volume create myvol

 1.2 volume 이름을 지정하지 않을 경우 랜덤한 이름으로 volume 생성

shell> docker volume create
e7101b314111c39777c05c4238cb0f47c490fa5402073a2d54159a17b4ba4740
shell> docker volume ls => volume 목록 확인
DRIVER              VOLUME NAME
local               3aad80ae1cd56138325c04340dae4873b5b62fc0388034600943ebdc30ccb7f9
local               536f3eaa4462aa40d281350d8932f48ce003c416e7256ff306d5f26563900853
local               e7101b314111c39777c05c4238cb0f47c490fa5402073a2d54159a17b4ba4740
local               myvol
local               nfsvolume1
local               nfsvolume2
shell>

 1.3 컨테이너 생성과 동시에 볼륨생성, -v 옵션(동일이름의 볼륨이 존재하지 않을 경우)

  - httpd:latest 이미지에서 httpd_1 컨테이너 생성과 동시에 myvol 볼륨을 생성한 후, 컨테이너 /app 마운트

  syntax) -v 소스볼륨:마운트타겟

shell> docker run -itd -p 80:80 --name httpd_1 -v myvol:/app httpd:latest
shell> docker run -itd --name httpd_1 -v myvol:/app httpd:latest
14f269f14ec6158923e31d2b6f5cfb98f6ae48edce1a76c76e342e5dd100f372
shell> docker volume ls
DRIVER              VOLUME NAME
local               myvol1
shell> docker inspect myvol
[
    {
        "CreatedAt": "2020-01-10T14:38:04+09:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/home/docker/volumes/myvol/_data",
        "Name": "myvol",
        "Options": {},
        "Scope": "local"
    }
]
shell> docker inspect httpd_1 
        "Mounts": [
            {
                "Type": "volume",
                "Name": "myvol",
                "Source": "/home/docker/volumes/myvol/_data",
                "Destination": "/app",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],

 1.4 컨테이너 생성과 동시에 볼륨생성(디렉토리 매핑)

 - 실제 볼륨을 생성하지 않고 디렉토리 매핑만 함, docker volume ls 명령어를 실행하여도 실제 볼륨이 존재하지 않으므로 볼륨 목록에 나오지 않음, 관리하기가 까다로움

shell> mkdir /opt/myvol2 
shell> docker run -itd -p 80:80 --name httpd_2 -v /opt/myvol2:/app httpd:latest 
shell> docker inspect httpd_2 

        "Mounts": [ 
            { 
                "Type": "bind", 
                "Source": "/opt/myvol2", 
                "Destination": "/app", 
                "Mode": "", 
                "RW": true, 
                "Propagation": "rprivate" 
            } 

2. volume 정보

shell> docker inspect myvol
[
    {
        "CreatedAt": "2020-01-10T14:38:04+09:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/home/docker/volumes/myvol/_data",
        "Name": "myvol",
        "Options": {},
        "Scope": "local"
    }
]
shell>

3. volume 삭제

shell> docker volume rm myvol

4. nfs 볼륨 생성

shell> docker volume create --driver local \
    --opt type=nfs \
    --opt o=addr=192.168.0.130,rw \
    --opt device=:/opt/docker1 \
    nfsvolume1

shell> docker inspect nfsvolume1
[
    {
        "CreatedAt": "2020-01-14T09:23:11+09:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/home/docker/volumes/nfsvolume1/_data",
        "Name": "nfsvolume1",
        "Options": {
            "device": ":/opt/docker1",
            "o": "addr=192.168.0.130",
            "type": "nfs"
        },
        "Scope": "local"
    }
]
shell>

 

반응형