๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Docker] EC2์— Docker Compose ์„ค์น˜ํ›„ ๋ฐฐํฌํ•˜๊ธฐ(feat. ์˜ค๋ฅ˜ ์ง€์˜ฅ & ํšŒ๊ณ ) ๋ณธ๋ฌธ

๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ด๐Ÿ’ป/๐ƒ๐จ๐œ๐ค๐ž๐ซ

[Docker] EC2์— Docker Compose ์„ค์น˜ํ›„ ๋ฐฐํฌํ•˜๊ธฐ(feat. ์˜ค๋ฅ˜ ์ง€์˜ฅ & ํšŒ๊ณ )

๐ŸคRyusun๐Ÿค 2024. 3. 16. 08:30

์ด์ œ๊นŒ์ง€ ์„ค์ •ํ•œ Docker Compose ํŒŒ์ผ์„ EC2์— ๋ฐฐํฌ๋ฅผ ํ•ด๋ณด์ž.

 


 

Docker Compose๋ฅผ ๋ฐฐํฌํ•  EC2 ๋ฅผ ์ƒ์„ฑํ•œํ›„ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•œ๋‹ค. ssh ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์šด๋ฐ›์€ pem ๊ฒฝ๋กœ์—์„œ ํ„ฐ๋ฏธ๋„ ์‹คํ–‰ํ›„ ssh -i "ํ‚ค.pem" ~ ์ด ๋ช…๋ น์–ด๋ฅผ ๋ณต๋ถ™ํ•˜๋ฉด ๋œ๋‹ค.

ํ™”๋ฉด์— ๋ณด์ด๋Š” EC2 ์ธ์Šคํ„ด์Šค ์—ฐ๊ฒฐ๋กœ ํ•ด๋„ ์ ‘์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์šด๋ฐ›์€ pemํ‚ค ๊ฒฝ๋กœ๋กœ ๊ฐ€์„œ ssh๋กœ ์ ‘์†ํ• ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ๋ถ™์—ฌ๋„ฃ์ž.

ํ•„์ž๋Š” ๋ช…๋ น์–ด๋ฅผ ๋„ฃ์—ˆ๋Š”๋ฐ

 

Permissions 0644 for 'ryusun-creditmarket.pem' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "ryusun-creditmarket.pem": bad permissions ubuntu@ec2-3-39-177-21.ap-northeast-2.compute.amazonaws.com: Permission denied (publickey).

ํ•ด๋‹น ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

SSH ํ‚ค์˜ ํŒŒ์ผ ๊ถŒํ•œ์ด ๋„ˆ๋ฌด ๊ฐœ๋ฐฉ์ ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด ๋ฐœ์ƒํ•˜๋Š”๊ฑด๋ฐ 

$ chmod 600 ํ‚ค์ด๋ฆ„.pem

 

ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค.

 

Docker Compose ์„ค์น˜ ๋ฐ ๋ฐฐํฌ

EC2์— ์ ‘์†ํ•˜์—ฌ ๋„์ปค ๋ฐ Git์„ ์„ค์น˜ํ•ด ๋ณด์ž.

1. Git ์„ค์น˜

#Perform a quick update on your instance:
$ sudo yum update -y

#Install git in your EC2 instance
$ sudo yum install git -y

#Check git version
$ git version

 

2. ๋„์ปค, ๋„์ปค ์ปดํฌ์ฆˆ ์„ค์น˜ ๋ฐ ์‹œ์ž‘

docker client์™€ server(docker daemon)๊ฐ„ ํ†ต์‹  ๋ฐฉ์‹์€ ๊ธฐ๋ณธ์ ์œผ๋กœ unix domain socket(IPC socket)์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋‚ด๋ถ€์ ์œผ๋กœ /var/run/docker.sockํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์‹ ํ•œ๋‹ค. 
๋”ฐ๋ผ์„œ, ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์น˜ ํ›„ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•œ๋‹ค.

//๋„์ปค ์„ค์น˜  
$ sudo yum install docker
$ docker -v

// ๋„์ปค ์ปดํฌ์ฆˆ ์„ค์น˜ 
$ sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

// ๋„์ปค ์‹œ์ž‘ํ•˜๊ธฐ     
$ sudo systemctl start docker

// ์‹คํ–‰ ๊ถŒํ•œ ์ ์šฉ   
$ sudo chmod +x /usr/local/bin/docker-compose    
$ sudo chmod 666 /var/run/docker.sock
$ docker-compose -v

 

3. Docker Compose ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š” ์†Œ์Šค ๋‚ด๋ ค๋ฐ›๊ธฐ

$ git clone ๊นƒ์ฃผ์†Œ

 

4. Docker ํ™˜๊ฒฝ๋ณ€์ˆ˜

๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœํ•  ๋•Œ, DB ๊ณ„์ • ์ •๋ณด๋‚˜ ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜๋ฉด ์•ˆ๋˜๋Š” ๊ฐ’๋“ค์„ ๋”ฐ๋กœ ์ œ์™ธํ•˜์—ฌ ๊ด€๋ฆฌํ•˜์˜€๊ณ  ์ด๋ฅผ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ „๋‹ฌํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋•Œ .ENV ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

docker-compose๋ฅผ ์‚ฌ์šฉํ• ๋•Œ .env๋ผ๋Š” ํŒŒ์ผ์— ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฅผ ๋™์ผํ•˜๊ฒŒ EC2์—์„œ๋„ docker-composeํŒŒ์ผ์ด ์žˆ๋Š” ์œ„์น˜์— ์•„๋ž˜์™€ ๊ฐ™์ด ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’๋“ค์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์–ด์„œ docker-compose ์‹คํ–‰์‹œ ํ•ด๋‹น ๊ฐ’๋“ค์„ ์ฐธ์กฐํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. 

$ vi .env   

DB_USERNAME=์œ ์ €๋„ค์ž„
DB_PASSWORD=๋น„๋ฐ€๋ฒˆํ˜ธ
SPRING_PROFILES_ACTIVE= prod

.env ํŒŒ์ผ์„ ์ƒ์„ฑํ›„ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

$ docker-compose config    

 

๋ช…๋ น์–ด๋ฅผ ์น˜๋ฉด .envํŒŒ์ผ์— ์„ค์ •ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์ž˜ ๋งตํ•‘๋œ๊ฒƒ์„ ํ™•์ธํ• ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

5. JDK ์„ค์น˜ ๋ฐ jar ํŒŒ์ผ ์ƒ์„ฑ

์•„๋ž˜์™€ ๊ฐ™์ด Amazon์—์„œ ์ œ๊ณตํ•˜๋Š” OpenJDK์ธ Amazon Coretto๋ฅผ ๋‹ค์šด๋ฐ›์•„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ฒ„์ „์— ๋งž๊ฒŒ jdk๋ฅผ ๋‹ค์šด๋ฐ›์œผ๋ฉด ๋œ๋‹ค.

# aws coreetto ๋‹ค์šด๋กœ๋“œ
$ sudo curl -L https://corretto.aws/downloads/latest/amazon-corretto-17-x64-linux-jdk.rpm -o jdk17.rpm

# jdk17 ์„ค์น˜
$ sudo yum localinstall jdk17.rpm
// ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ œ์™ธํ•˜๊ณ , jar ํŒŒ์ผ ๋นŒ๋“œ๋งŒ ์ง„ํ–‰
$ ./gradlew clean build -x test

 

build๋ฅผ ํ–ˆ์œผ๋ฉด jarํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด๋ณด์ž. 

 

6. Docker ์ด๋ฏธ์ง€ ๋ฐ›๊ณ  Docker Compose ์‹คํ–‰

$ docker-compose up --build

docker-compose๋ฅผ ์ด์šฉํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰์‹œํ‚จ๋‹ค.

 

 

๋ฐฐํฌ ์„ฑ๊ณต!!!!!!ใ… ใ… 

๋!!

 

 

 

 

 

<ํšŒ๊ณ >

 

MySQLํฌํŠธ ๋•Œ๋ฌธ์— ๋ฉฐ์น ๋‚ด๋‚ด ๊ณ ์ƒ๊ณ ์ƒํ–ˆ๋‹ค...ใ…‹ใ…‹ํใ… ใ… ใ… ใ… 

 

docker Error invoking remote method 'docker-start-container': Error: (HTTP code 500) server error - Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

 

์ฒ˜์Œ์— ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑํ• ๋•Œ MySQL 3306์ด ์ด๋ฏธ ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค๊ณ ํ•ด์„œ sudo kill -9 PID๋ฅผ ํ–ˆ๋‹ค. ๊ทผ๋ฐ 3306 ํฌํŠธ๊ฐ€ ์ข€๋น„์ฒ˜๋Ÿผ ์‚ด์•„๋‚˜์„œ ๊ฒฐ๊ตญ์—๋Š” ํฌํŠธ๋ฅผ 3308๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ์—๋Š” 3308 : 3308๋กœ ์—ฐ๊ฒฐํ–ˆ๋‹ค. ๊ทธ๋•Œ๊นŒ์ง€๋งŒ ํ•ด๋„ ๋กœ์ปฌ์—์„œ docker-compose.yml ๋ฅผ ๋นŒ๋“œํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ 3๊ฐœ ๋‹ค ์‹คํ–‰๋„ ์ž˜๋˜๊ณ , MySQL ์ปจํ…Œ์ด๋„ˆ๋ž‘ MySQL workbench ์—ฐ๊ฒฐ๋„ ์ž˜๋˜์—ˆ๋Š”๋ฐ...

์ž˜ ์‹คํ–‰๋ผ์„œ ๊ธฐ๋ปฃ๋˜ ๊ณผ๊ฑฐ...ใ…Ž

 

EC2์— docker-compose ํŒŒ์ผ ๋นŒ๋“œํ•˜๋‹ˆ๊น MySQL ์—ฐ๊ฒฐ ์˜ค๋ฅ˜ ์ง€์˜ฅ์— ๋น ์กŒ๋‹ค... 

 

Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

 

EC2์•ˆ์— ๊ฐ‡ํ˜€์„œ ์ด ์˜ค๋ฅ˜๋งŒ ๋ฉฐ์น  ๋‚ด๋‚ด ๋ดค๋‹ค..๊ณ„์† ๋˜‘๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฐ˜๋ณตใ… ใ… ใ…  

๋ณด์•ˆ๊ทธ๋ฃน 3308 ํฌํŠธ๋„ ์—ด๋ ค์žˆ๊ณ , yml ํŒŒ์ผ ์ž˜๋ชป์ ์€๊ฑฐ ์—†๋‚˜ ์—ฌ๋Ÿฌ๋ฒˆ ๋ดฃ๋Š”๋ฐ๋„ ์ด์ƒ์ด ์—†๊ณ ใ… ใ… 

์ปจํ…Œ์ด๋„ˆ MySQL my.cnf ํŒŒ์ผ์— port=3308๋„ ์ถ”๊ฐ€ํ•ด๋ณด๊ณ , .. ์ •๋ง ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ–‡๋‹คใ… ใ… 

๋ฉฐ์น ๋‚ด๋‚ด ์„œํ„ฐ๋ ˆ์Šค ์—„์ฒญ ๋ฐ›๋‹ค๊ฐ€ ๊ฒฐ๊ตญ MySQL ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ๋ฅผ 3307 : 3306์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ ์„œ ํ•ด๊ฒฐ!!ใ… ใ… ใ…  ๋ฉ์ฒญํ•ด์„œ ์˜ค๋ž˜๊ฑธ๋ ท๋„ค...ใ… ใ…  

ํ•ญ์ƒ ํฌํŠธ ๋ณ€๊ฒฝํ• ๋•Œ๋Š” ์กฐ์‹ฌ, ์ฃผ์˜ํ•˜์ž!!

 

๊ฒฐ๋ก 

๋„์ปค ์ปดํฌ์ฆˆ MySQL 3306 ํฌํŠธ ์—ฐ๊ฒฐ ๋ฌธ์ œ๋Š” "์ž„์˜์˜ ํฌํŠธ : 3306"์œผ๋กœ ํ•ด์•ผํ•œ๋‹ค!!!