- 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와 같이 상태를 갖는다.
- 이미지를 만드는 방식
- Dockerfile로부터 빌드하는 방식
- Running하는 container를 pause하고 빌드하는 방식
보다 더 세분화해서 lifecycle을 구분할 수 있다.