JUST DO IT!

Docker์™€ Docker File - TIL230519 ๋ณธ๋ฌธ

TIL

Docker์™€ Docker File - TIL230519

sunhokimDev 2023. 5. 19. 22:22

๐Ÿ“š KDT WEEK 7 DAY 5 TIL

  • AWS Lambda
  • Docker
    • Docker ๋ช…๋ น์–ด
    • Docker File
    • Docker Port forwarding

๐ŸŸฅ AWS Lambda

๋ณ„๋„์˜ ์„œ๋ฒ„์—†์ด ๋‹จ์ˆœ ํ•จ์ˆ˜๋งŒ์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์„œ๋น„์Šค

 

ํŠน์ • ์ด๋ฒคํŠธ๋‚˜ ํ–‰์œ„์— ๋Œ€ํ•ด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์„ ์›ํ•  ๋•Œ ์‚ฌ์šฉ

> ํŠธ๋ฆฌ๊ฑฐ์— ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ์„ค์ •ํ•ด์„œ Lambda๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.

 

ex) S3์˜ ๋ฐ์ดํ„ฐ ์ „์†ก๋งˆ๋‹ค Lambda ์ž‘๋™

1. Lambda ํ•จ์ˆ˜ ์ƒ์„ฑ

2. S3 ํŠน์ • ๋ฒ„ํ‚ท ์„ค์ • > ์ด๋ฒคํŠธ ์•Œ๋ฆผ ์ƒ์„ฑ > ๊ฐ์ฒด ์ „์†ก ์ด๋ฒคํŠธ์— ์ฒดํฌ > ํ•ด๋‹น Lambda ํ•จ์ˆ˜ ์„ค์ •

3. ํ•ด๋‹น ๋ฒ„ํ‚ท์— ํŒŒ์ผ์ด ์ƒˆ๋กœ ์˜ฌ๋ผ์˜ค๋ฉด Lambda ํ•จ์ˆ˜๊ฐ€ ์ฒ˜๋ฆฌํ•จ์— ๋”ฐ๋ผ CloudWatch ๋กœ๊ทธ์— ๊ธฐ๋ก๋จ

 


 

๐ŸŸฆ Docker

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹ ์†ํ•˜๊ฒŒ ๊ตฌ์ถ•, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค

 

>> ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ํ‘œ์ค€ํ™”๋œ ์œ ๋‹›์œผ๋กœ ํŒจํ‚ค์ง•ํ•˜์—ฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์‹œ์Šคํ…œ ๋„๊ตฌ, ์ฝ”๋“œ, ๋Ÿฐํƒ€์ž„ ๋“ฑ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ด์•„๋‘์–ด ์‹ ์†ํ•˜๊ฒŒ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

DockerFile์€ ์†Œ์Šค ์ฝ”๋“œ๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ํŽธํ•˜๋‹ค.

 

์ด๋ฏธ์ง€(Image)

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•„์š”ํ•œ ์š”์†Œ

์ปจํ…Œ์ด๋„ˆ์˜ ๋ชฉ์ ์— ๋งž๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ์˜์กด์„ฑ์ด ์„ค์น˜๋˜์–ด ์žˆ๋‹ค.

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ณ„์ธต์œผ๋กœ ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ๋กœ ์กด์žฌํ•œ๋‹ค.

 

Docker Image์˜ ๊ตฌ์„ฑ ์š”์†Œ

  • ๊ธฐ๋ณธ OS์™€ ๊ฐ™์€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์‹คํ–‰ํ™˜๊ฒฝ
  • ์†Œํ”„ํŠธ์›จ์–ด ์ž์ฒด(์ฝ”๋“œ)
  • ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ํŒŒ์ผ ์‹œ์Šคํ…œ ์Šค๋ƒ…์ƒท
  • ํ™˜๊ฒฝ ์„ค์ • ๋ณ€์ˆ˜
  • ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ(์ด๋ฏธ์ง€ ์ž์ฒด์— ๋Œ€ํ•œ ์ •๋ณด)

Docker Registry : Docker Image๋“ค์˜ ๋ณด๊ด€์†Œ > docker hub๊ฐ€ ๊ฐ€์žฅ ์œ ๋ช…

 

์ปจํ…Œ์ด๋„ˆ(Container)

ํ˜ธ์ŠคํŠธ์™€ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ๊ฒฉ๋ฆฌ๋œ ์‹œ์Šคํ…œ ์ž์›๊ณผ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค

์ด๋ฏธ์ง€๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ปจํ…Œ์ด๋„ˆ ๊ณ„์ธต์— ์ €์žฅํ•œ๋‹ค.

>> ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ฌด์—‡์„ ํ•˜๋“  ์ด๋ฏธ์ง€์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค!

 

 

Docker ์•„ํ‚คํ…์ฒ˜

Docker๋Š” ๊นƒํ—ˆ๋ธŒ์™€ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Docker Hub๊ฐ€ ์กด์žฌํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ pull ํ•˜๊ฑฐ๋‚˜ pushํ•  ์ˆ˜ ์žˆ๋‹ค.

 


 

Docker ๋ช…๋ น์–ด

 

1. Container ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ ๊ด€๋ จ ๋ช…๋ น์–ด

  • run : ์ƒˆ๋กœ์šด container ์ƒ์„ฑ ๋ฐ ์‹คํ–‰
    • -d ์˜ต์…˜์œผ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋„ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • stop : container ์ค‘์ง€
  • start : container ์‹คํ–‰
  • restart : container ์žฌ์‹คํ–‰

2. Container ๊ด€๋ฆฌ ๊ด€๋ จ ๋ช…๋ น์–ด

  • ps : container ํ™•์ธ
  • rm : container ์‚ญ์ œ

3. Container ์‹คํ–‰ ๊ด€๋ฆฌ ๊ด€๋ จ ๋ช…๋ น์–ด

  • logs : container log ํ™•์ธ
  • exec : ์‹คํ–‰๋œ Container์— ์ž‘์—…ํ•˜๊ธฐ

4. image ๊ด€๋ฆฌ ๊ด€๋ จ ๋ช…๋ น์–ด

  • images : image ํ™•์ธ
  • rmi : image ์‚ญ์ œ
  • pull : image ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ
  • push : image ์—…๋กœ๋“œํ•˜๊ธฐ
  • tag : image ํƒœ๊ทธ ์ง€์ •ํ•˜๊ธฐ(์ด๋ฏธ์ง€ ๋ณ„์นญ ์ง€์ •ํ•˜๊ธฐ)
    • docker tag image1 image2 : ๋ณธ๋ž˜ ์กด์žฌํ•˜๋˜ image1์˜ ๋ณ„์นญ์œผ๋กœ image2๋ฅผ ๋ณ„๊ฐœ๋กœ ๋˜ ๊ฐ€์ง€๊ฒŒ๋จ.
    • image1 ๊ณผ image2์˜ IMAGE ID๋Š” ๊ฐ™๋‹ค.

 

 


 

Docker File

 

ํ•ด๋‹น ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ด๋ฏธ์ง€๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•œ Docker์—๊ฒŒ ์ฃผ๋Š” ๋ช…๋ น๋“ค ํฌํ•จํ•œ ํŒŒ์ผ

Docker Image๊ฐ€ Dockerfile์„ ๊ธฐ์ค€์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ ํ•˜๋‚˜์˜ Docker Container์•ˆ์—์„œ ์‹คํ–‰๋œ๋‹ค.

์–ด๋–ค ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•  ๊ฒƒ์ด๋ƒ? , ์ด ํ”„๋กœ๊ทธ๋žจ์„ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ•  ๊ฒƒ์ด๋ƒ? ๋“ฑ์„ ๋ช…์‹œํ•œ๋‹ค

 

๊ธฐ๋ณธ ๋ช…๋ น์–ด

  • FROM : ๊ธฐ๋ณธ์ด ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ด๋ฏธ์ง€, ์ฝœ๋ก  ๋’ค์—๋Š” ๋ฒ„์ „ ์ด๋ฆ„์ด ๋ถ™๋Š”๋‹ค.
  • COPY : ์ฒซ ๋ฒˆ์งธ ์ธ์ž์— ๋ณต์‚ฌํ•  ํŒŒ์ผ, ๋‘ ๋ฒˆ์งธ ์ธ์ž์— ๋ณต์‚ฌ๋˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์“ฐ์ธ๋‹ค.
  • RUN : ๋นŒ๋“œ์‹œ ์…€ ์Šคํฌ๋ฆฝํŠธ ํ˜น์€ ๋ช…๋ น์„ ์ง€์ •ํ•œ๋‹ค.

Container๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

1. CMD

CMD๋Š” docker run ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ง€์ •ํ•œ ํŒŒ์ผ(์‰˜ ์Šคํฌ๋ฆฝํŠธ ๋“ฑ)์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํŒŒ์ผ๋กœ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • CMD ["./cmd1.sh"]
    • docker run imageName ์‚ฌ์šฉ์‹œ ./cmd1.sh ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
    • docker run imageName cmd2.sh ์‚ฌ์šฉ์‹œ cmd2.sh๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

2. ENTRYPOINT

CMD์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Container๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ์ง€์ •ํ•œ๋‹ค.

CMD์™€ ํ•จ๊ป˜ ์“ฐ์ด๊ฒŒ ๋˜์–ด, CMD ๊ฐ’์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‹คํ–‰๋˜๊ณ , ENTRYPOINT๊ฐ€ ๊ธฐ๋ณธ ๋ช…๋ น์–ด ์—ญํ• ์„ ๋งก๋Š”๋‹ค.

 

  • ENTRYPOINT ["entrypoint.sh"]
  • CMD ["param1", "param2"]
    • docker run imageName ์‚ฌ์šฉ์‹œ entrypoint.sh param1 param2 ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
    • docker run imageName cmd2 ์‚ฌ์šฉ์‹œ entrypoint.sh cmd2 ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
    • docker run --entrypoint="cmd3.sh" imageName ์‚ฌ์šฉ์‹œ /cmd3.sh param1 param2 ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

์ด์ฒ˜๋Ÿผ ๋‘ ๊ฐ€์ง€์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋ƒฅ ์ตœ๋Œ€ํ•œ CMD๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ธฐ์–ตํ•˜๋ฉด ์ข‹๋‹ค.

์ฐธ๊ณ ๋กœ Docker File์— ์ด ๋ช…๋ น์–ด๋“ค์ด ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉ๋˜๋ฉด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๊ฒƒ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค.

 

๊ธฐํƒ€ ํ‚ค์›Œ๋“œ

  • WORKDIR : ์ž‘์—…๊ฒฝ๋กœ ๋ณ€๊ฒฝ, ์ด ์•„๋ž˜๋ถ€ํ„ฐ๋Š” ๊ธฐ๋ณธ๊ฒฝ๋กœ๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒฝ๋กœ๋กœ ๋ฐ”๋€๋‹ค.
  • METATAINER : ๋ฉ”์ธํ…Œ์ด๋„ˆ ์ •๋ณด
  • ARG : Docker Image๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜ ์ง€์ •
  • ENV : ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ / ์ตœ์ข…์ ์œผ๋กœ ์ด๋ฏธ์ง€์— ์ €์žฅ๋œ๋‹ค.
  • USER : ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์œ ์ € ID
  • EXPOSE : ํ˜ธ์ŠคํŠธ์™€ ์—ฐ๊ฒฐํ•  ํฌํŠธ๋ฒˆํ˜ธ

๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋Š” Docker File์˜ ์˜ˆ์‹œ์ด๋‹ค.

 

ex) Python์˜ Dockerfile

FROM python:3.9-alpine
WORKDIR /root
ADD ์‹คํ–‰ํ• ํŒŒ์ผ.py .		#WORKDIR์„ ์ง€์ •ํ–ˆ์œผ๋ฏ€๋กœ ์ง€์ • ํด๋”๋ฅผ ๊ธฐ์ค€์œผ๋กœ .์„ ๊ผญ ์จ์•ผํ•œ๋‹ค
CMD ["python3", "์‹คํ–‰ํ• ํŒŒ์ผ.py"]

 

ex) Airflow

FROM python:3.7-slim-buster
ENV DEBIAN_FRONTEND noninteractive

# ์ด๋ฏธ์ง€์—๋„ ์ตœ์ข… ์ €์žฅ๋จ
ARG AIRFLOW_USER_HOME=/usr/local/airflow
ARG AIRFLOW_VERSION=1.10.9

COPY config/airflow.cfg ${AIRFLOW_USER_HOME}/airflow.cfg

# ๋นŒ๋“œํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น
RUN chown -R airflow: ${AIRFLOW_USER_HOME}

EXPOSE 8080 5555 8793
USER airflow
WORKDIR ${AIRFLOW_USER_HOME}

# /entrypoint.sh webserver
ENTRYPOINT ["/entrypoint.sh"]
CMD ["webserver"]

 


 

Docker port forwarding

 

ํ˜ธ์ŠคํŠธ(๋ณ„๋„์˜ ๋ฌผ๋ฆฌ์ ์ธ ์„œ๋ฒ„)์— ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋ ค๋ฉด ๋ณ„๋„์˜ ํฌํŠธ๋กœ ์„œ๋กœ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉํ•  ๋ช…๋ น์–ด docker run์— ์ถ”๊ฐ€์ ์œผ๋กœ ์˜ต์…˜์„ ๋„ฃ์–ด ํฌํŠธํฌ์›Œ๋”ฉ์„ ์ง„ํ–‰ํ•œ๋‹ค.

 

๋”๋ณด๊ธฐ

AWS Lambda, Docker, CloudWatch, Devops, ECS / ECR, ApiGateway

Docker ์‹ค์Šต