volumes?

😎·2023년 3월 25일
0

도커

목록 보기
6/6

볼륨이 뭘까?? 볼륨은 공간을 이야기한다. 로컬 공간이다. 컨테이너가 있는 가상 공간이 아닌, HostOS 에 있는 공간이다.

왜 필요할까?? 결론 먼저 이야기하면 컨테이너 안에 있는 데이터를 보존하고 공유하는 등 로컬에서도 관리하기 위해서이다.

아래는 nginx, wordpress, mariadb 컨테이너가 생성되고 서로 상호작용하는 그림이다.

조금 더 확대해보면, volume 이 설정되어있는 걸 확인할 수 있다.


데이터를 위한 로컬 공간

여러 컨테이너를 생성하고 컨테이너 안에서 여러 작업을 하며 많은 데이터를 쌓았다.

컨테이너를 통해 이미지를 계속 업데이트 하면서 레거시 이미지와 컨테이너가 쌓였다.

불필요한 걸 지우자.

❗️앗... 실수로 최근 생성한 이미지와 컨테이너를 지워버렸다. 컨테이너에서 작업한 내 데이터는 모두 어떻게 되는걸까...

백업하지 않았다면, 모두 사라졌을 것이다.

이러한 상황을 방지하기 위해 volumes 설정을 한다.

services:
  nginx:
    build: requirements/nginx
    image: nginx
    ...
    volumes:
      - wp_volume:/var/www/html/wordpress
    ...

  mariadb:
    init: true
    build: ./requirements/mariadb/
    image: mariadb
    ...
    volumes:
      - db_volume:/var/lib/mysql/
    ...

  wordpress:
    build: requirements/wordpress
    image: wordpress
    ...
    volumes:
      - wp_volume:/var/www/html/wordpress
    ...
    

volumes:
  wp_volume:
     name: wp_volume
     driver: local
     driver_opts:
       type: none
       device: /home/jaekim/data/wordpress
       o: bind
  db_volume:
     name: db_volume
     driver: local
     driver_opts:
       type: none
       device: /home/jaekim/data/mariadb
       o: bind

...

service 부분을 보면 nginx, mariadb, wordpress 이미지 생성부분이 있고, volumes 설정이 되어 있는 걸 확인할 수 있다.

  • wp_volume:/var/www/html/wordpress
  • db_volume:/var/lib/mysql/

[로컬에 설정한 공간] : [컨테이너에 설정한 공간] 로컬과 컨테이너의 공간을 연결해준다.

wp_volume 과 db_volume 이 로컬 공간이라는 의미인데, 어디서 정의가 되었는가??

하단에 volumes 을 보자

  • wp_volume: ~
  • db_volume: ~

두 개의 볼륨이 로컬에 설정되어있다! 로컬에 어느 위치인지는 device 를 보면 알 수 있다.

  • device: /home/jaekim/data/wordpress
  • device: /home/jaekim/data/mariadb

다시 말하면

  • 컨테이너의 /var/www/html/wordpress 와 로컬의 /home/jaekim/data/wordpress 가 같은 데이터를 공유하고

  • 컨테이너의 /var/lib/mysql/ 과 로컬의 /home/jaekim/data/mariadb 가 같은 데이터를 공유한다.

volumes을 통해 컨테이너가 삭제되어도, 로컬에 데이터가 보존되기 때문에 문제가 발생하지 않게 할 수 있다.

profile
jaekim

0개의 댓글