Docker - MySQL

2경빈·2025년 5월 18일

Docker

목록 보기
5/6

MySQL 환경변수와 볼륨연결

도커에서 실행되는 컨테이너는 기본적으로 일회성 환경이다.
컨테이너를 중지하거나 삭제하면, 그 안에 저장되어 있던 데이터도 함께 사라지게 된다.

MySQL 컨테이너의 경우, 데이터베이스는 /var/lib/mysql 경로에 파일 형태로 저장된다.
그러나 이 경로는 컨테이너 내부의 공간이기 때문에, 컨테이너가 삭제되면 해당 데이터도 모두 유실된다.
즉, 단순히 컨테이너 하나를 재시작했을 뿐인데도 모든 데이터가 초기화될 수 있는 위험이 있다.

이러한 문제를 해결하기 위해 사용하는 것이 바로 **도커 볼륨(Volume)**이다.
볼륨은 컨테이너 외부, 즉 호스트 운영체제의 파일 시스템에 데이터를 저장할 수 있는 공간이다.

MySQL 컨테이너에서 /var/lib/mysql 경로를 도커 볼륨과 연결하면, 실제 데이터는 호스트 측 디스크에 저장되며 컨테이너는 그 데이터를 마치 자신의 것처럼 사용하게 된다.
덕분에 컨테이너를 삭제하거나 재생성하더라도 데이터는 그대로 유지된다.

이처럼 도커 볼륨은 컨테이너의 유연성과 일회성은 유지하면서도, 데이터의 지속성(persistence)은 보장할 수 있는 매우 중요한 기능이다. 특히 데이터베이스처럼 중요한 정보를 다루는 서비스에서는 필수적으로 사용되어야 한다.

Dockerfile

FROM mysql

ENV MYSQL_USER=ssar
ENV MYSQL_PASSWORD=ssar1234
ENV MYSQL_ROOT_PASSWORD=root1234
ENV MYSQL_DATABASE=ssardb

CMD ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]

터미널

docker build -t mysql-images .
docker run -d -v C:/Docker/ex4/mysql-volume:/var/lib/mysql -p 3307:3306 --name mysql-container mysql-images
C:\Users\lkb>docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                               NAMES
498dbc18eed8   mysql-images   "docker-entrypoint.s…"   11 seconds ago   Up 11 seconds   33060/tcp, 0.0.0.0:3307->3306/tcp   mysql-container
C:\Users\lkb>docker exec -it 498d bash
bash-5.1# ls
afs  boot  docker-entrypoint-initdb.d  home  lib64  mnt  proc  run   srv  tmp  var
bin  dev   etc                         lib   media  opt  root  sbin  sys  usr
bash-5.1# echo $MYSQL_USER
ssar

volume 이름 지정

docker run -d -v mysql-volume:/var/lib/mysql -p 3307:3306 --name mysql-container mysql-images
profile
eggs before hatching

0개의 댓글