• 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을 구분할 수 있다.