도커의 소스 관리 체계

Docker 의 소스 코드 관리 체계를 좀 알아야할 것 같다.
최근 Docker 코드는 점점 각 요소들이 component 화 되어 별개로 개발되는 추세이다.
각 component 를 마치 레고 블록처럼 끼워 맞춰서 사용할 수 있도록 개발되고 있다.

Docker engine 에서 containerd 를 분리한 것 뿐만 아니라, runc(container runtime) 또한 별개의 component 로 개발되고 있다.
따라서, runc 를 또 다른 runtime 으로 쉽게 교체하여 사용할 수도 있다.
network driver 의 경우는 host, bridge, overlay, none 등을 container 마다 자유롭게 선택하여 사용할 수 있으며, storage driver 들도 aufs, devicemapper, overlay2 등 각 driver의 장단점을 고려하여 선택 사용할 수 있다.

Docker 의 외부 연동을 위해서도 마찬가지이다.
Kerbernetes 및 AWS, Azure 등의 연동을 위해서도 모두 Pluggable 한 component 들이 각 vendor 나 open source 개발자들에 의해 활발하게 개발되고 있다.

이러한 레고 블록 형태의 생태계를 Docker 라는 회사가 관장하고 있으며, 다양한 component 들의 개발이 Docker 의 우산 아래 권장되고 있다.
Docker 생태계의 철학에 맞는 것이라면 어떤 것이든 Docker 의 우산 아래 들어갈 수 있는 것이다.

github 의 docker repository 를 보면 이러한 개발 방향을 잘 알 수 있다.
https://github.com/docker 아래에는 약 100 여 가지의 하위 repository 가 존재한다.

Github for docker

이러한 하위 repository 는 또 다른 community 의 소스 코드 repository 를 fork 하여 docker repository 아래 넣어둔 것도 있다.
(이를 upstream component 라고 한다. 참조되는 원본 component 라고 이해하면 된다.)
즉, Docker 생태계에서 필요하다 싶은 것은 모두 https://github.com/docker 아래에 모아서 repository 로 관리하는 것이다.
이러한 repository 들의 코드는 upstream repository 의 변경 사항을 주기적으로 merge 한다.

docker 의 주요한 하위 repository 몇 가지만 살펴보면 다음과 같다.
아마 Docker 를 좀 공부해본 사람이라면 대부분 이미 인지하고 있는 component 들일 것이다.

참고로, docker-ce-packaging component 는 Community Edition 용 docker 를 빌드하기 위한 component 이고 Docker(회사) 에서 관리(maintain)하고 있다.
이곳의 패키징 스크립트로 만들어진 docker CE Package 가 Docker Hub 에서 제공되어 우리가 공식적으로 Download 받아 사용할 수 있는 것이다.


You may also like...