Docker는 애플리케이션을 컨테이너 단위로 개발하고 배포하고 실행하기 위한 플랫폼이다. 프로그램과 실행에 필요한 파일을 이미지로 묶고, 그 이미지에서 격리된 실행 환경인 컨테이너를 만든다. Docker 공식 개요
이미지와 컨테이너
컨테이너 이미지는 실행에 사용할 파일과 설정의 패키지이고, 컨테이너는 그 이미지로부터 생성된 실행 인스턴스다. 같은 이미지에서 여러 컨테이너를 만들 수 있다. 실행 중 컨테이너 안의 파일을 바꾸었다고 원래 이미지가 함께 수정되는 것은 아니다.
주요 구성 요소
Docker 클라이언트는 엔진에 작업을 요청하고, 데몬은 이미지·컨테이너·네트워크·볼륨 같은 객체를 관리한다. 레지스트리는 이미지를 보관하고 배포하는 장소다.
| 요소 | 맡는 역할 |
|---|---|
| 이미지 | 실행 환경의 기반 패키지 |
| 컨테이너 | 애플리케이션 실행 인스턴스 |
| 레지스트리 | 이미지 저장과 전달 |
| 볼륨 | 컨테이너와 별도로 관리할 데이터 저장 |
예를 들어 위키 웹서버와 데이터베이스를 별도 컨테이너로 구성하면 프로세스와 의존성을 나누어 관리할 수 있다. 두 서비스를 연결하는 네트워크와 접속 설정은 여전히 필요하다.
환경 재현의 범위
이미지는 개발 환경과 배포 환경의 차이를 줄이는 데 도움이 된다. 다만 외부 데이터베이스, 비밀값, CPU 구조, 호스트 설정까지 모두 동일하게 만드는 것은 아니다. 로컬에서 컨테이너가 실행됐다는 사실만으로 운영 서비스가 정상이라고 결론 내릴 수 없다. 데이터 저장과 외부 접속을 별도로 검증해야 한다.
격리와 운영
Docker는 Linux 네임스페이스 같은 커널 기능을 활용해 격리한다. 컨테이너마다 독립적인 운영체제 커널 전체를 갖는 가상 머신과는 구조가 다르다. 권한이나 호스트 마운트를 과도하게 부여하면 격리의 효과가 약해질 수 있다. 여러 컨테이너의 구성을 파일로 함께 관리하는 데는 Docker Compose를, 클러스터 단위의 운영에는 Kubernetes를 사용할 수 있다. Docker 컨테이너 설명