[Docker] 도커 볼륨

728x90

immutable 인프라 스트럭쳐 → 컨테이너는 이미지를 가지고 찍어내는 것이기 때문에 변하지 않는다.

데이터베이스는 immutable 인프라 스트럭쳐로 구현할 수 없다.

컨테이너를 지우면 DB 의 내용이 사라지기 때문이다.. 그래서 매번 컨테이너를 삭제하기 전에 DB 내용을 백업하고 새롭게 DB 컨테이너를 만들었을 때 백업 내용을 업로드해야 하나..?

컨테이너 라이프 사이클과 별개의 스토리지를 만들어야 한다. 컨테이너가 지워지더라도 스토리지는 삭제되지 않게..이것을 볼륨이라고 한다.

볼륨은 컨테이너를 지워도 삭제되지 않는다.

AWS 로 예를 들면 EC2 인스턴스에 EBS 볼륨을 붙이는 것이라고 생각하면 편하다.

이미지의 Config.Volumes 선언되어 있으면, 자동으로 Docker 볼륨이 생성되고 마운트된다.

수동 볼륨 마운트

Bind 방식과 Volume 방식이 존재한다.

Bind 볼륨은 도커 데몬이 관리하지 않는다. Volume 방식은 도커 데몬이 관리한다.

볼륨 == 읽기 쓰기가 가능한 빈 저장소를 생성

빈 볼륨 생성

$ docker volume create <Name>

볼륨 목록

$ docker volume ls

볼륨 삭제

$ docker volume rm <Name>

사용하지 않는 볼륨 삭제

$ docker volume prune

볼륨을 사용한 컨테이너

$ docker run -v <Volume_Name>:<MountPoint>:[ro] <Image>

지정한 볼륨 이름이 없으면 생성

docker run --name wp-db -d -e MYSQL_ROOT_PASSWORD=P@ssw0rd \\
-e MYSQL_DATABASE=wordpress \\
-e MYSQL_USER=wpadm \\
-e MYSQL_PASSWORD=P@ssw0rd \\
--restart always --cpus 0.5 --memory 1000m \\
-v wp-db-vol:/var/lib/mysql mysql:5.7

바인드 방식 마운트

바인드 방식은 컨테이너에게 제공할 볼륨을 호스트의 특정 디렉토리로 지정하는 방식

호스트의 디렉토리를 컨테이너에게 제공: 미리 데이터를 채워서 제공 가능하다.

docker run -d -v <ABSOLUTE_PATH>:<MOUNTPOINT>[:ro] <IMAGE>

디렉토리 전체 마운트

볼륨 자체를 마운트하는 경우에는 해당 디렉토리로 덮여씌워진다.

docker run -d -v /tmp/docker/contents:/usr/local/apache2/htdocs httpd

파일 마운팅

파일 자체도 마운트할 수 있다. 보통 설정 파일을 넣기 위해 사용한다.

how 🌙  ~
docker run -d -v /tmp/docker/contents/hello.html:/usr/local/apache2/htdocs/hello.html httpd

Mac 에서 마운트할 때 Bind 방식을 사용하여 볼륨을 생성

volume create 로 볼륨을 생성하지 않고 mkdir 로 디렉토리를 생성한 후 마운트 해준다.

how 🌙  ~
mkdir /tmp/mysql
how 🌙  ~
docker run --platform linux/amd64 -d --name mysql -e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_DATABASE=wordpress -v /tmp/docker/mysql:/var/lib/mysql mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
688e7e082a68f000f658e4a9076ae541cf16c098433dc1ebcec2f0aaccdd0775

사용 용도

  • 바인드: 설정 파일, 기타 파일을 제공하기 위한 목적
  • 볼륨: 데이터를 저장하기 위한 빈 디렉토리를 제공하기 위한 목적
728x90