오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-14 05:39
관리 메뉴

우노

[Docker] Docker를 이용한 MySQL 설치 및 접속 본문

DevOps/Docker

[Docker] Docker를 이용한 MySQL 설치 및 접속

운호(Noah) 2020. 11. 8. 14:37
  • 이 글에선 docker를 이용한 MySQL 설치 및 접속 방법에 대해 알아볼 것이다.
  • Docker가 설치되는 환경은 EC2 라고 가정한다.

docker 설치

sudo yum update -y

sudo yum install docker -y

sudo service docker start

sudo usermod -a -G docker ec2-user

# 재접속

MySQL 이미지 다운

# 최신버전의 MySQL 이미지 다운로드
docker pull mysql

# 가져온 이미지 확인
docker images

MySQL 이미지를 사용해 컨테이너 생성

# mysql container DB를 저장할 저장소 
mkdir mysqldata

# MySQL 이미지를 사용해 컨테이너 생성
docker run -d -p 3306:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=1234 -v ~/mysqldata/:/var/lib/mysql mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

# 컨테이너 생성 확인
docker ps
  • -d
    • 백그라운드모드로 실행
  • -p 3306:3306
    • host의 3306 포트를 container의 3306 포트로 매핑한다는 뜻이다.
  • --name mysql-container
    • 컨테이너 이름을 지정한다.
  • -e MYSQL_ROOT_PASSWORD=1234
    • root 비밀번호를 생성한다.
    • mysql 컨테이너 내부에서 mysql에 접속할 때 사용된다.
    • 이 단계는 필수이므로 요구 조건을 만족하는 비밀번호를 입력 할 수 있도록 한다.
  • -v ~/mysqldata/:/var/lib/mysql
    • 호스트의 ~/mysqldata/ 디렉토리를 컨테이너의 /var/lib/mysql 디렉토리로 마운트
    • docker에 mysql과 같은 DB를 설치하는 경우, 컨테이너 삭제와 함께 데이터도 날라가므로, 저장소는 반드시 외부 저장소를 사용한다.
  • --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    • 위 명령어 없이 실행한다면 mysql db를 생성하여 개발 시 한글문제가 발생 할 것이다.
    • 한글이 깨지지 않도록 설정하려면 위 인자값을 넣어주어야 한다.

MySQL 컨테이너 접속

# MySQL 컨테이너 생성이 정상적으로 완료 되었다면, Container에 접속한다.
docker exec -it mysql-container bash

# Container 콘솔에 접근되었으면 MySQL에 접속을 하여 정상적으로 실행되고 있는지 확인한다.
# password는 mysql container 생성 시 옵션으로 주었던 password를 입력하면 된다.
mysql -u root -p

외부에서 MySQL에 접근할 수 있도록, MySQL 컨테이너 내부에 사용자 생성 후 접근 권한 부여

# 테스트를 위한 database 추가
create database testdatabase;

# 추가 된 database 확인
show databases;
# 이름 : testuser , password : "5678"인 user를 생성해줍니다.
CREATE USER 'testuser'@'%' IDENTIFIED BY '5678';

# 외부에서 접속 할 수 있도록 권한을 부여하도록 합니다.
GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'%';

# 변경된 권한을 적용합니다.
flush privileges;

quit

EC2 인바운드 규칙 수정

  • 인스턴스 인바운드 규칙을 수정하여 외부 → 인스턴스 → MySQL 컨테이너로 접속할 수 있도록 합니다.
  • 인스턴스 선택 → 보안 → 보안 그룹 → 인바운드 규칙 편집 → 규칙 추가 → 규칙 저장
    • 유형 : 사용자 지정 TCP
    • 포트 : 3306
    • 소스 : 위치 무관

외부에서 MySQL 컨테이너에 접근해보기

  • 로컬에서 EC2 MySQL 컨테이너에 접근해보기

      cd /usr/local/mysql/bin
    
      ./mysql -h 13.230.162.204 -u testuser -p
    
      # 이전에 생성한 database 확인해보기
      show databases;
  • MySQL Workbench를 사용한다면, Manager Connections에 Hostname, Port 를 설정하여 접근할 수 있다.

Comments