내맘대로 개발 일기/뽀모로 Do!

[인프라 구축] Docker로 MySQL 데이터베이스 구축하기

bu119 2024. 6. 7. 15:00
728x90
반응형

 

Docker에 MySQL 컨테이너 띄우기

1. Lightsail에서 MySQL을 연결할 서버 포트 열기

 

2. Docker Hub에서 MySQL Image 다운받기

https://hub.docker.com/_/mysql

 

mysql - Official Image | Docker Hub

Quick reference Supported tags and respective Dockerfile links 8.4.0, 8.4, 8, lts, latest, innovation, 8.4.0-oraclelinux9, 8.4-oraclelinux9, 8-oraclelinux9, lts-oraclelinux9, oraclelinux9, innovation-oraclelinux9, 8.4.0-oracle, 8.4-oracle, 8-oracle, lts-or

hub.docker.com

 

docker pull mysql
  • 다음 명령어로 MySQL Docker 이미지를 다운로드한다.
  • 특정 버전을 적지 않으면, 최신 버전을 설치한다.

 

실습

ubuntu@ip-000-000-000-000:~$ docker pull mysql

Using default tag: latest
latest: Pulling from library/mysql
07bc88e18c4a: Pull complete
1a9c1668bf49: Pull complete
1021dda8eecf: Pull complete
fb61b56acac1: Pull complete
0bca83908a5b: Pull complete
165e8b3d37ca: Pull complete
3e1b086f1295: Pull complete
dba651668484: Pull complete
ed90f5355e12: Pull complete
0412f59ab2b5: Pull complete
Digest: sha256:aa0123456789asdfghjklxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

ubuntu@ip-000-000-000-000:~$ docker images

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
mysql         latest    fcaaa1234xxx   5 weeks ago     578MB

 

3. 다운받은 Image로 MySQL Docker 컨테이너 생성하기

sudo docker run --name 컨테이너이름 -e MYSQL_ROOT_PASSWORD=비밀번호 -d -p 3306:3306 mysql:latest

 

사용된 옵션 의미 보기

더보기
  • sudo docker run : Docker 컨테이너를 실행
  • -d : 컨테이너를 백그라운드에서 실행 (detached 모드)
  • -p : 포트 (외부포트 : Docker 내부포트)
  • -p 3306:3306 : 호스트의 3306 포트를 컨테이너의 3306 포트로 연결.
    • MySQL 서버에 호스트에서 접속할 수 있도록 한다.
  • -e : 환경변수 (PASSWORD) 설정
  • -e MYSQL_ROOT_PASSWORD=P@ssw0rd : 테이너의 환경 변수를 설정
    • MySQL 루트 사용자의 비밀번호를 설정한다.
  • -name : 생성할 컨테이너 이름
  • -name mysql-container : 컨테이너에 이름을 지정 ("mysql-container"라는 이름을 사용)
  • mysql:latest : 실행할 도커 이미지의 이름
    • 여러 버전의 mysql이 있다면, 'Tag'로 구분할 수 있다.

 

실습

ubuntu@ip-000-000-000:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ubuntu@ip-000-000-000:~$ docker run --name mysql-server -e MYSQL_ROOT_PASSWORD=pomoro-d0@0517 -d -p 3306:3306 mysql:latest
1234567asdfghj??????????????????????????????????????????????

 

Docker에서 MySQL로 접속하기

4. Docker MySQL 컨테이너에 접속하기

sudo docker exec -it ${mysql-container 이름} bash
  • root@{containerName}:/# 으로 진입한다.

 

5. MySQL에 관리자로 접속하기

mysql -u root -p
  • MySQL 루트로 접속

 

실습

ubuntu@ip-000-000-000:~$ docker exec -it mysql-server bash

bash-5.1# mysql -u root -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.4.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
  • Enter password: 에 비밀번호 입력 (입력이 보이지 않음)
  • 명령어를 입력한 후, 패스워드를 입력하면 mysql> 로 진입한 것을 확인할 수 있다.

 

6. 현재 Database 리스트 확인하기

mysql> SHOW DATABASES;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

 

위와 같이 자동으로 생성된 4개의 Database가 보인다. MySQL Container는 생성하였지만 Database를 만들지 않았다.

우리가 직접 사용할 새로운 Database를 생성해보도록 하자.

 

7. 새로운 Database 생성하기

CREATE DATABASE [DB이름]
create database [DB이름];

 

실습

mysql> CREATE DATABASE pomorodo;
Query OK, 1 row affected (0.01 sec)
  • 'pomorodo'라는 이름을 가진 Database를 생성한다.
  • 추후 프로젝트의 application.yml에서 Database 환경설정을 변경해야한다.

 

8. 생성된 새로운 DB 확인하기

mysql> SHOW DATABASES;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| pomorodo           |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

 

실습

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql> CREATE DATABASE pomorodo;
Query OK, 1 row affected (0.00 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| pomorodo           |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql>
728x90
반응형