Search

Image

Image

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ

Summary

Docker Image๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์œผ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ชจ๋“  ์„ค์ •๊ณผ ์ข…์†์„ฑ์„ ํฌํ•จํ•˜๋Š” ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋Š” ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ€์ง€๋ฉฐ ๊ณ„์ธตํ™”๋œ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์–ด ํšจ์œจ์ ์ธ ์ €์žฅ๊ณผ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฏธ์ง€๋Š” Docker Hub์—์„œ Pull ํ•˜๊ฑฐ๋‚˜ Dockerfile์„ ํ†ตํ•ด ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. JDK 17๊ณผ MySQL 8 ์ด๋ฏธ์ง€๋ฅผ ํ™œ์šฉํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์„ฑ ์‹ค์Šต๊ณผ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Docker ์ด๋ฏธ์ง€๋กœ ๋นŒ๋“œํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Index

Image

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ โ€œ์„ค์ •๊ณผ ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ด๊ธด ํŒจํ‚ค์ง€โ€
์‰ฝ๊ฒŒ ๋น„์œ ํ•˜๋ฉด
โ—ฆ Image = ์š”๋ฆฌ ๋ ˆ์‹œํ”ผ
โ—ฆ Container = ๋ ˆ์‹œํ”ผ๋Œ€๋กœ ๋งŒ๋“  ์‹ค์ œ ์š”๋ฆฌ
ํฌ์ธํŠธ
โ—ฆ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ฐ˜๋ณต ์‚ฌ์šฉ ๊ฐ€๋Šฅ
โ—ฆ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ

Docker Image๋ž€?

Docker Image๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์„ค์ •๊ณผ ์ข…์†์„ฑ์„ ํฌํ•จํ•˜๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. ์ด ์ด๋ฏธ์ง€๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์‹คํ–‰ ํ™˜๊ฒฝ ์„ค์ •, ์‹œ์Šคํ…œ ๋„๊ตฌ ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
Docker Image๋Š” ๋ถˆ๋ณ€(Immutable)์ด๋ฉฐ ๊ณ„์ธตํ™”๋œ(Layered) ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

Docker Image์˜ ํŠน์ง•

โ€ข
์ฝ๊ธฐ ์ „์šฉ: ์ด๋ฏธ์ง€๋Š” ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ์ฝ๊ธฐ ์ „์šฉ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค.
โ€ข
๊ณ„์ธต ๊ตฌ์กฐ: ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด ํšจ์œจ์ ์ธ ์ €์žฅ๊ณผ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์ด์‹์„ฑ: Docker๊ฐ€ ์„ค์น˜๋œ ๋ชจ๋“  ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•˜๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
โ€ข
์žฌ์‚ฌ์šฉ์„ฑ: ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Image ์ƒ์„ฑ ๋ฐฉ๋ฒ•

1.
Docker Pull
2.
Dockerfile

Docker Pull

Docker Hub๋‚˜ ๋‹ค๋ฅธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค
docker pull [์ด๋ฏธ์ง€๋ช…]:[ํƒœ๊ทธ]
Bash
๋ณต์‚ฌ
โ€ข
์˜ˆ์‹œ
docker pull nginx:latest
Bash
๋ณต์‚ฌ
docker pull ubuntu:20.04
Bash
๋ณต์‚ฌ
์ด ๋ฐฉ๋ฒ•์€ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ๊ณต์‹ ์ด๋ฏธ์ง€๋‚˜ ๊ฒ€์ฆ๋œ ์ด๋ฏธ์ง€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Docker Hub์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๊ณต์‹ ์ด๋ฏธ์ง€๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค:
โ€ข
ubuntu, centos, debian ๋“ฑ์˜ OS ์ด๋ฏธ์ง€
โ€ข
nginx, apache ๋“ฑ์˜ ์›น ์„œ๋ฒ„ ์ด๋ฏธ์ง€
โ€ข
mysql, postgresql, mongodb ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€
โ€ข
node, python, java ๋“ฑ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋Ÿฐํƒ€์ž„ ์ด๋ฏธ์ง€

Docker Pull์˜ ์žฅ์ 

โ€ข
์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต์‹ ์ด๋ฏธ์ง€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
โ€ข
์ง์ ‘ ๊ตฌ์„ฑํ•  ํ•„์š” ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
โ€ข
๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•จ (ํƒœ๊ทธ๋ฅผ ํ†ตํ•œ ๋ฒ„์ „ ์ง€์ •)
โ€ข
์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๊ฒ€์ฆ๋œ ์ด๋ฏธ์ง€ ํ™œ์šฉ ๊ฐ€๋Šฅ

Dockerfile

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

๊ธฐ๋ณธ์ ์ธ Dockerfile ๊ตฌ์กฐ

Dockerfile ์ฃผ์š” ๋ช…๋ น์–ด

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

Image ์‹ค์Šต

Docker ์ด๋ฏธ์ง€ ์‹ค์Šต ๊ณ„ํš

1. ๋ชฉํ‘œ

1.
JDK 17 ์ด๋ฏธ์ง€์™€ MySQL 8 ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์„ฑ
2.
Spring Boot ์›น ์•ฑ์„ ํฌํ•จํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ  Docker Hub์— Push

2. ์‹ค์Šต ์ค€๋น„

โ€ข
Docker ์„ค์น˜ ์™„๋ฃŒ
โ€ข
Docker Hub ๊ณ„์ • ์ค€๋น„
โ€ข
๊ฐ„๋‹จํ•œ Spring Boot ์›น ์•ฑ ์ค€๋น„ (app.jar ๋˜๋Š” Spring Boot ํ”„๋กœ์ ํŠธ)

3. ๋‹จ๊ณ„๋ณ„ ์‹ค์Šต

Step 1: ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ

# JDK 17 docker pull openjdk:17 # MySQL 8 docker pull mysql:8
Bash
๋ณต์‚ฌ
โ€ข
ํ™•์ธ
docker images
Bash
๋ณต์‚ฌ

Step 2: MySQL ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

docker run -d \ --name my-mysql \ -e MYSQL_ROOT_PASSWORD=1234 \ -e MYSQL_DATABASE=testdb \ -p 3306:3306 \ mysql:8
Bash
๋ณต์‚ฌ
โ€ข
์„ค๋ช…
โ—ฆ
d: ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰
โ—ฆ
-name: ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„
โ—ฆ
e: ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
โ—ฆ
p: ํฌํŠธ ๋งคํ•‘ (ํ˜ธ์ŠคํŠธ:์ปจํ…Œ์ด๋„ˆ)

Step 3: JDK ๊ฐœ๋ฐœํ™˜๊ฒฝ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ

1.
Dockerfile ์ž‘์„ฑ
# Base image FROM openjdk:17 # ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ WORKDIR /app # Spring Boot ์•ฑ ๋ณต์‚ฌ COPY target/myapp.jar /app/myapp.jar # ํฌํŠธ ์˜คํ”ˆ EXPOSE 8080 # ์•ฑ ์‹คํ–‰ CMD ["java", "-jar", "myapp.jar"]
Docker
๋ณต์‚ฌ
โ€ข
์ด๋ฏธ์ง€ ๋นŒ๋“œ
docker build -t my-spring-app:1.0 .
Bash
๋ณต์‚ฌ
โ€ข
์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker run -d -p 8080:8080 --name spring-app my-spring-app:1.0
Bash
๋ณต์‚ฌ
ํฌํŠธ ๋งคํ•‘(Port Mapping) ์„ค๋ช…:
Docker์˜ -p 8080:8080 ์˜ต์…˜์€ ํฌํŠธ ๋งคํ•‘์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
[ํ˜ธ์ŠคํŠธ ํฌํŠธ]:[์ปจํ…Œ์ด๋„ˆ ํฌํŠธ]
โ€ข
์™ผ์ชฝ(8080): ํ˜ธ์ŠคํŠธ ๋จธ์‹ (๋‚ด ์ปดํ“จํ„ฐ)์˜ ํฌํŠธ
โ€ข
์˜ค๋ฅธ์ชฝ(8080): ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ํฌํŠธ
์ด ์„ค์ •์˜ ์˜๋ฏธ: ๋‚ด ์ปดํ“จํ„ฐ์˜ 8080 ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์ด Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ 8080 ํฌํŠธ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, -p 9090:8080์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ํ˜ธ์ŠคํŠธ์˜ 9090 ํฌํŠธ๋กœ ์ ‘์†ํ–ˆ์„ ๋•Œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ 8080 ํฌํŠธ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
โ€ข
๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:8080 ์ ‘์† ํ™•์ธ

Step 4: Docker Hub์— Push

โ€ข
๋กœ๊ทธ์ธ
docker login
Bash
๋ณต์‚ฌ
โ€ข
ํƒœ๊ทธ ์ง€์ •
docker tag my-spring-app:1.0 <DockerHubID>/my-spring-app:1.0
Bash
๋ณต์‚ฌ
โ€ข
Push
docker push <DockerHubID>/my-spring-app:1.0
Bash
๋ณต์‚ฌ

Step 5: Docker Compose ์‹ค์Šต (์˜ต์…˜)

โ€ข
docker-compose.yml
version: '3' services: db: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: 1234 MYSQL_DATABASE: testdb ports: - "3306:3306" app: build: . ports: - "8080:8080" depends_on: - db
YAML
๋ณต์‚ฌ
โ€ข
์‹คํ–‰
docker-compose up -d
Bash
๋ณต์‚ฌ
โ€ข
MySQL๊ณผ Spring Boot ์•ฑ์„ ๋™์‹œ์— ์‹คํ–‰

Tip & ํฌ์ธํŠธ

โ€ข
MySQL ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐœ๋ฐœํ™˜๊ฒฝ์šฉ์ด๋ฏ€๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋‹จ์ˆœํ™” ๊ฐ€๋Šฅ
โ€ข
Spring Boot ์•ฑ์—์„œ DB ์—ฐ๊ฒฐ URL ์˜ˆ์‹œ:
spring.datasource.url=jdbc:mysql://db:3306/testdb spring.datasource.username=root spring.datasource.password=1234
Plain Text
๋ณต์‚ฌ
โ€ข
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Docker Compose ํ™˜๊ฒฝ์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„(db)๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
No ํƒœ๊ทธ
6