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