평소 존경하는 지인분의 배려로, 대한민국 미래의 희망인 대학생들에게 '도커와 컨테이너'를 주제로 한 2시간 특강 강의를 진행하였습니다.
저는 2달에 한번 정도 외부 강의(Public Speaking)를 진행하는데, 대학생 대상 강의는 2016년 이후 두번째 였습니다.
관련해서 제 개인 블로그(raonsaeron.com)에 정리한 강의 자료 공유합니다.
<도커(Docker)란?>
1️⃣ 도커(Docker)의 정의
도커를 구글링해 보면, 아래와 같은 정의가 나옵니다.
"'Docker(도커)'는 오픈소스 커뮤니티 프로젝트, 오픈소스 프로젝트 툴, 해당 프로젝트를 주로 지원하는 기업인 Docker Inc. 및 해당 기업이 공식 지원하는 툴을 포함해 여러 의미를 뜻합니다. 기술과 기업의 명칭이 같아서 혼란스러울 수도 있습니다."
2️⃣ 도커의 역사 및 구성요소
초기 개발언어는 Python 이었지만 0.9 버전 이후 Go 로 변경되었습니다.
Docker는 libcontainer, cgroup, AUFS로 구성되어 있습니다. Docker는 OS 레벨 가상화 기술(컨테이너) 중 하나이며, 다른 OS 레벨 가상화 기술로 LXC, OpenVZ, Solaris Zones 등이 있습니다.
Docker 이전의 컨테이너 기술들은 ‘격리(isolation)'에만 집중하였기 때문에, 공유가 어려운 ‘파일 묶음' 형태였습니다. 직접 해당 OS에서 컨테이너를 만든 사람만 잘 사용할 수 있는 상태였기 때문에 공유가 어려웠습니다.
하지만 Docker는 'AUFS'라는 개념 및 Dockerfile을 통해서 컨테이너 이미지를 만들고 공유하는데 표준이 되는 새로운 방식을 채택하였고, 또한 GitHub과 같은 문화를 DockerHub에 도입함으로써, 컨테이너 기술 표준화 및 대중화에 크게 기여하였습니다.
3️⃣ 도커의 문제점
도커는 도커 데몬(Docker Daemon)이 항상 떠 있어서 동작해야 하는 형태이며, 너무 많은 기능을 담당하기 때문에 데몬이 무겁습니다.
특히 데몬이 장애가 발생하면 자식 프로세스들이 고아가 되어 악영향을 미칩니다.
또한 도커 명령어는 Root 권한을 가진 사용자에 의해서만 실행 가능합니다.
이러한 문제점을 개선하기 위해 컨테이너 표준을 지정하는 OCI(Open Container Initiative)에서 CRI-O, Podman, Builder, Skopeo 같은 오프소스 도구들을 출시하였습니다. 해당 도구들은 일정 부분 Docker의 기능을 상속받았기 때문에 명령어가 대부분 도커와 유사하다는 특징이 있습니다.
[참고자료]
- 흔들리는 도커(Docker)의 위상 - OCI와 CRI 중심으로 재편되는 컨테이너 생태계(https://www.samsungsds.com/kr/insights/docker.html)
- Podman - Introduction (https://darumatic.com/blog/podman_introduction)
<컨테이너(Container)란?>
컨테이너, 쿠버네티스 및 오픈시프트 전문기업 "Red Hat"에서의 컨테이너 정의는 아래와 같습니다.
"컨테이너는 실행에 필요한 모든 파일을 포함하여 모든 런타임 환경에서 애플리케이션을 패키징하고 분리할 수 있도록 하는 기술입니다.
이를 통해 전체 기능을 유지하면서 컨테이너화된 애플리케이션을 환경(개발, 테스트, 운영 등) 간에 쉽게 이동할 수 있습니다."
컨테이너는, 기존 베어메탈이나 가상머신 기반에서 동작하는 문어발 형태의 코드로 개발 및 운영 관리하는 모노리식 애플리케이션의 문제를 해결할 수 있는 MSA(마이크로서비스 아키텍쳐)나 DevOps(DevSecOps, 심지어 MLOps까지)를 가능하게 하는 유일한 미래 인프라(Infrastructure)입니다.
또한 클라우드에 최적화되어 있으며, 베어메탈이나 가상머신과 대비해서 많은 이점들을 가지고 있습니다.
<쿠버네티스(Kubernetes)의 필요성>
하지만 이런 많은 장점을 가진 컨테이너를 기업 환경에서 사용하기 위해서는 컨테이너를 자동으로 관리해 주는 무언가(?)가 필요합니다. 이것이 바로 쿠버네티스이며, 쿠버네티스를 통해 컨테이너 기술을 기반으로 진정한 MSA 형태의 DevOps 사상이 내재된 미래형 인프라 구현이 가능합니다.
원본 기사의 링크는 아래와 같습니다. 감사합니다.
https://raonsaeron.com/2023/04/docker-container/