[Docker] Docker Compose 에서 volume 사용 하기

Cloud&Container 2020. 3. 30. 14:40

기본 문서는 아래 링크 참고 하시면 됩니다.

 

Reference)

https://docs.docker.com/compose/compose-file/#volumes
https://docs.docker.com/compose/compose-file/#volume-configuration-reference

 

두 가지의 syntax 를 제공 하고 있습니다.

  1. Short Syntax
  2. Long Syntax

1. Short Syntax 

https://docs.docker.com/compose/compose-file/#short-syntax-3

valumes:
  - ${SOURCE-PATH}:${DESTINATION-PATH}:${MODE}

${SOURCE-PATH} 에는 Host의 Path 또는 Volume Name 을 사용 할 수 있습니다.

 

Case 1) bind mount 형식으로 volume 생성이 됩니다.

services:
...중략...
  volumes:
    - /mount/data:/usr/share/elasticsearch/mnt:rw
    
    
$ docker inspect ${SERVICE-NAME}
...중략...
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/mount/data",
                "Destination": "/usr/share/elasticsearch/mnt",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            }
        ]
...중략...

 

Case 2) volume 형식으로 volume 생성이 됩니다.

- volume 사용 시 주의 사항은 Container 내부에 이미 생성 되어 있는 File System 을 사용

services:
...중략...
  volumes:
    - mount01:/usr/share/elasticsearch/data:rw
...중략...

volumes:
  mount01:
    driver: local      

$ docker volume ls --format "{{.Name}} : {{.Mountpoint}}"
megatoi-monitor-elasticsearch_mount01 : /var/lib/docker/volumes/megatoi-monitor-elasticsearch_mount01/_data

$ docker inspect ${SERVICE-NAME}
...중략...
        "Mounts": [
            {
                "Type": "volume",
                "Name": "megatoi-monitor-elasticsearch_mount01",
                "Source": "/var/lib/docker/volumes/megatoi-monitor-elasticsearch_mount01/_data",
                "Destination": "/usr/share/elasticsearch/data",
                "Driver": "local",
                "Mode": "rw",
                "RW": true,
                "Propagation": ""
            }
        ],
...중략...

 

2. Long Syntax

https://docs.docker.com/compose/compose-file/#long-syntax-3

기본 옵션만 살펴 보겠습니다.

자세한건 위 문서를 참고하세요.

  • type
    • volume
      • Volume 선언 시 Source 는 volumes: syntax 에서 named volume 선언이 되어 있어야 합니다.
    • bind
      • Source File System 이 만들어져 있어야 합니다.
  • source
    • Host File System  을 작성 합니다. 
    • Short Syntax 에서 처럼 Host 의 Path 또는 Volume Name 을 사용 할 수 있습니다.
  • target
    • Container File System 을 작성 합니다.

Case 1) bind mount 형식으로 volume 생성이 됩니다.

services:
...중략...
    volumes:
        - type: bind
          source: /mount/data
          target: /usr/share/elasticsearch/mnt
...중략...


$ docker inspect ${SERVICE-NAME}
...중략...
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/mount/data",
                "Destination": "/usr/share/elasticsearch/mnt",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
...중략...

 

Case 2) volume 형식으로 volume 생성이 됩니다.

- volume 사용 시 주의 사항은 Container 내부에 이미 생성 되어 있는 File System 을 사용

services:
...중략...
    volumes:
        - type: volume
          source: mount01
          target: /usr/share/elasticsearch/data
...중략...
volumes:
  mount01:
    driver: local
...중략...


$ docker inspect ${SERVICE-NAME}
...중략...
        "Mounts": [
            {
                "Type": "volume",
                "Name": "megatoi-monitor-elasticsearch_mount01",
                "Source": "/var/lib/docker/volumes/megatoi-monitor-elasticsearch_mount01/_data",
                "Destination": "/usr/share/elasticsearch/data",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],
...중략...

hort Syntax 의 Case 2) 와 같이 사용도 가능 합니다.

: