๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ธํ”„๋ผ

Dockerfile์„ ํ™œ์šฉํ•œ ์ž์ฒด ์ด๋ฏธ์ง€ ๋นŒ๋“œ

๐Ÿ’ก Dockerfile์ด๋ž€

์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ • ํŒŒ์ผ๋กœ, ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

 

Dockerfile์€ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ž‘์„ฑ๋˜๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ช…๋ น์–ด๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ช…๋ น์–ด๋Š” ๊ธฐ๋ณธ ์ด๋ฏธ์ง€(๋ถ€๋ชจ ์ด๋ฏธ์ง€)์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๊ณ , ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ตœ์ข… ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ Dockerfile์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ๊ตฌ๋ฌธ๋“ค์ž…๋‹ˆ๋‹ค.

FROM ๊ธฐ๋ณธ์ด ๋˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
RUN ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์„ค์ •์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
COPY ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
ADD COPY์™€ ๋น„์Šทํ•˜์ง€๋งŒ, URL๋กœ๋ถ€ํ„ฐ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
WORKDIR ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
ENV ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
EXPOSE ํฌํŠธ๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
CMD ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
ENTRYPOINT ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
VOLUME ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•  ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
USER ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์‚ฌ์šฉ์ž๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
ARG ๋นŒ๋“œ ์‹œ์—๋งŒ ์‚ฌ์šฉ๋˜๋Š” ์ธ์ž๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ตฌ๋ฌธ๋“ค์€ Dockerfile์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋‹ค์–‘ํ•œ ๋‹ค๋ฅธ ๊ตฌ๋ฌธ๋“ค๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ๋ฌธ๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ์›ํ•˜๋Š” ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋„์ปค ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์— ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

FROM ์–ด๋–ค ๊ฑฐ ์œ„์— JDK๋ฅผ ์–น์„ ๊ฒƒ์ธ์ง€
ARG .jar๋“ฑ ํŒŒ์ผ ์ข…๋ฃŒ
COPY build/libs/discovery-server-0.0.1-SNAPSHOT.jar app.jar ๋นŒ๋“œ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ app.jar ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ
EXPOSE 80 # ๋…ธ์ถœ ํฌํŠธ๋ฒˆํ˜ธ๋กœ yml ํŒŒ์ผ์— ์ž‘์„ฑํ–ˆ์œผ๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅ
ENTRYPOINT ["java","-jar","/app.jar"]

https://spring.io/guides/topicals/spring-boot-docker/

 

Getting Started | Spring Boot Docker

The Spring Boot Maven and Gradle plugins use buildpacks in exactly the same way that the pack CLI does in the following examples. The resulting images are identical, given the same inputs. Cloud Foundry has used containers internally for many years now, an

spring.io

 

๐Ÿ“ŒDockerfile ์ ์šฉ

0.Dockerfile ์ƒ์„ฑ

1. Dockerfile ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ

FROM eclipse-temurin:17
ARG JAR_FILE=*.jar
COPY build/libs/project-0.0.1-SNAPSHOT.jat app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

 

2. ์ž๋ฐ” ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ

Grdale -> Tasks->clean ํ›„ Grdale -> Tasks->build ๋˜๋Š” ํ„ฐ๋ฏธ๋„ ์ฐฝ์—์„œ ./gradlew clean build ์ž…๋ ฅ

์œ„ ./gradlew clean build ๋ช…๋ น์–ด๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ํ™”๋ฉด๊ณผ ๊ฐ™์ด Gradle์—์„œ build๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

3. build->libs->ํŒŒ์ผ๋ช…์œผ๋กœ COPY ์ˆ˜์ • ํ›„ docker build

# ๋„์ปค ์ด๋ฏธ์ง€๋กœ ๋นŒ๋“œ ๋ช…๋ น์–ด
docker build -t myorg/myapp .

์ธํ…”๋ฆฌ์ œ์ด ํ„ฐ๋ฏธ๋„ ์ฐฝ์—์„œ ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ฑ๊ณตํ•จ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

4. ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹คํ–‰ํ•˜์—ฌ ์ธํ…”๋ฆฌ์ œ์ด ์—†์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

docker run -p 8761:8761 myorg/myapp

 

 

# ๋ฆฌ๋ˆ…์Šค ์Šค๋ƒ…์ƒต ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋„์ปค๊นŒ์ง€ ์„ค์น˜๋œ PC๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์ฐ์–ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค^^