docker file - MySQL 환경변수와 볼륨연결
MySQL 환경변수 설정 및 실행
Dockerfile
FROM mysql
ENV MYSQL_USER=jun
ENV MYSQL_PASSWORD=jun1234
ENV MYSQL_ROOT_PASSWORD=root1234
ENV MYSQL_DATABASE=jundb
CMD ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
실행
원격접속
그리고 utf8 설정이 잘 되었는지 확인하기 위해 다음 명령어를 통해 확인해본다.
SHOW VARIABLES LIKE 'character_set_%'
환경변수 확인
MySQL 볼륨
현재 Docker Desktop을 확인해보면 다음과 같이 볼륨이 생성된 것을 확인할 수 있다.
MySQL 컨테이너가 생성되면 임의의 볼륨이 하나 생성된다.
- 컨테이너 종료시 삭제된다.
- 컨테이너를 새로 생성할 때마다 기존의 볼륨이 아닌 새로운 볼륨을 생성해서 사용한다.
이러한 문제를 해결하기 위해 호스트 시스템에 임의의 폴더를 생성하고 MySQL 컨테이너가 해당 폴더를 사용하도록 한다.
MySQL 이미지 공식 문서를 살펴보면 다음과 같은 문구가 존재한다.
호스트에 볼륨 사용
폴더 생성
데이터를 저장할 mysql-volume 폴더를 생성한다.
MySQL 이미지 공식 문서를 참고해 생성한 mysql-volume 폴더를 도커 컨테이너의 /var/lib/mysql 폴더의 볼륨으로 연결한다.
그리고 mysql-volume 폴더를 확인해보면 다음과 같이 정상적으로 설정된 것을 확인할 수 있다.
이름있는 볼륨 사용
이름 있는 볼륨을 사용하면 기존의 볼륨처럼 컨테이너가 종료되어도 삭제되지 않고 새로 컨테이너를 실행시켜도 새로 생성되지 않는다.
- 임의의 이름('mysql-volume')으로 볼륨을 생성하였다.
'mysql-volume'이라는 이름의 볼륨이 새로 생성된 것을 확인할 수 있다.
그리고 다음과 같이 데이터베이스에 임의의 데이터를 넣고 데이터가 유지되는지 확인한다.
SHOW VARIABLES LIKE 'character_set_%';
use jundb;
create table person(
id int primary key,
name varchar(100)
);
insert into person(id, name) values(1, 'jun');
select * from person;
mysql 컨테이너를 삭제한다.
그런데 이전 임의로 생성된 볼륨과는 달리 이름이 있는 볼륨은 컨테이너가 삭제되어도 그대로 유지되는 것을 확인할 수 있다.
mysql 컨테이너를 새로 생성한 뒤 데이터베이스에 데이터가 그대로 남아있는지 확인해본다.
데이터가 그대로 존재한다.
'Docker' 카테고리의 다른 글
Docker Compose - Spring & MySQL (0) | 2023.06.26 |
---|---|
Docker-Compose 기본 (0) | 2023.06.25 |
docker file - nginx 게이트웨이 사용하기 (0) | 2023.06.25 |
docker file - nginx를 로비 서버로 활용하기 (0) | 2023.06.25 |
docker file - nginx 설정 복사 (0) | 2023.06.24 |