Docker 실습-3 MySQL 컨테이너

Kyoungchan Cho·2023년 1월 2일
0

Docker

목록 보기
3/5
post-thumbnail

intro

동빈나님의 도커 강좌를 실습하면서 남긴 진행 기록입니다.

도커 컨테이너로 MySQL을 실행해보자 (일반적으로는 컨테이너를 MySQL 서버로 활용하지 않는다.)


1. MySQL 컨테이너 사용

기존 인스턴스에 모든 이미지와 컨테이너를 삭제하고 시작한다.

인스턴스에 MySQL 클라이언트를 설치한다.
sudo apt install mysql-client-core-5.7

MySQL 이미지는 도커 허브에 존재하므로 바로 실행할 수 있다.
서버의 9876포트와 3306포트를 연결하고 환경변수로 MySQL Root 비밀번호를 설정해준다.
docker run -d -p 9876:3306 -e MYSQL_ROOT_PASSWORD=password mysql:5.6

MySql 컨테이너 생성 확인

해당 컨테이너에 접속하고 bash 명령어를 실행할 수 있도록 한다.
docker exec -it 054f76bccc17 /bin/bash

설정한 비밀번호로 MySQL에 접속한다.
mysql -u root -p

테스트 하기 위한 DB를 만들고 확인해준다.
CREATE DATABASE TEST;
SHOW DATABASES;

exit으로 컨테이너 밖으로 나간 후에 도커 컨테이너의 세부 정보를 확인해서 IPAddress를 확인한다.
docker inspect 054f76bccc17

컨테이너에 포함돼있는 MySQL에 접속한다.
mysql -u -root -p --host 172.17.0.2 --port 3306

컨테이너 IP로 접속시 access denied 에러 발생시 권한 부여(현재 user가 '-root')
ERROR 1045 (28000): Access denied for user '-root'@'172.17.0.1' (using password: YES)

  1. docker exec -it <CONTAINER_ID> mysql -u root -p
  2. CREATE USER 'user'@'172.17.0.1' IDENTIFIED BY 'password';
  3. GRANT ALL PRIVILEGES ON *.* TO '-user'@'172.17.0.1' WITH GRANT OPTION;
  4. flush privileges; ,exit
위에서 만든 DB가 그대로 있는 것을 확인할 수 있다.

그리고 MySQL포트와 연결한 9876포트로 호스트를 자기 자신으로 하여 접속할 수 있다.
mysql -u -root -p --host 127.0.0.1 --port 9876

'test'유저를 만들어 관리자 권한 주기
CREATE USER 'test'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%';
FLUSH PRIVILEGES;
exit

mysql에서 나와 컨테이너를 재시작한다.
docker restart 054f76bccc17

EC2 인바운드 규칙에서 9876 포트를 열어준다.

워크 벤치를 통해 컨테이너에 있는 MySQL에 접속해본다
EC2 인스턴스의 퍼블릭 IP를 host에 넣어주고 연결한 포트 9876을 설정해준다.
관리자 권한을 준 유저 test와 설정한 비밀번호로 접속한다.

스키마에 아까 만든 TEST DB를 확인할 수 있다.




참고)
https://www.youtube.com/watch?v=gmE_8oSZ-mo&list=PLRx0vPvlEmdChjc6N3JnLaX-Gihh5pHcx&index=5
https://medium.com/tech-learn-share/docker-mysql-access-denied-for-user-172-17-0-1-using-password-yes-c5eadad582d3

profile
https://lying-lettuce-69f.notion.site/KyoungchanCho-Blog-f9f150b9e3be4467a67cf2a21932650d (게시글 자동 비공개 현상으로 일단 노션으로 이동합니다. 소개에서 URL 링크 클릭으로 연결됩니다.)

0개의 댓글