목적:
- 프로그램을 의존성을 포함해서 배포하고 싶다
- 그러면서도 VM처럼 OS를 통째로 가상화하고 싶지는 않다
방법:
- 포토샵 레이어처럼 겹겹이 쌓는 방식 (OverlayFS) 의 저장공간을 마련하고, 거기에 OS부터 의존성 있는 라이브러리, 내 프로그램을 순차적으로 설치한다
- docker를 실행하는 호스트 운영체제의 핵심 부분 (커널)은 공유하지만, docker로 실행되는 프로그램 입장에서는 리눅스의 핵심 기능들을 사용해 (cgroups, namespaces) 실질적으로 격리된 환경을 만들어서 실행함
- 호스트 OS에 접근도 안 되고, 보통 OS까지 필요한 게 다 들어있기에 내부의 별도 OS에서 실행되는 것처럼 동작
- 그러면서도 실제로는 그냥 프로그램을 실행하는 것이므로 VM보다 빠르다
- 운영체제를 포함해서 하나의 EXE 같은 걸로 묶은 것이므로 docker 컨테이너 내부에서의 수정은 생각하지 않으며, 종료되면 날아간다
설명을 하자니 복잡해졌는데, 단순하게 말하자면 애플리케이션과 그 의존성을 하나의 EXE 바이너리로 묶었는데 그게 사실은 진짜 가상화는 아니고 격리 기술로 달성해서 성능까지 좋다
If you have a fediverse account, you can quote this note from your own instance. Search https://lake.naru.cafe/notes/a7e3vnm3je99smn3 on your instance and quote it. (Note that quoting is not supported in Mastodon.)