인프라

3. 도커 볼륨

오늘의 나1 2021. 3. 2. 21:41

도커 볼륨 사용 이유

도커 컨테이너 삭제 시, 컨테이너의 데이터(예, 데이터베이스 등)는 컨테이너 삭제 시 삭제됨

컨테이너 삭제 후에도 컨테이너의 데이터를 남기고 싶다면 볼륨을 사용하면 됨

도커 볼륨 사용 방법

  • 호스트와 볼륨을 공유
  • 볼륨 컨테이너 활용
  • 도커가 관리하는 볼륨 생성

호스트와 볼륨을 공유

호스트의 디렉터리를 컨테이너 디렉터리에 마운트

$ docker run -d \
--name wordpressdb_hostvolume \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
-v /home/wordpress_db:/var/lib/mysql \
-v /home/hello:/hello
mysql:5.7

$ ls /home/wordpress_db
auto.cnf   ib_buffer_pool   ib_logfile0   ib_logfile1   ibdata1   ibtmp1   mysql   performance_schema   sys   wordpress   ...
  • 호스트의 /home/wordpress\_db 디렉터리를 컨테이너의 /var/lib/mysql 디렉터리에 마운트함
  • 호스트 디렉터리가 없으면, 디렉터리 생성
  • 호스트 디렉터리가 있으면, 호스트 디렉터리를 컨테이너의 디렉터리에 덮어씌움
  • 호스트의 디렉터리와 컨테이너의 디렉터리는 완전히 같은 디렉터리
  • 컨테이너 삭제 후에도 호스트 디렉터리는 남아있음
  • 디렉터리 단위의 공유뿐 아니라 단일 파일 단위의 공유도 가능하며, 동시에 여러 개의 -v 옵션을 쓸 수도 있음

볼륨 컨테이너

볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유
컨테이너를 볼륨용으로만 활용하는 것도 방법

$ docker run -i -t \
--name volumes_from_container \
--volumes-from wordpressdb_hostvolume \
mysql:5.7

도커 볼륨

도커 엔진에서 볼륨 생성 후, 볼륨을 연결

도커 볼륨 생성 후, 컨테이너에 볼륨을 연결
$ docker volume create --name myvolume
$ docker volume ls 
DRIVER        VOLUME NAME
local         myvolume

$ docker run -i -t --name my_volume_1 \
-v myvolume:/root/ \
ubuntu:14.04
컨테이너 생성 시, 도커 볼륨을 자동으로 생성하여 볼륨을 연결
$ docker run -i -t --name volume_auto \
-v /root/ \
ubuntu:14.04

볼륨 삭제

도커 볼륨을 사용하고 있는 컨테이너를 삭제해도 볼륨이 자동으로 삭제되지는 않기 때문에,
도커 볼륨을 생성하고 삭제하다보면 불필요한 볼륨들이 남아있을 때가 있음
사용되지 않는 볼륨을 한꺼번에 삭제하려면 docker volume prune 명령어 사용

스테이스리스(stateless)한 컨테이너 설계

  • 컨테이너가 아닌 외부에 데이터를 저장하고 컨테이너는 그 데이터로 동작하도록 설계하는 것
  • 컨테이너 자체는 상태가 없고 상태를 결정하는 데이터는 외부로부터 제공받음
  • 컨테이너가 삭제돼도 데이터는 보존되므로 스테이트리스한 설계는 도커를 사용할 때 매우 바람직한 설계

'인프라' 카테고리의 다른 글

9. DockerFile  (0) 2021.03.14
7. 도커 이미지  (0) 2021.03.03
4. 도커 네트워킹  (0) 2021.03.02
2. 도커 기본 명령어  (0) 2021.03.02
1. 도커란  (0) 2021.02.21