환경변수 : OS에서 사용하는 변수

 

1. 목표

  • MySQL 컨테이너를 설치 (OS는 우분투)
  • MySQL 컨테이너가 설치된 OS에 환경변수를 설정
  • MySQL에서 설정된 환경변수를 사용

2. 작업 디렉토리 위치 (ex05)

/docker/docker_files/lecture/docker_lab/ex05

 

3. 도커파일 생성, 빌드 및 컨테이너 생성

FROM mysql

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

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

마지막의 CMD는 캐릭터셋을 UTF-8로 설정하기 위함.

 

도커파일 빌드하기

docker build -t mysql-images ./

 

MYSQL 컨테이너 생성

docker run -d -p 3307:3306 --name mysql-container mysql-images

mysql은 기본 3306포트를 사용하는데 3307로 요청이오면 3306으로 포트포워딩 해주자.

 

4. DB접속기로 검증하기(DBeaver, SQL yog, Mysql Bench 등)

컨테이너가 제대로 실행된 것을 확인했다면 DB 접속기로 잘 접속되는지 확인해보자.

나는 SQL Yog를 사용함~

IP와 Dockerfile에서 설정한 MYSQL_USER, MYSQL_PASSWORD에 입력한 부분을 입력하고 포트로 3307(3306으로 포워딩)을 입력 후 테스트 연결에 성공하면 끝!

 

UTF-8 설정이 제대로 되었는지 SQL yog에서 아래의 SQL문을 실행시켜보자.

 SHOW VARIABLES LIKE 'character_set_%';

value가 utf8mb3 가 나오면 된다.

 

5. 환경변수 확인하기

Dockerfile에서 ENV 로 설정한 OS 환경변수가 제대로 설정되었는지 알아보기 위해 mysql 컨테이너에 접속해보자.

docker exec -it [CONTAINER ID] bash

 

터미널에 정상적으로 접속 되었다면 아래의 명령어를 입력하여 Dockerfile에서 ENV 명령어로 설정한대로 값이 제대로 나오는지 확인하면 된다.

echo $MYSQL_USER
echo $MYSQL_PASSWORD

 

6. Mysql 볼륨

mysql 컨테이너는 자동으로 볼륨을 하나 사용한다. Mysql의 데이터가 해당 볼륨에 저장되는데 문제는 컨테이너가 재실행되면 같은 볼륨을 사용하는 것이 아니라 기존 볼륨을 삭제 후 새로운 볼륨이 생성되어버린다. 그래서 기존 데이터는 모두 지워지게 된다.

 

첫 번째 해결책

이 문제를 해결하기 위해서는 2가지 해결책이있는데 그 중 첫 번째는 HOST에 볼륨을 연결하면 된다.

이는 docker hub의 mysql 공식 사이트에도 있는 내용이다.

 

볼륨연결을 위한 호스트OS에 디렉토리 만들기

디렉토리명: mysql-volume

/docker/docker_files/lecture/docker_lab/ex05/mysql-volume

mkdir mysql-volume

 

 

볼륨 옵션으로 호스트 디렉토리 연결하여 실행

docker run -d -p 3307:3306 -v /home/docker/docker_files/lecture/docker_lab/ex05/mysql-volume:/var/lib/mysql --name mysql-container mysql-images

 

정상적으로 실행 되었다면 mysql-volume 디렉토리에 들어가보면 각종 데이터 파일들이 있는 것을 볼 수 있다.

 

두 번째 해결책

이름이 있는 볼륨 생성하여 실행하기 

위에서 실습했던 내용을 초기화 후 진행 (remove.sh)

 

이 방법은 귀찮게 따로 디렉토리를 만들어도 되지 않아도 되고 그냥 -v 옵션에서 이름만 설정해주면 된다!

docker run -d -p 3307:3306 -v mysql-test-volume:/var/lib/mysql --name mysql-container mysql-images

 

해당 방법으로 실행하면 볼륨을 보는 명령어로 보면 볼륨이 생성된 것을 확인할 수 있다.

docker volume ls

 

이름있는 볼륨 으로 만들었을 때 데이터가 제대로 보관되는지 검증하기

 USE ssardb;
 
 CREATE TABLE person(
	id INT PRIMARY KEY,
	NAME VARCHAR(100)
 );
 
 INSERT INTO person VALUES (1, 'ssar');
 
 SELECT * FROM person;

1. 이름 있는 볼륨으로 만들어진 컨테이너에 sql yog로 접속해서 위의 sql 문을 차례대로 실행한다.

2. 도커 컨테이너 중지 및 삭제(remove.sh)

3. 아래의 명령어로 다시 컨테이너를 생성

docker run -d -p 3307:3306 -v mysql-test-volume:/var/lib/mysql --name mysql-container mysql-images

4. 다시 sql yog로 새로 생성된 컨테이너에 접속하여 SELECT * FROM person; 실행 후 제대로 나오는지 확인!

+ Recent posts