• toc {:toc}

Docker Hub

  • Repositoryes
    • μ»¨ν…Œμ΄λ„ˆ 이미지 push, pull
  • Official Images
    • 높은 μˆ˜μ€€μ˜ μ»¨ν…Œμ΄λ„ˆ 이미지λ₯Ό 제곡 받을 수 μžˆλ‹€.
  • Team & Organizations
    • μ»¨ν…Œμ΄λ„ˆ μ΄λ―Έμ§€μ˜ 개인적인 리포에 λŒ€ν•œ 접근을 λ‹€λ£° 수 μžˆλ‹€.
  • IaC 의 μ†Œν”„νŠΈμ›¨μ–΄ 개발과 μœ μ‚¬ν•œ κ³Όμ •
  • python/C++ 의 μ†ŒμŠ€μ½”λ“œλ₯Ό λ§Œλ“œλŠ” 것과 같이 Dockerfile 을 λ§Œλ“ λ‹€.
  • Docker λŠ” Dockerfile 의 instruction 을 읽어 이미지λ₯Ό λ§Œλ“ λ‹€.
  • 컴파일/λΉŒλ“œν•΄μ„œ μ‹€ν–‰νŒŒμΌμ„ λ§Œλ“œλŠ” 것과 같이 λ§Œλ“  μ΄λ―Έμ§€λ‘œ μ‹€ν–‰ν•  수 μžˆλŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό λ§Œλ“ λ‹€.
  • μ‹€ν–‰ νŒŒμΌμ„ μ‹€ν–‰ν•˜λ©΄ C++ 은 main ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄ μ‹€ν–‰ν•˜κ³  python 은 .py μ‹€ν–‰νŒŒμΌμ„ μ‹€ν–‰ν•˜λŠ” 것과 같이 Docker CLI 둜 μ‹€ν–‰ λͺ…령을 λ‚΄λ € μ»¨ν…Œμ΄λ„ˆκ°€ λͺ…령을 μ‹€ν–‰ν•˜λ„λ‘ λ§Œλ“ λ‹€.

Dockerfile

  • Dockerfile : μ»¨ν…Œμ΄λ„ˆ 이미지λ₯Ό λ§Œλ“€κΈ°μœ„ν•΄ ν•„μš”ν•œ λͺ¨λ“  μ»€λ©˜λ“œλ₯Ό 순차적으둜 ν¬ν•¨ν•œ ν…μŠ€νŠΈ 파일
    • Docker λŠ” Dockerfile 둜 λΆ€ν„° instruction 을 읽고 μžλ™μ μœΌλ‘œ 이미지λ₯Ό λΉŒλ“œν•œλ‹€.
    • Docker μ΄λ―Έμ§€λŠ” Dockerfile instruction 을 λ‚˜νƒ€λ‚΄λŠ” 각각의 read-only layerλ“€λ‘œ κ΅¬μ„±λœλ‹€.
      • Layer λŠ” 많이 μŒ“μ„ 수 μ—†λ‹€
FROM ubuntu:latest    # sub layer둜 ubuntuλ₯Ό μ‚¬μš©ν•˜κ² λ‹€.
MAINTAINER fnndsc "dev@babymri.org"    # Dockerfile의 μ†Œμœ κΆŒμž
 
RUN apt-get update \
  && apt-get install -y python3-pip python3-dev \    # &&둜 ꡬ뢄을 ν•  수 μžˆλ‹€.
  && cd /usr/local/bin \                             
  && ln -s /usr/bin/python3 python \
  && pip3 install --upgrade pip
 
ENTRYPOINT ["python3"]    # 

Dockerfile 의 λͺ©μ  : ν™˜κ²½ μ„€μ •

FROM, RUN λ“± λΉ¨κ°„ λͺ…령을 μ‚¬μš©ν•  λ•Œ layer κ°€ μŒ“μ΄κ²Œ λ˜λŠ”λ° layer κ°€ 보톡 μ•½ 30 개 μ΄μƒμœΌλ‘œ λ§Žμ•„μ§€λ©΄ too much layer 였λ₯˜κ°€ λ°œμƒν•˜κ²Œ λœλ‹€. λ•Œλ¬Έμ— RUN 을 &&λ₯Ό 톡해 μ—°κ²°ν•œ 것.

FROM python:3        # python3 docker imageλ‘œλΆ€ν„° layerλ₯Ό λ§Œλ“ λ‹€.
COPY . /app          # docker client의 ν˜„μž¬ 디렉토리 νŒŒμΌλ“€μ„ /app 폴더에 μΆ”κ°€
CMD [ "python", "/app/myapp.py" ]    # μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ‹€ν–‰ν•  μ»€λ©˜λ“œλ₯Ό λͺ…μ‹œν•œλ‹€.

Dockerfile Execution

docker build -t myapp
docker run -it --rm --name py3 myapp

Dockerfile Layers

  • Web Application Layer 9 : CMD Start model train Layer 8 : RUN Commands to set up model

…

Lifecycle of Container

  • Conatiner : μ‹€ν–‰λ˜λŠ” ν”„λ‘œκ·Έλž¨ β‡’ Lifecycle of process 와 같이 μƒνƒœλ₯Ό κ°–λŠ”λ‹€.

image

  • 이미지λ₯Ό λ§Œλ“œλŠ” 방식
    • Dockerfile λ‘œλΆ€ν„° λΉŒλ“œν•˜λŠ” 방식
    • Running ν•˜λŠ” container λ₯Ό pause ν•˜κ³  λΉŒλ“œν•˜λŠ” 방식

image

보닀 더 μ„ΈλΆ„ν™”ν•΄μ„œ lifecycle 을 ꡬ뢄할 수 μžˆλ‹€.