WeeklyPaper: 컨테이너 기술과 Docker를 명확히 구분하여 설명하세요. 컨테이너 기술이 Docker 이전에도 존재했던 개념임을 언급하고, Docker가 컨테이너 기술을 구현한 하나의 도구라는 관점에서 설명해주세요. 또한, Docker 외에 컨테이너 기술을 구현한 다른 도구의 예시를 들어보세요.
컨테이너 기술
컨테이너 기술이란, 애플리케이션을 실행에 필요한 모든 파일(코드, 런타임, 시스템 도구, 라이브러리 등)과 함께 패키징하여, 어떤 환경에서든 빠르고 안정적으로 실행할 수 있도록 격리하는 기술이다.
컨테이너는 OS의 커널(Kernel)을 공유하면서도, 각 컨테이너는 독립된 공간(프로세스, 파일 시스템, 네트워크)을 할당받아 마치 별개의 서버에서 작동하는 것처럼 보인다. 이 덕분에 가상 머신(VM)처럼 OS를 통째로 띄우는 방식보다 훨씬 가볍고 빠르다는 장점을 가진다.
- 하나의 컨테이너는 하나의 프로세스를 실행하는 데 최적화 됨
- 다른 컨테이너와 파일 시스템, 네트워크, 환경 변수를 격리해서 사용함
- 가볍고 빠르게 실행됨
장점들이 많이 있다:
- 담당 영역을 분리하여 개발팀과 운영팀의 충돌을 줄일 수 있다. 개발 팀은 인프라 관리의 부담을 줄이고 개발 코드를 짜는데 집중하면 된다.
- 개발,테스트,프로덕션 용 컨테이너를 따로 만들어서 격리시킬 수 있다
- 팀별 같은 프로젝트에서 일할때 환경 관리 문제로 골치아파지는 일이 줄어든다
Docker 이전에도 존재했던 컨테이너 기술
중요한 점은, 이러한 컨테이너 개념이 Docker와 함께 갑자기 등장한 것이 아니라는 것이다. Docker 이전에도 컨테이너 기술은 다양한 형태로 존재하며 발전해왔다.
- chroot (1979): 특정 프로세스와 그 자식 프로세스들이 접근할 수 있는 루트 디렉토리를 제한하여, 시스템의 나머지 부분과 격리하는 초기 형태의 기술
- FreeBSD Jails (2000): 파일 시스템, 사용자, 네트워크 등을 훨씬 더 강력하게 격리하여 '가상 서버'와 유사한 환경을 제공함
- LXC (Linux Containers, 2008): 리눅스 커널의 cgroups와 namespaces 기능을 활용하여 완전한 형태의 컨테이너를 구현한 기술로, Docker 초기의 기반이 되었음
이렇게 Docker의 등장 이전에도 여러 컨테이너 기술들은 존재해왔고 발전해ㅎ왔지만, 사용법이 복잡하고 전문가의 영역으로 여겨져 널리 쓰이지는 못했다.
Docker

Docker란, 위에서 설명한 컨테이너 기술을 누구나 쉽게 사용하고 관리할 수 있도록 만든 오픈소스 플랫폼이다. 복잡했던 컨테이너 생성, 배포, 실행 과정을 단순화하여 컨테이너 기술의 대중화를 이끌었다.
Docker의 핵심 구성 요소
- DockerFile
- 컨테이너가 어떤 환경(OS, 설치할 프로그램, 환경 변수 등)으로 구성될지를 정의하는 간단한 텍스트 파일
- 개발자는 이 설계도만 작성하면 됨
- Docker Image
- Dockerfile을 바탕으로 만들어진, 어플리케이션을 실행시키기 위해 필요한 모든 요소들이 담긴 설계도 -> 읽기 전용 템플릿
- 운영체제의 최소 구성 요소 (Ubuntu minimal, Alpine 등)
- 어플리케이션 실행 파일 (.jar, .py, .exe 등)
- 의존 라리브러리, 설정 파일, 환경 변수
- DockerFile에 정의된 명령들
- 자바 클래스는 인스턴스화 해서 사용될 수 있는 것처럼, 도커 이미지고 컨테이너에서 실행되어야 한다. 도커 컨테이너는 도커 이미지 없이 실행이 안된다.
- Dockerfile을 바탕으로 만들어진, 어플리케이션을 실행시키기 위해 필요한 모든 요소들이 담긴 설계도 -> 읽기 전용 템플릿
- Docker Container
- Docker Image를 실행한 상태 -> 실제 메모리에 올라가 실행되는 '인스턴스'
- 하나의 이미지로 많은 컨테이너들을 만들 수 있
- 가볍고 빠르다
- Docker CLI / Daemon
- 사용자는 CLI를 통해 docker build, docker run같은 명령어를 입력할 수 있다
- 그러면 백그라운드에서 실행되는 Docker Daemon(엔진)이 명령을 받아 이미지 생성, 컨테이너 실행 등 복잡한 작업을 대신 처리해준
Docker 외의 컨테이너 기술
컨테이너 표준은 도커지만, 다른 컨테이너 기술들도 많이 존재한다.
- Java 컨테이너
- Jetty, Tomcat, Wildfly 및 Springboot 등 독립 실행 형 Java 응용 프로그램을 사용할 수 있는 컨테이너 기술이다.
- LXD
- 위에도 잠깐 언급했지만, Ubuntu Linux를 따르는 회사의 컨테이너 플랫폼이다. 기존 VM과 동일한 도구로 구축/운용되지만 컨테이너와 비슷한 런타입 성능을 구현하고 VM에 대한 사용율을 향상시킬 수 있다.
- Podman
- Red Hat이 주도하여 개발했으며, Docker와 거의 동일한 명령어를 사용하지만 Daemon 없이 작동하여 보안에 더 강점이 있음
- containerd
- Docker에서 분리되어 나온 핵심 컨테이너 런타임으로, 현재는 CNCF(Cloud Native Computing Foundation)의 졸업 프로젝트
- Docker에 비해서 더 가볍고 단순한 구조를 가짐.
정리
정리하자면, 컨테이너는 애플리케이션을 격리하고 어디서든 동일하게 실행되도록 하는 기술이고, DOcker는 이 기술을 누구나쉽게 사용할 수 있도록 패키징한 성공적인 플랫폼이다. 누군가가 컨테이너가 뭔지 물어본다면 Docker은 대표적인 예시일 뿐이다.
자료
'CS > Docker' 카테고리의 다른 글
| [Docker] db-data 볼륨과 데이터 저장 (3) | 2025.08.25 |
|---|---|
| [Docker] 컨테이너 오케스트레이션의 개념과 필요 (0) | 2025.08.20 |