Server/Docker

[Docker Mac] MySQL Community Server container 실행하기

hyeseo 2022. 9. 26. 14:29

 💡 MySQL Community Server container 실행 및 설정 방법 입니다.


▼ 목차

☘️ MySQL 컨테이너(container) 실행

☘️ MySQL Community Server 설정

☘️ MySQL container root 권한으로 접속하기

☘️ MySQL Community Server 설정

  • MySQL root 접속
  • root 비밀번호 변경
  • 계정 추가, 권한 부여, 변경사항 반영

☘️ application.yml 수정

☘️ MySQL Workbench 연결

☘️  프로젝트 Test

 

▼ 개발환경

더보기

MacBook Pro M1 


### Programming language - java-1.8 

### Framework
- Spring Framework : SpringBoot 2.7.3
- Persistence Framework : JPA - Hibernate

### Build Tool
- gradle 7.5

### WAS
- 내장 Tomcat

### DB
- MySql - 8.0.30

### IDE
- IntelliJ IDEA (Ultimate Apple Silicon 2022-02)

### Library
- Lombok - 1.18.24

 

 

🌱 사전준비


📌  Docker 회원가입  https://hub.docker.com/

📌  Docker Desktop (Mac) 설치   https://tira-0.tistory.com/218

 

☘️ MySQL container 실행


도커 허브 공식 이미지는 내려받지 않아도 컨테이너 실행 시 자동으로 내려받을 수 있습니다.

$ docker run -d -p 3309:3306 \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
  --name mysql \
  mysql:8.0.30
  • -p 3309:3306 : <컨테이너 포트번호>:<서버 포트번호> - 컨테이너 포트 번호는 외부에서 접속할 때 노출되는 포트번호 입니다.
  • -e MYSQL_ALLOW_EMPTY_PASSWORD=true : 비밀번호 없이 root 계정으로 접속 할 수 있습니다.
  • mysql:8.0.30 → 최신 MySQL 버전으로 설치해야합니다.

[MySQL 8.0.30 이미지 내려받기(Image pull) 및 컨테이너(container) 실행(run)]

# 이미지 조회
$ docker images
REPOSITORY          TAG       IMAGE ID       CREATED       SIZE
mysql               8.0.30    5e229524f286   11 days ago   494MB
# 실행중인 컨테이너 조회
$ docker ps

 

☘️  MySQL container root 권한으로 접속하기


💡 컨테이너 root 권한 접속 방법은 <CONTAINER ID> 와 <CONTAINER NAMES> 2가지 방법이 있습니다.

 

📌 MySQL container 의 <CONTAINER ID> 와 <CONTAINER NAMES> 조회

# 실행중인 컨테이너 조회
$ docker ps

[실행중인 컨테이너 조회 결과 화면]

 

📌 MySQL container root 접속방법

 

1. < CONTAINER ID >로 접속

$ docker exec -it --user root <CONTAINER ID> bash

❯ docker exex -it --user root bcc69c86049e bash
bash-4.4#

2. < CONTAINER NAMES > 로 접속

$ docker exec -it --user root <CONTAINER NAMES> bash

❯ docker exec -it --user root mysql bash
bash-4.4#

 

 

☘️  MySQL Community Server 설정


📌  MySQL Community Server - root 접속

#MySQL Community server root로 접속

$ mysql -uroot

 

  • -e MYSQL_ALLOW_EMPTY_PASSWORD=true비밀번호 없이 root 계정으로 접속 할 수 있습니다.

 

[MySQL Community server root로 접속 성공 화면]

 

📌  root 비밀번호 변경

alter user 'root'@'localhost' identified by '비밀번호';
  • root 계정 비밀번호가 없기 때문에 설정합니다.

[root 계정 비밀번호 변경 쿼리 실행 결과]

 

📌  root 권한조회 

select host,user,authentication_string from mysql.user;

[권한 조회 쿼리 실행 결과]

  • root 계정에 부여된 권한이 없는걸 확인했습니다.

 

📌  계정 추가, 권한 부여, 변경사항 반영

  • '%'는 외부접속을 허용합니다.
  • docker의 기본 gateway는 172.17.0.1로 설정되어 있습니다.
  • 도커 ID로 접속하기 위해 172.17.0.1 계정을 생성합니다.
# 계정 생성
CREATE USER 'id'@'localhost' IDENTIFIED BY 'password';
CREATE USER 'id'@'%' IDENTIFIED BY 'password'; // 외부접속을 허용합니다.
CREATE USER 'admin'@'172.17.0.1' IDENTIFIED BY 'password'; // 도커 기본 gateway

# 권한 부여
grant all privileges on *.* to 'admin'@'localhost';
grant all privileges on *.* to 'admin'@'%';
grant all privileges on *.* to 'admin'@'172.17.0.1';

# 변경사항 반영
flush privileges;

# 권한 조회
select host,user,authentication_string from mysql.user;

 

[쿼리 실행 결과]

 

권한 조회를 합니다.

select host,user,authentication_string from mysql.user;

 

[권한 조회 쿼리 실행 결과]

※% 계정이 이상하게 표기되어 다시 만들었습니다.

 

# 사용자 삭제 쿼리
drop user 'admin'@'%';

 

다시 계정 생성, 권한부여, 변경사항 반영 후 권한 조회를 했습니다.

% <- 로 잘 조회됩니다.

 

 

설정이 끝났으니 MySQL Community Server 빠져 나갑니다.

# MySQL Community Server 빠져 나가기
quit;

 

 

☘️ MySQL Workbench 연결


💡도커 컨테이너로 실행한 MySQL Community Server와 연결되는지 확인 합니다.

 

MySQL workbench 좌측 상단 [Database] - [Manage Connections ..] 를 클릭합니다.

 

 

좌측 하단 [New] 를 클릭합니다.

 

 

아래 내용을 입력합니다.

  1. Connection Name : 연결 이름을 입력합니다.
  2. Hostname : IP는 127.0.0.1 을 입력합니다.
  3. Port : 포트번호는 3309를 입력합니다.
  4. Username: 추가한 사용자 아이디를 입력합니다.

  • 사용자 비밀번호를 입력한 후 OK를 클릭합니다.

우측 하단 [Test Connection]을 클릭합니다.

 

 

[연결 성공 팝업]

 

 

연결완료 후 Workbench에 접속할 수 있는 화면이 추가됩니다.

 

 

CREATE DATABASE `myliket3`;

use myliket3;

스키마를 생성합니다.

 

 

제 프로젝트는 JPA 라 없는 테이블은 자동생성하여 스키마만 생성했습니다.

 

 

 

프로젝트 Test


💡 application.yml 의 MySQL 설정 수정 후 local 환경에서 실행되는지 확인 합니다.

 

📌 application.yml 수정

# DB Source URL
spring.datasource.url=jdbc:mysql://127.0.0.1:3309/myliket3?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&defaultFetchSize=1000&useSSL=false&allowPublicKeyRetrieval=true
# DB username
spring.datasource.username=[MySQL 사용자 아이디]
# DB password
spring.datasource.password=[MySQL 사용자 비밀번호]

 

프로젝트를 실행합니다.

 

[프로젝트 실행 화면]

 

정상적으로 연결 성공하여 table까지 생성된 걸 확인할 수 있습니다.