본문 바로가기
새싹 한국정보보호산업협회 교육/교육

[도커] docker로 mysql 연결 후 환경변수, volume 옵션 사용하기

by 하루하루 나아가기 2024. 8. 19.
반응형

nginx를 실행 했을 때 사용했던 옵션-d와 -p를 복습해보자.

 

docker run -d -p 80:80 nginx

 

-d는 데몬화를 의미하고 -p는 포트바인딩을 의미한다. 

 

mysql을 연결하기 위해서는 -e, -v 옵션들을 더 알아야 한다. 차근차근 알아보자.

 

nginx와 마찬가지로 mysql도 위와 같은 방법으로 run을 하고 로그를 확인하면 다음과 같은 에러가 발생한다. 

docker run -d -p 3306:3306 mysql

docker logs <컨테이너ID>

 

 

에러 메시지를 보면 환경변수에 ROOT 비밀번호를 설정해야 한다. 

 

이때 알아야 하는 옵션이 -e이다. 여기서 e는 environment variable이다. 

 

옵션 -e를 넣어서 다시 해보자. 

 

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mysql

sudo apt install mysql-client-core-8.0

mysql -h 127.0.0.1 -u root -p

 

위와 같은 순서로 실행하면 mysql에 로그인이 가능하다. 

 

이렇게 하면 문제점이 있다. 데이터를 저장하고 컨테이너를 삭제하면 데이터가 남아 있지 않는다. 컨테이너를 삭제해도 데이터를 사용하고 싶으면 -v, volume 옵션을 사용해야 한다. 즉, 상태관리가 필요한 데이터들은 따로 관리 하는 것이 좋다. 

 

-v /home/user1/my-database:/var/lib/mysql 

 

:을 기점으로 앞에는 호스트os에 저장하는 것이다. 뒤에는 컨테이너안 저장소로 생각하면 된다. 

 

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 -v /home/user1/my-database:/var/lib/mysql
mysql

 

이렇게 실행하면 컨테이너를 지우고 다시 만들어도 저장했던 데이터들이 남아있다. mount 개념이라고 생각하면 된다. 

 

이때 불편한점이 또 있다. 

호스트os에 저장했던 폴더를 마음대로 못지운다는 것이다. 물론 sudo를 이욯하면 가능하다. 

 

docker에 volume에 my-database을 만들면 된다. 

docker volume ls

docker volume create my-database

 

docker volume ls는 volume 목록을 확인하는 것이고, create는 volume을 생성하는 것이다. 이렇게 설정해 놓으면 다음과 같이 명령어를 변경할 수 있다. 

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 -v my-database:/var/lib/mysql mysql

 

my-databaase 폴더 위치가 궁금하면 다음과 같이 명령어를 실행하면 된다. 

sudo ls -al /var/lib/docker/volumes

 

mysql을 연결하면서 2가지 옵셥을 더 배웠다. 정리해 보자. 

 

docker run

-d 데몬화한다.

-p 포트바인딩 한다.

-e 환경변수를 정의한다.

-v 볼륨바인딩을 한다.(데이터를 유지하기 위해) - mount 개념

mysql

 

가상화, 리눅스, 도커에 대해 공부하면서 컴퓨터와 조금씩 더 친해지는 것 같다.

반응형

댓글