DAG 수가 많아진다면 데이터 품질이나 데이터 리니지 이슈 이외에도 다양한 이슈가 발생한다.
KubernetesPodOperator
DockerOperator
KubernetesExecutor
CeleryKubernetesExecutor
LocalKubernetesExecutor
SequentialExecutor
LocalExecutor
CeleryExecutor
KubernetesExecutor
CeleryKubernetesExecutor
CeleryExecutor
와 KubernetesExecutor
를 동시에 사용한다.LocalKubernetesExecutor
LocalExecutor
와 KubernetesExecutor
를 동시에 사용한다.두 서비스 모두 SW를 실행하기 위한 독립적으로 분리된 환경을 제공한다는 공통점을 가지고 있지만, 구동 방식에 있어 차이를 가지고 있다.
VM | Docker |
---|---|
호환성 이슈없이 다수의 SW를 독립적으로 실행 가능하다. | Host OS를 사용하기 때문에 호환성 문제가 발생하기도 한다. |
각 VM은 가상 하드웨어 위에서 돌리기 때문에 자신만의 OS를 필요로 한다. 유료 OS라면 비용이 발생하고, 시간이 오래 걸릴 수 있다. | 호스트 OS를 사용하여 구동하기 때문에 별도의 비용이 필요하지 않고, 빠르게 실행할 수 있다. |
VM끼리 자원을 나눠써야하므로 자원을 많이 사용한다. | 자원의 소비가 적어서(light weight) 몇 십 개에서 몇 백 개까지 실행 가능하다. |
보통 하나의 컴퓨터 위에 다수의 VM을 실행하는 것이 일반적이지만 많은 수를 실행할 수 없다. | 많은 수의 docker container를 관리하는 것을 쉽지 않다. |
GUI 소프트웨어 개발에는 적합하지 않다. |
이런 구성요소와 설치 관련 실행 순서 등을 Dockerfile에 기술한다.
Docker Image는 다수의 파일로 구성되어 있다.
$ docker run image-name # 처음 실행할 때
$ docker exec ... # 이미 실행된 Container에 명령을 내리는 것
# 두 명령 모두 --user root 혹은 -uroot 를 통해 루트 유저로 연결 가능
FROM image-name:tag # 베이스 이미지
COPY copy-path # 사용해야할 코드를 docker image 에서 저장하기 위한 경로. 새로 생성된다.
WORKDIR work-path # 뒤의 코드들은 모두 이 경로를 root로 생각함
CMD command-line # docker가 실행될 때 반드시 실행되어야 하는 명령어
$ docker run image-name
ARG
: Docker Image를 만들 때 사용되는 환경 변수, 최종 이미지에 저장 XENV
: Container가 실행될 때 사용되는 환경 변수, 최종 이미지에 저장 OUSER
: Container를 실행할 때 사용할 유저 IDEXPOSE
: 서비스 사용 포트RUN
: 빌드 시 실행되어야 하는 명령 지정RUN apt-get update && apt-get install -y curl
CMD vs ENTRYPOINT
둘 다 Container가 시작될 때 실행되어야 하는 명령어를 지정
굉장히 흡사하지만 둘이 동시에 사용 시 ENTRYPOINT가 우선 순위를 갖는다.
최대한 한가지 종류만 사용하고CMD
사용을 권장
dockerfile에서 여러번 실행되면 마지막 것만 사용
둘이 같이 사용하면ENTRYPOINT
가 기본 명령이 되고CMD
가 인자를 제공한다.
CMD
는docker run image-name cmd.sh
를 통해 오버라이드가 자동으로 되지만ENTRYPOINT
는--entrypoint
옵션을 통해서만 오버라이딩이 된다.
# Docker Image 생성
$ docker build --platform linux/amd64 -t image-name .
# --platform linux/amd64 : Host OS에 영향을 받을 수 있기 때문에 사용
# -t image-name : 이미지 이름, tag를 설정하고 싶다면 콜론(:) 뒤에 붙힌다.
# . : 현재 경로에 있는 dockerfile을 사용한다.
# Docker Image 확인
$ docker image ls
$ docker images # 둘 다 같은 명령어
# Docker Container 실행
$ docker run image-name
# 버전이 여러개라면 반드시 콜론 사용. 기본적으로 최신 것을 실행한다.
# -p : 포트번호
# -v : volumn
account-id/image-name:tag
지금까지 수업 중에서 가장 필기할 것도 많았고 내용도 많았던 하루이다. 도커는 회사에서 직접 써보긴 했지만 무작정 이것저것 명령어를 가져와서 쓰느라 제대로 알지 못했는데 이번 수업으로 머리속에서 정리되고 있다. 내일 수업도 기대된다!