[Docker] ๐Ÿš€ ์šฐ๋ฆฌ ์กฐ์ง์˜ Docker ์ „ํ™˜๊ธฐ: ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ฐˆ์•„ํƒ„ ์ด์œ ์™€ ๊ธฐ๋ก-3

KIM Jongwanยท2024๋…„ 11์›” 13์ผ
0
post-thumbnail

๐Ÿงฑ ๋‚˜๋งŒ์˜ Docker ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ: Dockerfile๋กœ ์ปจํ…Œ์ด๋„ˆ ์ž๋™ํ™”ํ•˜๊ธฐ

์•ž์„  ํฌ์ŠคํŠธ์—์„œ๋Š” Docker์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•๊ณผ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๊ณผ์ •์„ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค.
๊ทธ ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ๋Š” docker pull ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Docker Hub์—์„œ ์ด๋ฏธ์ง€๋กœ ๋‚ด๋ ค๋ฐ›์•„ ์‚ฌ์šฉํ–ˆ์ฃ .

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

์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ๊ฐ€ ๋ฐ”๋กœ Dockerfile์ž…๋‹ˆ๋‹ค.


๐Ÿ“„ Dockerfile์ด๋ž€?

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

์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” docker build ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€๋กœ ์›ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ Dockerfile ์ž‘์„ฑ ์˜ˆ์‹œ

์•ž์„œ ์‹ค์Šตํ–ˆ๋˜ Ubuntu 22.04 + Nginx ํ™˜๊ฒฝ์„ Dockerfile๋กœ ์ •์˜ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

# ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€
FROM ubuntu:22.04
MAINTAINER jw.kim <jongbell4@gmail.com>

# ๋น„๋Œ€ํ™” ๋ชจ๋“œ ์„ค์ • (ํŒจํ‚ค์ง€ ์„ค์น˜ ์‹œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐฉ์ง€)
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul

# ํŒจํ‚ค์ง€ ์„ค์น˜
RUN apt-get update && apt-get install -y tzdata
RUN apt-get install -y nginx

# HTML ํŒŒ์ผ ๋ณต์‚ฌ
COPY index.html /var/www/html/index.html

# ์™ธ๋ถ€ ํฌํŠธ ์ง€์ • (๋ช…์‹œ์  ์„ ์–ธ)
EXPOSE 80/tcp

# ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ ์‹คํ–‰๋  ๋ช…๋ น์–ด
CMD service nginx start && tail -f /dev/null

๐Ÿ” ์ฃผ์š” Dockerfile ๋ช…๋ น์–ด ์ •๋ฆฌ

๋ช…๋ น์–ด์„ค๋ช…
FROM์‚ฌ์šฉํ•  ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์ง€์ • (ex. ubuntu:22.04)
MAINTAINER์ด๋ฏธ์ง€ ์ž‘์„ฑ์ž ์ •๋ณด (์„ ํƒ)
ARG์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ์ ์— ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜ ์ •์˜
ENV์ด๋ฏธ์ง€/์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
RUN์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ์‹œ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด
COPY, ADDํ˜ธ์ŠคํŠธ์˜ ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ด๋ฏธ์ง€๋กœ ๋ณต์‚ฌ
EXPOSE์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ๋ฅผ ๋ช…์‹œ (์‹ค์ œ ํฌํŠธ ์—ด๋ฆผ์€ ์•„๋‹˜)
CMD์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด

๐Ÿ’ก ์ฐธ๊ณ :

  • ARG๋Š” build ์‹œ์ ์—๋งŒ ์œ ํšจํ•˜๊ณ ,
  • ENV๋Š” ์‹คํ–‰ ์ค‘์—๋„ ์ ์šฉ๋˜๋ฉฐ ARG๋ณด๋‹ค ์šฐ์„  ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ”จ ์ด๋ฏธ์ง€ ๋นŒ๋“œ & ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

# ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ (์˜ˆ์‹œ)
$ tree ubuntu-image
ubuntu-image
โ”œโ”€โ”€ Dockerfile
โ””โ”€โ”€ index.html

# ์ด๋ฏธ์ง€ ๋ชฉ๋ก ํ™•์ธ
$ docker images

# Dockerfile ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€ ๋นŒ๋“œ
$ docker build -t ubuntu-nginx .

# ๋นŒ๋“œ ํ›„ ์ด๋ฏธ์ง€ ํ™•์ธ
$ docker images
REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
ubuntu-nginx   latest    4fb8xxxxxxx     3 minutes ago   ...

๐Ÿš€ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ & ํ…Œ์ŠคํŠธ

์ด์ œ ์ƒˆ๋กœ ๋นŒ๋“œํ•œ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ํฌํŠธ ํฌ์›Œ๋”ฉ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด ์›น ์š”์ฒญ์„ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

# ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ (ํ˜ธ์ŠคํŠธ 80ํฌํŠธ๋ฅผ ์ปจํ…Œ์ด๋„ˆ 80ํฌํŠธ์— ์—ฐ๊ฒฐ)
$ docker run -itd --name container-unginx -p 80:80 ubuntu-nginx

# ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ํ™•์ธ
$ docker ps

# ์ปจํ…Œ์ด๋„ˆ IP ํ™•์ธ
$ docker inspect container-unginx | grep IPAddress
"IPAddress": "172.17.0.10",

# ์ปจํ…Œ์ด๋„ˆ์— HTTP ์š”์ฒญ
$ curl http://172.17.0.10
<h1> hello this is ubuntu-nginx image container-unginx</h1>

๐ŸŽ‰ Dockerfile ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“  ์ด๋ฏธ์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ , ์›น ์š”์ฒญ๋„ ์ž˜ ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!


โœ… ๋งˆ๋ฌด๋ฆฌ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Dockerfile์„ ์ž‘์„ฑํ•˜๊ณ  ์ง์ ‘ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•œ ๋’ค, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋Š” ๊ณผ์ •์„ ๋‹ค๋ค˜์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ์ด ์˜ˆ์‹œ๋Š” ๋งค์šฐ ๋‹จ์ˆœํ•œ ํ˜•ํƒœ์ด๊ณ , ์‹ค๋ฌด์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ ํ•˜๋‚˜์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ๊ตฌ๋™ํ•˜๋Š” ๋ฐฉ์‹์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.
์˜ˆ:

  • Nginx ์ปจํ…Œ์ด๋„ˆ
  • API ์ปจํ…Œ์ด๋„ˆ
  • Jenkins ์ปจํ…Œ์ด๋„ˆ ๋“ฑ

์ €ํฌ ํšŒ์‚ฌ์—์„œ๋„ ์‹ค์ œ๋กœ๋Š” Ubuntu, Rocky Linux ์ผ๋ถ€๋ฅผ ์ œ์™ธํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•˜๋‚˜์˜ ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” ๋„คํŠธ์›Œํฌ ์„ค์ •, ์Šคํ† ๋ฆฌ๋ฆฌ ์„ค์ • ๋“ฑ Docker๋ฅผ ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์‹ฌํ™” ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด ์ถ”๊ฐ€์ ์œผ๋กœ ์•Œ์•„๋ณด๋„๋กํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

profile
3๋…„์ฐจ ๋ฐฑ์•ค๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€