EC2์ mysql์ docker๋ฅผ ์ด์ฉํด์ ์ฌ๋ ค๋ณด์
https://hanjungyo.tistory.com/74
[Spring Boot] Docker๋ฅผ ์ด์ฉํด EC2์ ๋ฐฐํฌํด๋ณด๊ธฐ
EC2 ์ธ์คํด์ค ์์ฑ ๋ฐฉ๋ฒ์ ์ด์ ํฌ์คํ ์ ์ฐธ๊ณ ํด์ฃผ์ธ์!๋ก์ปฌ์์ Docker ์ค์ Jar ํ์ผ ๋น๋ํ๊ธฐ ๋ณดํต ๋น๋๋ฅผ ํ ๋ ./graldew clean build ๋ฅผ ๋ง์ด ๋ดค์ํ ๋ฐ ์ด๋ฒ์๋ ./gradlew clean bootJar๋ฅผ ํตํด Spring B
hanjungyo.tistory.com
EC2์ docker๊ฐ ์ค์น๋์ด์์ง ์๋ค๋ฉด ์ ๋งํฌ์ docker ์ค์นํ๊ธฐ ๋ถ๋ถ์ ์ฐธ๊ณ
EC2์ ssh๋ก ์ ์์ ํ๊ณ
MySQL Docker Image ๋ค์ด๋ก๋
sudo docker pull mysql // ์ ์ผ ์ต์ ๋ฒ์ ๋ค์ด๋ก๋
// latest๋ 9.0์ธ๋ฐ ๋น๋ฐ๋ฒํธ ์ค์ ์์ ์ค๋ฅ๊ฐ ๋์ 8.0์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ฒ์ ๋ช
์
sudo docker pull mysql:8.0

Docker Volume ์ค์
Docker์์๋ ์ปจํ ์ด๋๊ฐ ์ญ์ ๋๋ฉด ํ ๋น๋ ๋ณผ๋ฅจ(๋ฉ๋ชจ๋ฆฌ)๋ ํจ๊ป ์ญ์ ๋จ
=> MySQL์ฉ ๋ณผ๋ฅจ์ ๋ฐ๋ก Docker์ ํ ๋น ํด์ฃผ๊ณ , ๋ง์ดํ ์ ํด์ฃผ๋ฉด ์๊ตฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด์กดํ ์ ์์
docker volume create mysql-volume
์ด๋ ๊ฒ docker volume์ ์์ฑํ์ฌ ๋ฐ์ดํฐ ์ ์ฅ์๋ก ์ฌ์ฉํ ์ ์๋๋ฐ ์ด ๋ฐ์ดํฐ ์ ์ฅ์๋ ์ปจํ ์ด๋์ ๋ผ์ดํ์ฌ์ดํด๊ณผ๋ ๋ ๋ฆฝ์ ์!

EC2์ Docker๋ฅผ ์ค์นํ์ํ ๋ฐ docker Volume์ ์์ฑํ๊ฒ๋๋ฉด ํธ์คํธ ์์คํ ์ /var/lib/docker/volumes/ ๊ฒฝ๋ก์ ์ ์ฅ
volume ์ด๋ฆ์ mysql-volume์ผ๋ก ์์ฑํ์ผ๋ฏ๋ก /var/lib/docker/volumes/mysql-volume/_data/๋ก ํธ์คํธ ์์คํ (์ฌ๊ธฐ์๋ docker๋ฅผ ์ค์นํ EC2)์ ํ์ผ ๊ฒฝ๋ก์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฒ๋จ
ํ์ง๋ง!! ์ปจํ ์ด๋๋ฅผ ์คํํ ๋ ํน๋ณํ ๋ณผ๋ฅจ์ ๋ง์ดํธํ์ง ์์ผ๋ฉด, ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ปจํ ์ด๋์ ํ์ผ ์์คํ ์์๋ง ์กด์ฌํ๊ฒ ๋จ
์ด๋ฅผ ์ํด docker run ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์คํํ ๋
-v mysql-volume:/var/lib/mysql ์ ๊ฐ์ ์ต์ ์ ์ด์ฉํ์ฌ ๋ณผ๋ฅจ์ ๋ง์ดํธํ๋๋ฐ
MySQL ์ปจํ ์ด๋์ /var/lib/mysql ๋๋ ํ ๋ฆฌ๊ฐ
์ด ๋๋ ํ ๋ฆฌ๋ EC2์ ํ์ผ ์์คํ ์ ์๋ ๋๋ ํ ๋ฆฌ๊ฐ ์๋๋ผ MySQL์ด ์คํ๋๋ ์ปจํ ์ด๋์ ํ์ผ ์์คํ ์ ์๋ ๋๋ ํ ๋ฆฌ์
=> MySQL ์ปจํ ์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๋ฆฝ์ ์ธ ํ์ผ ์์คํ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด ํ์ผ ์์คํ ๋ด์ /var/lib/mysql ๋๋ ํ ๋ฆฌ๊ฐ MySQL ๋ฐ์ดํฐ ํ์ผ์ ์ ์ฅํ๋ ๊ธฐ๋ณธ ์์น์
EC2์ ํ์ผ ์์คํ ์ ์๋ ๋๋ ํ ๋ฆฌ (์ฌ๊ธฐ์๋ mysql-volume) ์ฆ, /var/lib/docker/volumes/mysql-volume/_data/ ์ ์ฐ๊ฒฐ๋จ!
์ด ์ฐ๊ฒฐ์ ํตํด, MySQL ์ปจํ ์ด๋ ๋ด์์ /var/lib/mysql ์ ์ฐ์ฌ์ง ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ค์ ๋ก๋ ํธ์คํธ(EC2)์ ๋ณผ๋ฅจ ๋๋ ํ ๋ฆฌ์ ์ ์ฅ๋๊ฒ ๋จ
=> MySQL ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๋๋ผ๋ ํธ์คํธ์ ๋ฐ์ดํฐ๋ ๊ทธ๋๋ก ๋จ์ ์์
๋ง์ฝ MySQL ์ปจํ ์ด๋๊ฐ ์ญ์ ๋์์ ๊ฒฝ์ฐ ๋์ผํ ๋ณผ๋ฅจ์ ๋ค์ ๋ง์ดํธํ์ฌ MySQL ์ปจํ ์ด๋๋ฅผ ์คํํ๋ฉด, ์ด์ ๊ณผ ๋์ผํ /var/lib/mysql ๊ฒฝ๋ก๋ก ๋ค์ ์ฐ๊ฒฐ ๋๊ธฐ ๋๋ฌธ์, ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ๊ทธ๋๋ก ๋จ์์์ด ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํจ!
MySQL ์ปจํ ์ด๋ ์์ฑ & ์คํ
sudo docker run --name mysql-container -v mysql-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=[ํจ์ค์๋] -d -p 3306:3306 mysql:8.0
'--name' : ์์ฑ๋ ์ปจํ ์ด๋์ ์ด๋ฆ์ ์ง์
'-v' : ๋ฐ๋ก ์ด์ docker ๋ณผ๋ฅจ์์ ์ค๋ช ํจ
'-e MYSQL_ROOT_PASSWORD=[ํจ์ค์๋]' : ์ปจํ ์ด๋ ๋ด์์ MySQL์ ๋ฃจํธ ์ฌ์ฉ์(root) ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํ๊ธฐ ์ํ ํ๊ฒฝ ๋ณ์
'-d' : ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ (ํฐ๋ฏธ๋ ์ ์ x)
'-p host : container' : ํธ์คํธ์ ํฌํธ์ ์ปจํ ์ด๋ ํฌํธ๋ฅผ ๋งคํ

EC2 MySQL Docker ์ปจํ ์ด๋ ์ ์
// bash๋ก mysql ์ปจํ
์ด๋ ์ ๊ทผ
sudo docker exec -it mysql-container bash
// ์ค์ ํ password ์
๋ ฅ
mysql -u root -p
'-i' : ํ์ค ์ ๋ ฅ์ ํ์ฑํ(interactive mode)ํ๋ ์ญํ
=> ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ ์ ์๋๋ก ์ปจํ ์ด๋์์ ์ ๋ ฅ ์คํธ๋ฆผ์ ์ ์งํจ
'-t' : ๊ฐ์ ํฐ๋ฏธ๋(pseudo-TTY)์ ํ ๋นํจ
=> ๋ช ๋ น์ด๋ฅผ ์คํํ ๋ ํฐ๋ฏธ๋ ์ธ์ ์ ์ ๊ณตํ๋ ์ญํ ์
(์ฌ๊ธฐ์๋ bash ์ ์ฌ์ฉ)
DB ํ ์คํธ ์ ์ฃผ์ ์ฌํญ
MySQL Workbench ์์ hostname์ ์ปจํ ์ด๋๋ฅผ ์ฌ๋ฆฐ EC2์ ํผ๋ธ๋ฆญ ip ์ฃผ์๋ฅผ ์ ์ด์ฃผ๊ณ
username ์ root์ ์ด์ ์ ์ค์ ํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํด์ ์ฐ๊ฒฐํ๋ฉด ๋๋ค!
=> ๋ง์ฝ docker exec๋ฅผ ์ด์ฉํด bash๋ก MySQL ์ปจํ ์ด๋ ์ ๊ทผํด์ user๋ฅผ ์์ฑํ๋ค๋ฉด ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๊ณ ์ฐ๊ฒฐํ username์ ํด๋น username์ ์ ์ด์ฃผ๋ฉด ๋จ
MySQL์์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ์ด๋ User ์์ฑ์ ๊ตฌ๊ธ๋ง์ ํด๋ณด์!
EC2 ๋ณด์ ๊ทธ๋ฃน์์ 3306 (MySQL) ํฌํธ์ ๋ํด ์ธ๋ฐ์ด๋ ๊ท์น์ ์ถ๊ฐํด์ค์ผ ํจ!
'๐ Infra > AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Cloud Network (3) | 2024.10.16 |
---|---|
Cloud Basic Service (13) | 2024.10.14 |
Distributed System (5) | 2024.10.06 |
AWS EC2 ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํ์ ํด๊ฒฐ (Swap Memory) (1) | 2024.09.12 |
Permissions for '*.pem' are too open ์๋ฌ ํด๊ฒฐ (0) | 2024.04.06 |
EC2์ mysql์ docker๋ฅผ ์ด์ฉํด์ ์ฌ๋ ค๋ณด์
https://hanjungyo.tistory.com/74
[Spring Boot] Docker๋ฅผ ์ด์ฉํด EC2์ ๋ฐฐํฌํด๋ณด๊ธฐ
EC2 ์ธ์คํด์ค ์์ฑ ๋ฐฉ๋ฒ์ ์ด์ ํฌ์คํ ์ ์ฐธ๊ณ ํด์ฃผ์ธ์!๋ก์ปฌ์์ Docker ์ค์ Jar ํ์ผ ๋น๋ํ๊ธฐ ๋ณดํต ๋น๋๋ฅผ ํ ๋ ./graldew clean build ๋ฅผ ๋ง์ด ๋ดค์ํ ๋ฐ ์ด๋ฒ์๋ ./gradlew clean bootJar๋ฅผ ํตํด Spring B
hanjungyo.tistory.com
EC2์ docker๊ฐ ์ค์น๋์ด์์ง ์๋ค๋ฉด ์ ๋งํฌ์ docker ์ค์นํ๊ธฐ ๋ถ๋ถ์ ์ฐธ๊ณ
EC2์ ssh๋ก ์ ์์ ํ๊ณ
MySQL Docker Image ๋ค์ด๋ก๋
sudo docker pull mysql // ์ ์ผ ์ต์ ๋ฒ์ ๋ค์ด๋ก๋
// latest๋ 9.0์ธ๋ฐ ๋น๋ฐ๋ฒํธ ์ค์ ์์ ์ค๋ฅ๊ฐ ๋์ 8.0์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ฒ์ ๋ช
์
sudo docker pull mysql:8.0

Docker Volume ์ค์
Docker์์๋ ์ปจํ ์ด๋๊ฐ ์ญ์ ๋๋ฉด ํ ๋น๋ ๋ณผ๋ฅจ(๋ฉ๋ชจ๋ฆฌ)๋ ํจ๊ป ์ญ์ ๋จ
=> MySQL์ฉ ๋ณผ๋ฅจ์ ๋ฐ๋ก Docker์ ํ ๋น ํด์ฃผ๊ณ , ๋ง์ดํ ์ ํด์ฃผ๋ฉด ์๊ตฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด์กดํ ์ ์์
docker volume create mysql-volume
์ด๋ ๊ฒ docker volume์ ์์ฑํ์ฌ ๋ฐ์ดํฐ ์ ์ฅ์๋ก ์ฌ์ฉํ ์ ์๋๋ฐ ์ด ๋ฐ์ดํฐ ์ ์ฅ์๋ ์ปจํ ์ด๋์ ๋ผ์ดํ์ฌ์ดํด๊ณผ๋ ๋ ๋ฆฝ์ ์!

EC2์ Docker๋ฅผ ์ค์นํ์ํ ๋ฐ docker Volume์ ์์ฑํ๊ฒ๋๋ฉด ํธ์คํธ ์์คํ ์ /var/lib/docker/volumes/ ๊ฒฝ๋ก์ ์ ์ฅ
volume ์ด๋ฆ์ mysql-volume์ผ๋ก ์์ฑํ์ผ๋ฏ๋ก /var/lib/docker/volumes/mysql-volume/_data/๋ก ํธ์คํธ ์์คํ (์ฌ๊ธฐ์๋ docker๋ฅผ ์ค์นํ EC2)์ ํ์ผ ๊ฒฝ๋ก์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฒ๋จ
ํ์ง๋ง!! ์ปจํ ์ด๋๋ฅผ ์คํํ ๋ ํน๋ณํ ๋ณผ๋ฅจ์ ๋ง์ดํธํ์ง ์์ผ๋ฉด, ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ปจํ ์ด๋์ ํ์ผ ์์คํ ์์๋ง ์กด์ฌํ๊ฒ ๋จ
์ด๋ฅผ ์ํด docker run ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์คํํ ๋
-v mysql-volume:/var/lib/mysql ์ ๊ฐ์ ์ต์ ์ ์ด์ฉํ์ฌ ๋ณผ๋ฅจ์ ๋ง์ดํธํ๋๋ฐ
MySQL ์ปจํ ์ด๋์ /var/lib/mysql ๋๋ ํ ๋ฆฌ๊ฐ
์ด ๋๋ ํ ๋ฆฌ๋ EC2์ ํ์ผ ์์คํ ์ ์๋ ๋๋ ํ ๋ฆฌ๊ฐ ์๋๋ผ MySQL์ด ์คํ๋๋ ์ปจํ ์ด๋์ ํ์ผ ์์คํ ์ ์๋ ๋๋ ํ ๋ฆฌ์
=> MySQL ์ปจํ ์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๋ฆฝ์ ์ธ ํ์ผ ์์คํ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด ํ์ผ ์์คํ ๋ด์ /var/lib/mysql ๋๋ ํ ๋ฆฌ๊ฐ MySQL ๋ฐ์ดํฐ ํ์ผ์ ์ ์ฅํ๋ ๊ธฐ๋ณธ ์์น์
EC2์ ํ์ผ ์์คํ ์ ์๋ ๋๋ ํ ๋ฆฌ (์ฌ๊ธฐ์๋ mysql-volume) ์ฆ, /var/lib/docker/volumes/mysql-volume/_data/ ์ ์ฐ๊ฒฐ๋จ!
์ด ์ฐ๊ฒฐ์ ํตํด, MySQL ์ปจํ ์ด๋ ๋ด์์ /var/lib/mysql ์ ์ฐ์ฌ์ง ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ค์ ๋ก๋ ํธ์คํธ(EC2)์ ๋ณผ๋ฅจ ๋๋ ํ ๋ฆฌ์ ์ ์ฅ๋๊ฒ ๋จ
=> MySQL ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๋๋ผ๋ ํธ์คํธ์ ๋ฐ์ดํฐ๋ ๊ทธ๋๋ก ๋จ์ ์์
๋ง์ฝ MySQL ์ปจํ ์ด๋๊ฐ ์ญ์ ๋์์ ๊ฒฝ์ฐ ๋์ผํ ๋ณผ๋ฅจ์ ๋ค์ ๋ง์ดํธํ์ฌ MySQL ์ปจํ ์ด๋๋ฅผ ์คํํ๋ฉด, ์ด์ ๊ณผ ๋์ผํ /var/lib/mysql ๊ฒฝ๋ก๋ก ๋ค์ ์ฐ๊ฒฐ ๋๊ธฐ ๋๋ฌธ์, ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ๊ทธ๋๋ก ๋จ์์์ด ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํจ!
MySQL ์ปจํ ์ด๋ ์์ฑ & ์คํ
sudo docker run --name mysql-container -v mysql-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=[ํจ์ค์๋] -d -p 3306:3306 mysql:8.0
'--name' : ์์ฑ๋ ์ปจํ ์ด๋์ ์ด๋ฆ์ ์ง์
'-v' : ๋ฐ๋ก ์ด์ docker ๋ณผ๋ฅจ์์ ์ค๋ช ํจ
'-e MYSQL_ROOT_PASSWORD=[ํจ์ค์๋]' : ์ปจํ ์ด๋ ๋ด์์ MySQL์ ๋ฃจํธ ์ฌ์ฉ์(root) ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํ๊ธฐ ์ํ ํ๊ฒฝ ๋ณ์
'-d' : ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ (ํฐ๋ฏธ๋ ์ ์ x)
'-p host : container' : ํธ์คํธ์ ํฌํธ์ ์ปจํ ์ด๋ ํฌํธ๋ฅผ ๋งคํ

EC2 MySQL Docker ์ปจํ ์ด๋ ์ ์
// bash๋ก mysql ์ปจํ
์ด๋ ์ ๊ทผ
sudo docker exec -it mysql-container bash
// ์ค์ ํ password ์
๋ ฅ
mysql -u root -p
'-i' : ํ์ค ์ ๋ ฅ์ ํ์ฑํ(interactive mode)ํ๋ ์ญํ
=> ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ ์ ์๋๋ก ์ปจํ ์ด๋์์ ์ ๋ ฅ ์คํธ๋ฆผ์ ์ ์งํจ
'-t' : ๊ฐ์ ํฐ๋ฏธ๋(pseudo-TTY)์ ํ ๋นํจ
=> ๋ช ๋ น์ด๋ฅผ ์คํํ ๋ ํฐ๋ฏธ๋ ์ธ์ ์ ์ ๊ณตํ๋ ์ญํ ์
(์ฌ๊ธฐ์๋ bash ์ ์ฌ์ฉ)
DB ํ ์คํธ ์ ์ฃผ์ ์ฌํญ
MySQL Workbench ์์ hostname์ ์ปจํ ์ด๋๋ฅผ ์ฌ๋ฆฐ EC2์ ํผ๋ธ๋ฆญ ip ์ฃผ์๋ฅผ ์ ์ด์ฃผ๊ณ
username ์ root์ ์ด์ ์ ์ค์ ํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํด์ ์ฐ๊ฒฐํ๋ฉด ๋๋ค!
=> ๋ง์ฝ docker exec๋ฅผ ์ด์ฉํด bash๋ก MySQL ์ปจํ ์ด๋ ์ ๊ทผํด์ user๋ฅผ ์์ฑํ๋ค๋ฉด ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๊ณ ์ฐ๊ฒฐํ username์ ํด๋น username์ ์ ์ด์ฃผ๋ฉด ๋จ
MySQL์์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ์ด๋ User ์์ฑ์ ๊ตฌ๊ธ๋ง์ ํด๋ณด์!
EC2 ๋ณด์ ๊ทธ๋ฃน์์ 3306 (MySQL) ํฌํธ์ ๋ํด ์ธ๋ฐ์ด๋ ๊ท์น์ ์ถ๊ฐํด์ค์ผ ํจ!
'๐ Infra > AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Cloud Network (3) | 2024.10.16 |
---|---|
Cloud Basic Service (13) | 2024.10.14 |
Distributed System (5) | 2024.10.06 |
AWS EC2 ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํ์ ํด๊ฒฐ (Swap Memory) (1) | 2024.09.12 |
Permissions for '*.pem' are too open ์๋ฌ ํด๊ฒฐ (0) | 2024.04.06 |