Post

Ec2+docker+mysql

Ec2+docker+mysql

๊ด€๋ จ ๊ธ€


์Šคํ„ฐ๋”” - ๋ฐฐํฌ ๊ณผ์ • ์ •๋ฆฌ


EC2 + Docker + MySQL

EC2 ์ƒ์„ฑํ•˜๊ธฐ

  • ubuntu ํด๋ฆญ

  • ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค ํด๋ฆญ

image


image



Spot Instance

์ธ์Šคํ„ด์Šค๋Š” AWS์˜ ์—ฌ์œ  ๋ฆฌ์†Œ์Šค ๋˜๋Š” EC2 ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ œ๊ณต๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ์ธ์Šคํ„ด์Šค๋ž€ ๋‚ด๊ฐ€ AWS์—์„œ ์ƒ์„ฑํ•œ ์„œ๋ฒ„ ํ•œ ๋Œ€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

EC2์—์„œ ์ƒ์„ฑํ•œ ๊ฐ€์ƒ ์„œ๋ฒ„ 1๋Œ€๋ฅผ ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Spot ์ธ์Šคํ„ด์Šค๋Š” ์ด๋Ÿฐ ์„œ๋ฒ„ ์ž์› ์ค‘์—์„œ โ€œ๋‚จ๋Š” ์ž์›โ€์„ ํ• ์ธ๋œ ๊ฐ€๊ฒฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ด๋Ÿฌํ•œ ์ธ์Šคํ„ด์Šค๋Š” ๊ฒฝ๋งค ๋ฐฉ์‹์œผ๋กœ ๊ฐ€๊ฒฉ์ด ๊ฒฐ์ •๋˜๋ฉฐ ํ˜„์žฌ์˜ ์ˆ˜์š”์™€ ๊ณต๊ธ‰ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐ€๊ฒฉ์ด ๋ณ€๋™ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์ผ๋ฐ˜ ์ธ์Šคํ„ด์Šค๋ณด๋‹ค ์ €๋ ดํ•˜๋‹ค.

๋‹จ์ ์€ AWS์—์„œ ํ•ด๋‹น ์ž์›์ด ๋‹ค์‹œ ํ•„์š”ํ•ด์ง€๋ฉด ๋‚ด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๋‹ค.


๊ทธ๋ž˜์„œ ํ…Œ์ŠคํŠธ ์„œ๋ฒ„, ์ž ๊น ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„์—๋Š” ์ ํ•ฉํ•˜์ง€๋งŒ

ํ•ญ์ƒ ์ผœ์ ธ ์žˆ์–ด์•ผ ํ•˜๋Š” ์„œ๋น„์Šค์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.





์ธ์Šคํ„ด์Šค ์—ฐ๊ฒฐํ•˜๊ธฐ

EC2๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด ์ด์ œ ์„œ๋ฒ„์— ์ ‘์† ํ•œ๋‹ค.

์ ‘์† ๋ฐฉ๋ฒ•์€ SSH๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.



ํ‚ค ํŽ˜์–ด ์œ„์น˜๋กœ ์ด๋™

EC2 ์ƒ์„ฑ ์‹œ .pem ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.

์ด ํŒŒ์ผ์€ ์„œ๋ฒ„์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ์ธ ํ‚ค์ด๋‹ค.

ํ•ด๋‹น ํŒŒ์ผ์ด ์—†์œผ๋ฉด ํ•ด๋‹น EC2 ์ธ์Šคํ„ด์Šค์— ์ ‘์†ํ•  ์ˆ˜ ์—†๋‹ค.

๋‚˜๋Š” Linux ์ „์šฉ ํด๋”์— ๋„ฃ์–ด๋‘์—ˆ๋‹ค.



keypair ํŒŒ์ผ์˜ ์ ‘๊ทผ ๊ถŒํ•œ ๋ณ€๊ฒฝ

{ํ‚ค ํŽ˜์–ด ์ด๋ฆ„}.pem์„ ์ €์žฅํ•œ ์œ„์น˜๋กœ ๊ฒฝ๋กœ๋ฅผ ์ด๋™์‹œํ‚จ ํ›„ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

1
chmod 400 {ํ‚ค ํŽ˜์–ด ์ด๋ฆ„}.pem


Ubuntu์—์„œ๋Š” sudo๋ฅผ ๋ถ™์—ฌ์•ผ ์‹คํ–‰๋˜์—ˆ๋‹ค.

1
sudo chmod 400 {ํ‚ค ํŽ˜์–ด ์ด๋ฆ„}.pem

chmod๋Š” ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น์–ด๋‹ค.

400์€ ๊ถŒํ•œ ์„ค์ •์„ ์˜๋ฏธํ•œ๋‹ค.

  • ํŒŒ์ผ ์†Œ์œ ์ž โ†’ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅ

  • ๊ทธ ์™ธ ์‚ฌ์šฉ์ž โ†’ ์•„๋ฌด ๊ถŒํ•œ ์—†์Œ


AWS๋Š” ๋ณด์•ˆ์ƒ pem ํŒŒ์ผ์ด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ์š”๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—

EC2 ์ ‘์†์šฉ ํ‚ค ํŒŒ์ผ์€ 400์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.




SSH๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ EC2 ์ธ์Šคํ„ด์Šค์— ์ ‘์†

1
ssh -i {ํ‚ค ํŽ˜์–ด ์ฃผ์†Œ} ubuntu@ipv4์ฃผ์†Œ


๋‚˜๋Š” ํ‚คํŽ˜์–ด ์ฃผ์†Œ๋ฅผ ๊ฒฝ๋กœ๊นŒ์ง€ ์ ์ง€ ์•Š๊ณ  ํ‚คํŽ˜์–ด ์ด๋ฆ„๋งŒ ์ž‘์„ฑํ•ด์•ผ ์‹คํ–‰๋˜์—ˆ๋‹ค.

1
sudo ssh -i test.pem ubuntu@{ipv4์ฃผ์†Œ}
  • ssh : ์›๊ฒฉ ์ ‘์† ๋ช…๋ น์–ด
  • -i : ์‚ฌ์šฉํ•  ๊ฐœ์ธ ํ‚ค ํŒŒ์ผ ์ง€์ •
  • ubuntu : EC2์— ์ ‘์†ํ•  ์‚ฌ์šฉ์ž ๊ณ„์ •
  • ipv4์ฃผ์†Œ : EC2์˜ ๊ณต๊ฐœ IP ์ฃผ์†Œ

์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‚ด ์ปดํ“จํ„ฐ์—์„œ EC2 ์„œ๋ฒ„๋กœ ์ ‘์†ํ•˜๊ฒŒ ๋œ๋‹ค.




SSH๋ž€?

SSH๋Š” Secure Shell์˜ ์•ฝ์ž๋‹ค.

๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์›๊ฒฉ์œผ๋กœ ์ปดํ“จํ„ฐ์— ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ํ”„๋กœํ† ์ฝœ์ด๋ž€ ์ปดํ“จํ„ฐ๋ผ๋ฆฌ ํ†ต์‹ ํ•  ๋•Œ์˜ ๊ทœ์น™์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

SSH๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 22๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฒˆํ˜ธ)

  • 22 โ†’ SSH
  • 3306 โ†’ MySQL
  • 80 โ†’ ์›น ์„œ๋ฒ„

์ด๋Ÿฐ ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ๋งˆ๋‹ค port๊ฐ€ ๋‹ค๋ฅด๋‹ค.

EC2์—์„œ SSH ์ ‘์†์„ ํ•˜๋ ค๋ฉด ๋ณด์•ˆ ๊ทธ๋ฃน์—์„œ 22๋ฒˆ ํฌํŠธ๋ฅผ ์—ด์–ด๋‘์–ด์•ผ ํ•œ๋‹ค.




๋งŒ์•ฝ 22๋ฒˆ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด?

1
ssh -i {ํ‚ค ํŽ˜์–ด ์ฃผ์†Œ} -p 500 ubuntu@ipv4์ฃผ์†Œ

-p ์˜ต์…˜์€ ์ ‘์†ํ•  ํฌํŠธ๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 500๋ฒˆ ํฌํŠธ๋กœ SSH๋ฅผ ์—ด์—ˆ๋‹ค๋ฉด -p 500์„ ๋ถ™์—ฌ์•ผ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค.





Docker ์„ค์น˜ํ•˜๊ธฐ

Docker docs

Docker๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋ž€ ํ•˜๋‚˜์˜ ๊ฒฉ๋ฆฌ๋œ ์‹คํ–‰ ๊ณต๊ฐ„์ด๋‹ค.

์„œ๋ฒ„ ์•ˆ์— ์ž‘์€ ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜ ๋” ๋งŒ๋“œ๋Š” ๊ฐœ๋…์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ์‰ฝ๋‹ค.




apt ์ €์žฅ์†Œ ์‚ฌ์šฉ

HTTPS๋ฅผ ํ†ตํ•ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก

ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

1
2
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg


ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค ์—…๋ฐ์ดํŠธ๋ž€ ์„ค์น˜ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ ๋ชฉ๋ก์„ ์ตœ์‹  ์ƒํƒœ๋กœ ๊ฐฑ์‹ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.




Docker ๊ณต์‹ GPG ํ‚ค ์ถ”๊ฐ€

1
2
3
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Docker๊ฐ€ ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ ์ œ๊ณตํ•œ ํŒŒ์ผ์ด ๋งž๋Š”์ง€ ๊ฒ€์ฆ




repository ์„ค์ •

1
2
3
4
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker ์ €์žฅ์†Œ๋ฅผ Ubuntu์— ๋“ฑ๋ก




Docker Engine ์„ค์น˜

1
2
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin



์„ค์น˜ ํ™•์ธ

1
sudo docker -v

๋ฒ„์ „์ด ์ถœ๋ ฅ๋˜๋ฉด ์ •์ƒ ์„ค์น˜๋œ ๊ฒƒ์ด๋‹ค.





MySQL ์„ค์น˜ํ•˜๊ธฐ

Docker hub

MySQL ์ธ์Šคํ„ด์Šค ์‹œ์ž‘

1
docker run --name ${some-mysql} -e MYSQL_ROOT_PASSWORD=${my-secret-pw} -d mysql:tag
  • some-mysql โ†’ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„

  • my-secret-pw โ†’ root ๋น„๋ฐ€๋ฒˆํ˜ธ

  • tag โ†’ MySQL ๋ฒ„์ „



1
docker run -p 3306:3306 --name chat -e MYSQL_ROOT_PASSWORD=1234 -d mysql:latest

-p ์˜ต์…˜์—์„œ ์•ž์˜ 3306์€ EC2 ํฌํŠธ์ด๊ณ  ๋’ค์˜ 3306์€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ํฌํŠธ์ด๋‹ค.



1
docker run -p 1111:2222 --name hello -e MYSQL_ROOT_PASSWORD=1234 -d mysql:latest
  • -p 1111:2222 : EC2 1111๋ฒˆ ํฌํŠธ, ์ปจํ…Œ์ด๋„ˆ 2222๋ฒˆ ํฌํŠธ

์™ธ๋ถ€์—์„œ 1111๋กœ ์ ‘์†ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์˜ 2222๋กœ ์ „๋‹ฌ๋œ๋‹ค.

์ด ๊ณผ์ •์„ ํฌํŠธ ํฌ์›Œ๋”ฉ์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • --name hello : ์‹คํ–‰๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„ โ€œhelloโ€๋กœ ์ง€์ •




Port Forwarding์ด๋ž€?

ํฌํŠธ ํฌ์›Œ๋”ฉ์€ ํ•œ ํฌํŠธ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ๋‹ค๋ฅธ ํฌํŠธ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

์™ธ๋ถ€ โ†’ EC2 1111

โ†’ ์ปจํ…Œ์ด๋„ˆ 2222

โ†’ MySQL ์‹คํ–‰

์ด ๊ณผ์ •์„ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.




Spring Boot์™€ DB ์—ฐ๊ฒฐ

MySQL์ด EC2์—์„œ ์‹คํ–‰ ์ค‘์ด๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ์—์„œ ํ•ด๋‹น DB์— ์—ฐ๊ฒฐํ•œ๋‹ค.

image

user์™€ password๋Š” MySQL ์‹คํ–‰ ์‹œ ์„ค์ •ํ•œ ๊ฐ’




Edit Configuration

image

Edit Configuration์—์„œ Spring Boot ์„ค์ •์„ ์ˆ˜์ •ํ•œ๋‹ค.

jdbc:mysql://{EC2๊ณต๊ฐœ์ฃผ์†Œ}:{host port}/์Šคํ‚ค๋งˆ ์ด๋ฆ„

ex) jdbc:mysql://1.2.3.4:1111/chat

Active Profiles์— ์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Environment Variables์— ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.




์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ์„ค์ •

image

MySQL ํฌํŠธ๋ฅผ ์—ด์–ด์ค˜์•ผ ํ•œ๋‹ค.

๋ณด์•ˆ ๊ทธ๋ฃน์—์„œ ํ•ด๋‹น ํฌํŠธ๋ฅผ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์œผ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.

DB๋Š” ๋ฐ˜๋“œ์‹œ ๋‚ด IP๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค. (๋ณด์•ˆ์ƒ ๋ชจ๋“  IP ํ—ˆ์šฉX)

image




์Šคํ‚ค๋งˆ ์ƒ์„ฑ ํ›„ ์‹คํ–‰

chat ์Šคํ‚ค๋งˆ ์ƒ์„ฑ ํ›„ run ํ•˜๋ฉด ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค.

image

application.properties์— spring.jpa.hibernate.ddl-auto=create๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์‹คํ–‰๊ณผ ๋™์‹œ์— ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋œ๋‹ค.






reference
[AWS, Docker] aws ec2 instance์— docker, mysql ์„ค์น˜ํ•˜๊ธฐ

This post is licensed under CC BY 4.0 by the author.

ยฉ haedal-uni. Some rights reserved.

Using the Chirpy theme for Jekyll.