mysql dockerize(2) - mysql container에 볼륨 설정하기

Bran·2021년 11월 13일
2

mysql dockerize

목록 보기
2/2
post-thumbnail

계속 쓸 수 있는 DB 만들기

일반적으로 도커 컨테이너는 프로세스가 종료되면 내부에서 일어났던 변경사항들은 날아갑니다. 재부팅이라도 하는 날에는 그 동안 컨테이너에서 생성했던 데이터들은 없던 일이 되죠. 물론 도커는 볼륨이라는 개념으로 데이터를 유지할 수 있는 기능을 제공합니다.
mysql 이미지는 이 기능을 내부적으로 사용하고 있어서, 컨테이너를 생성할 때 볼륨을 자동 생성합니다. 그래서 컨테이너를 실행하고 정지하는 것을 반복해도 데이터가 유지됩니다. 하지만 이 렇게 만들어진 볼륨은 컨테이너가 아예 삭제되어 버리는 경우 그 데이터를 보존할 수가 없습니다.
저는 몇 번 재설치를 하더라도 데이터는 별도로 관리할 수 있었으면 좋겠어요.

볼륨

공식 문서에는 이렇게 쓰여있습니다.

Volumes are the preferred mechanism for persisting data generated by and used by Docker containers.
While bind mounts are dependent on the directory structure and OS of the host machine, volumes are completely managed by Docker.

데이터를 유지하기 위한 기본 메커니즘이라고 합니다. Bind mount라는 운영 체제의 파일 시스템을 컨테이너에 마운트 해 쓰는 기능이 있는데, 볼륨은 그 보다 더 폭넓은 기능을 제공하고, 관리를 도커 내에서 하기 때문에 도커를 실행하는 운영체제에 영향을 받지 않는다는 장점이 있습니다.

볼륨 확인

먼저 기본으로 생성되는 볼륨을 확인해 보겠습니다.

$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql 
e94b0ab7eed5b1d147147ffe5b170d1520ee680f7b3ab7511e4e0fb4fb9a1925

$  docker volume list
DRIVER    VOLUME NAME
local     b97c5432ff0a86802d2cbca69484448f1ecd5c530ddcad7e4b7eea3c6ec2e8c5

docker volume list로 볼륨의 리스트를 확인하면 임의의 해시로 설정된 볼륨이 생성된 것을 확인할 수 있습니다.
그럼 컨테이너를 삭제하고 다시 실행해 보겠습니다.

$ docker stop mysql
mysql

$ docker rm mysql
mysql

$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql
456be35825bc8b1b7d2a4494c8b160ab578730f31a625a775abea271b036eae7

$ docker volume list
DRIVER    VOLUME NAME
local     6765f342d98d3f274a0d7c3b137e07e48e9c153764e372707b6d987018498e6d
local     b97c5432ff0a86802d2cbca69484448f1ecd5c530ddcad7e4b7eea3c6ec2e8c5

아까 생성됐던 볼륨은 지워지지 않고 새로운 볼륨이 생성된 것을 확인할 수 있습니다. 지금은 볼륨 리스트로만 확인해봤지만 직접 컨테이너 안에 들어가서 데이터를 생성해보며 테스트를 해봐도 컨테이너를 삭제 후 생성하면 기존의 데이터가 없음을 확인할 수 있습니다.

볼륨에 이름 부여하기

컨테이너를 실행할 때 -v {볼륨 이름||로컬 경로}:{컨테이너 안 경로}또는 --volume={볼륨 이름||로컬 경로}:{컨테이너 안 경로} 옵션을 부여하여 볼륨을 직접 설정할 수 있습니다. mysql 이미지 안에서 볼륨은 /var/lib/mysql에 마운트 되어야 하기 때문에, 해당 경로와 임의의 이름으로 옵션을 부여합니다. 아래에서는 이름을 mysql-volume으로 설정했습니다.

$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=1234 -v mysql-volume:/var/lib/mysql -d mysql 

myslq-volume이라는 이름의 볼륨을 mysql이라는 이름의 컨테이너에 쓰기로 했으니, 이제 다시 볼륨 목록을 확인해 보겠습니다.

$ docker volume list
DRIVER    VOLUME NAME
local     6765f342d98d3f274a0d7c3b137e07e48e9c153764e372707b6d987018498e6d
local     b97c5432ff0a86802d2cbca69484448f1ecd5c530ddcad7e4b7eea3c6ec2e8c5
local     mysql-volume

볼륨이 생성되었습니다. 이제 이름이 존재하는 볼륨을 사용하니까, 컨테이너를 계속 삭제해도 볼륨을 직접 제거하지 않는 한 볼륨 옵션을 명시하여 동일한 볼륨을 계속 쓸 수 있습니다.

볼륨 삭제하기

불필요한 볼륨들은 삭제합시다.

  1. 컨테이너를 삭제할 때 같이 삭제하는 방법으로, 컨테이너 삭제 명령에 -v옵션을 줄 수 있습니다.
$ docker rm -v mysql
  1. 위에서 했던 것과 같이 볼륨 리스트를 보고 직접 해시네임을 선택해 삭제할 수도 있습니다.
$ docker volume rm 6765f342d98d3f274a0d7c3b137e07e48e9c153764e372707b6d987018498e6d
  1. 로컬에 생성되어있고 컨테이너에 연결되지 않은(==dangling상태의) 모든 볼륨을 다 삭제하는 명령어도 있습니다.
$ docker volume prune

시리즈의 다음 글에서는, 로컬에서 사용하던 데이터 베이스를 그대로 사용하기 위해서 dump파일을 database에 밀어넣는 방법을 알아보겠습니다.

profile
Bran's codeverse

0개의 댓글