환경변수 : 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; 실행 후 제대로 나오는지 확인!
'코딩이야기 > Docker' 카테고리의 다른 글
도커 입문 22강 - 도커컴포즈 튜토리얼 따라해보기 (0) | 2024.07.17 |
---|---|
도커 입문 21강 - 도커컴포즈 기본 (0) | 2024.07.02 |
도커 입문 19강 - docker file step7 - nginx 게이트웨이 사용하기 (0) | 2024.07.01 |
도커 입문 18강 - docker file step6 - nginx를 로비 서버로 활용하기 (0) | 2024.07.01 |
도커 입문 17강 - docker file step5 - nginx설정 복사하기 (0) | 2024.06.29 |