
https://github.com/bytebird96/bata-shop-backEnd.git
Dockerfile์ด๋?Dockerfile์ Docker ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ค์ ํ์ผ์ ๋๋ค.
์ด ํ์ผ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ํ๊ฒฝ์ ์ ์ํ๊ณ , ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
Dockerfile์ Ubuntu ์์ ๋๋ ํ ๋ฆฌ์์ ์์ฑ
touch Dockerfile
๋๋
echo "" > Dockerfile
Windows ํ๊ฒฝ์์๋ ๋ฉ๋ชจ์ฅ์ผ๋ก ์ง์ ๋ง๋ค ์๋ ์์ต๋๋ค.
(ํ์ผ ์ด๋ฆ์ Dockerfile๋ก ์ ์ฅ, ํ์ฅ์๋ ์์)
์๋๋ Spring Boot + Maven ํ๊ฒฝ์ ๋ง๋ ๊ธฐ๋ณธ์ ์ธ Dockerfile์
๋๋ค.
dockerfile
๋ณต์ฌํธ์ง
# 1๏ธโฃ JDK 17 ๊ธฐ๋ฐ์ ๊ฐ๋ฒผ์ด Docker ์ด๋ฏธ์ง ์ฌ์ฉ
FROM openjdk:17-jdk-slim
# 2๏ธโฃ ์ปจํ
์ด๋ ๋ด ์์
๋๋ ํ ๋ฆฌ ์ค์
WORKDIR /app
# 3๏ธโฃ JAR ํ์ผ์ ์ปจํ
์ด๋๋ก ๋ณต์ฌ
COPY target/*.jar app.jar
//๋ช
๋ น์ด ๋ฐ๋ก ์์ ํด ์ฃผ๊ธฐ ๊ท์ฐฎ์ผ๋๊น app.jar๋ก ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ํฉ์๋ค.
# 4๏ธโฃ ์ปจํ
์ด๋๊ฐ ์คํ๋ ๋ ์คํํ ๋ช
๋ น์ด
ENTRYPOINT ["java", "-jar", "app.jar"]
| ๋ช ๋ น์ด | ์ค๋ช |
|---|---|
FROM openjdk:17-jdk-slim | ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ก JDK 17์ ์ฌ์ฉ (Slim ๋ฒ์ ์ผ๋ก ๊ฐ๋ณ๊ฒ) |
WORKDIR /app | ์ปจํ
์ด๋ ๋ด์์ /app ๋๋ ํ ๋ฆฌ๋ฅผ ์์
๋๋ ํ ๋ฆฌ๋ก ์ค์ |
COPY target/*.jar app.jar | ๋ก์ปฌ์ target/ ํด๋์ ์๋ JAR ํ์ผ์ ์ปจํ
์ด๋์ /app.jar๋ก ๋ณต์ฌ |
ENTRYPOINT ["java", "-jar", "app.jar"] | ์ปจํ
์ด๋๊ฐ ์คํ๋๋ฉด java -jar app.jar๋ฅผ ์คํ |
IntelliJ IDEA์์ Maven ๊ธฐ๋ฐ Spring Boot ํ๋ก์ ํธ์ JAR ํ์ผ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
ํ์ฌ pom.xml์ ํ์ธํ ๊ฒฐ๊ณผ, Spring Boot 3.4.1 + Maven ๊ธฐ๋ฐ ํ๋ก์ ํธ์
๋๋ค.
์ด์ JAR ํ์ผ์ ์์ฑํ์ฌ ์คํ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ , Docker ๋ฐฐํฌ๊น์ง ์ฐ๊ฒฐํ ์ ์๋๋ก ์ค๋นํ๊ฒ ์ต๋๋ค. ๐
1๏ธโฃ IntelliJ IDEA ์คํ
2๏ธโฃ ์ฐ์ธก Maven ํจ๋ ์ด๊ธฐ (View โ Tool Windows โ Maven)
3๏ธโฃ ํ๋ก์ ํธ ๋ฃจํธ์ beta-shop ์๋ Lifecycle ํด๋ฆญ
4๏ธโฃ clean โ package ์์๋๋ก ์คํ
โ
์ด๋ ๊ฒ ์คํํ๋ฉด ์๋์ผ๋ก target/ ํด๋์ JAR ํ์ผ์ด ์์ฑ๋ฉ๋๋ค!
โ
ํ
์คํธ๋ฅผ ๊ฑด๋๋ฐ๋ ค๋ฉด package ์คํ ์ -DskipTests ์ต์
์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
Windows์์ SCP(Secure Copy) ๋๋ WinSCP๋ฅผ ์ฌ์ฉํ์ฌ JAR ํ์ผ์ ์ ์กํฉ๋๋ค.
scp target/beta-shop-0.0.1-SNAPSHOT.jar ubuntu@<Ubuntu ์๋ฒ IP>:/home/ubuntu/
โ ์ค๋ช
scp โ Secure Copy(๋ณด์ ๋ณต์ฌ) ๋ช
๋ น์ดtarget/beta-shop-0.0.1-SNAPSHOT.jar โ Windows์์ ์์ฑ๋ JAR ํ์ผubuntu@<Ubuntu ์๋ฒ IP>:/home/ubuntu/ โ Ubuntu ์๋ฒ์ /home/ubuntu/๋ก ์ ์ก๐ ์์ (Ubuntu ์๋ฒ IP๊ฐ XXX.XXX.1.XXX์ธ ๊ฒฝ์ฐ)
scp target/beta-shop-0.0.1-SNAPSHOT.jar ubuntu@XXX.XXX.1.XXX:/home/ubuntu
/home/ubuntu/ ๋๋ ํ ๋ฆฌ์ beta-shop-0.0.1-SNAPSHOT.jar ํ์ผ ์
๋ก๋Ubuntu ์๋ฒ์ SSH ์ ์ํ ํ ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ์ธ์.
hostname -I
โ ์ถ๋ ฅ ์์:
1XX.1XX.X.XXX
โก ์ด IP ์ฃผ์๊ฐ Ubuntu ์๋ฒ์ ๋ด๋ถ IP(๋ก์ปฌ ๋คํธ์ํฌ)์ ๋๋ค.
โก ๋ง์ฝ ๊ณต์ธ IP(์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ IP) ๊ฐ ํ์ํ๋ค๋ฉด:
curl ifconfig.me
โ ์ถ๋ ฅ ์์:
2XX.X.XXX.XX
โก ์ด IP ์ฃผ์๊ฐ ๊ณต์ธ IP(์ธ๋ถ ์ ์ ๊ฐ๋ฅ) ์ ๋๋ค.
Windows์์ PowerShell์ ์ด๊ณ ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ์ธ์.
scp target/beta-shop-0.0.1-SNAPSHOT.jar ๊ณ์ ๋ช
@XXX.XXX.X.XXX:๊ฒฝ๋ก
โ ์ค๋ช
scp โ ํ์ผ์ ์์ ํ๊ฒ ๋ณต์ฌ(Secure Copy)target/beta-shop-0.0.1-SNAPSHOT.jar โ Windows์์ ๋ณต์ฌํ JAR ํ์ผ ์์นubuntu@XXX.XXX.X.XXX:/home/ubuntu/ โ Ubuntu ์๋ฒ์ /home/ubuntu/ ํด๋์ ์ ์ฅ(IP XXX.XXX.X.XXX์ ์์์ ํ์ธํ Ubuntu ์๋ฒ์ IP๋ก ๋ณ๊ฒฝ)๐ ์์ (Ubuntu ์๋ฒ IP๊ฐ XXX.X.XXX.XX๋ผ๋ฉด)
scp target/beta-shop-0.0.1-SNAPSHOT.jar ubuntu@**XXX.X.XXX.XX**:/home/ubuntu/
์ด์ Dockerfile์ ๊ธฐ๋ฐ์ผ๋ก Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํฉ๋๋ค.
ls /home/ubuntu/
โ ์ถ๋ ฅ ์์
Dockerfile
beta-shop-0.0.1-SNAPSHOT.jar
docker build -t beta-shop-app .
โ ๋น๋ ์๋ฃ ํ ํ์ธ
docker images
โ ์ถ๋ ฅ ์์
REPOSITORY TAG IMAGE ID CREATED SIZE
beta-shop-app latest 123456789abc 2 minutes ago 120MB
์ด์ ๋น๋ํ ์ด๋ฏธ์ง๋ฅผ ์ปจํ ์ด๋๋ก ์คํํฉ๋๋ค.
docker run -d -p 8080:8080 --name beta-shop-container beta-shop-app
โ
์๋ ๋ฐฉ๋ฒ์ ์ฅ์ :
์ปจํ
์ด๋๋ฅผ ์ญ์ ํ์ง ์๊ณ ๋ ์๋ก์ด JAR ํ์ผ์ ์ฝ๊ฒ ์
๋ฐ์ดํธ ๊ฐ๋ฅ
// JAR ํ์ผ ๋ณผ๋ฅจ ๋ง์ดํธ (-v)
docker run -d -p 8080:8080 --name beta-shop-container \
-v /๊ฒฝ๋ก/beta-shop-0.0.1-SNAPSHOT.jar:/app/app.jar \
beta-shop-app
โ ์ค๋ช
d โ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํp 8080:8080 โ Ubuntu ์๋ฒ์ 8080 ํฌํธ๋ฅผ ์ปจํ
์ด๋์ 8080 ํฌํธ์ ๋งคํ-name beta-shop-container โ ์ปจํ
์ด๋ ์ด๋ฆ์ beta-shop-container๋ก ์ง์ beta-shop-app โ ๋น๋ํ Docker ์ด๋ฏธ์ง๋ฅผ ์คํโ ์ปจํ ์ด๋ ์คํ ํ์ธ
docker ps
โ ์ถ๋ ฅ ์์
CONTAINER ID IMAGE PORTS NAMES
abc123456789 beta-shop-app 0.0.0.0:8080->8080/tcp beta-shop-container