도커의 소스 관리 체계
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 가 존재한다.
이러한 하위 repository 는 또 다른 community 의 소스 코드 repository 를 fork 하여 docker repository 아래 넣어둔 것도 있다.
(이를 upstream component 라고 한다. 참조되는 원본 component 라고 이해하면 된다.)
즉, Docker 생태계에서 필요하다 싶은 것은 모두 https://github.com/docker 아래에 모아서 repository 로 관리하는 것이다.
이러한 repository 들의 코드는 upstream repository 의 변경 사항을 주기적으로 merge 한다.
docker 의 주요한 하위 repository 몇 가지만 살펴보면 다음과 같다.
아마 Docker 를 좀 공부해본 사람이라면 대부분 이미 인지하고 있는 component 들일 것이다.
- docker.github.io : docker document 의 소스 관리
- docker-ce : docker CE(community edition) package
- cli : docker CLI
- runc : fork of runc for docker products https://www.opencontainers.org/
- compose : Define and run multi-container applications with Docker
- swarm : a Docker-native clustering system
- kinematic : Visual Docker Container Management on Mac & Windows
- libnetwork : networking for containers
- libkv : Distributed key/value store abstraction library
- containerd : Forked from containerd/containerd
- libcontainer : PROJECT MOVED TO RUNC
- go-docker : Official Go SDK for Docker
- dockercloud-cli : CLI for Docker Cloud
- openstack-docker : Nova driver and Glance backend to use Docker inside OpenStack
- etcd : A highly-available key value store for shared configuration and service discovery
- docker-ce-packaging : Packaging scripts for Docker CE
- for-linux : linux 용 CE package 에 대한 issue tracking 을 위한 repository
- for-win : windows 용 CE package 에 대한 issue tracking 을 위한 repository
참고로, docker-ce-packaging component 는 Community Edition 용 docker 를 빌드하기 위한 component 이고 Docker(회사) 에서 관리(maintain)하고 있다.
이곳의 패키징 스크립트로 만들어진 docker CE Package 가 Docker Hub 에서 제공되어 우리가 공식적으로 Download 받아 사용할 수 있는 것이다.