도커(docker)란?

URL 복사

"Docker(도커)"는 오픈소스 커뮤니티 프로젝트, 오픈소스 프로젝트 툴, 해당 프로젝트를 주로 지원하는 기업인 Docker Inc. 및 해당 기업이 공식 지원하는 툴을 포함해 여러 의미를 뜻합니다. 기술과 기업의 명칭이 같아서 혼란스러울 수도 있습니다.

간단하게 그 개념을 설명하면 다음과 같습니다.

  • IT 소프트웨어 "Docker"는 Linux® 컨테이너를 만들고 사용할 수 있도록 하는 컨테이너화 기술입니다.
  • 오픈소스 Docker 커뮤니티는 모든 사용자가 혜택을 누릴 수 있도록 이러한 기술을 개선하기 위해 노력합니다.
  • Docker Inc.라는 기업은 Docker 커뮤니티의 작업을 기반으로 하여 보안을 강화하고 이러한 개선 사항을 더 큰 커뮤니티에 공유합니다. 그런 다음 엔터프라이즈 고객을 위해 개선되고 강화된 기술을 지원합니다.

Docker를 사용하면 컨테이너를 매우 가벼운 모듈식 가상 머신처럼 다룰 수 있습니다. 또한 컨테이너를 구축, 배포, 복사하고 한 환경에서 다른 환경으로 이동하는 등 유연하게 사용할 수 있어, 애플리케이션을 클라우드에 최적화하도록 지원합니다.

웨비나 영상: Podman v3을 사용한 Docker Compose

체험하기    Docker 컨테이너 관리 시작하기

Docker 기술은 Linux 커널Cgroups네임스페이스 등 커널의 기능을 사용하여 프로세스를 분리함으로써 독립적으로 실행할 수 있도록 합니다. 이러한 독립성은 컨테이너의 본래 목적입니다. 다시 말해서, 여러 프로세스와 애플리케이션을 서로 개별적으로 실행하여 인프라를 더 효과적으로 활용하고 개별 시스템을 사용할 때와 동일한 보안을 유지할 수 있습니다.

Docker를 포함한 컨테이너 툴은 이미지 기반 배포 모델을 제공합니다. 따라서 여러 환경 전반에서 애플리케이션 또는 서비스를 모든 종속 항목과 손쉽게 공유할 수 있습니다. 또한 Docker는 이 컨테이너 환경 내에서 애플리케이션(또는 애플리케이션을 구성하는 결합된 프로세스) 배포를 자동화합니다.

이러한 툴은 Linux 컨테이너를 기반으로 구축되어 Docker를 사용자 친화적이고 고유하게 만들어 주므로 사용자는 그 어느 때보다 쉽게 애플리케이션에 액세스하고, 신속하게 배포하고, 버전 및 버전 배포를 제어할 수 있습니다.

Linux 컨테이너란 무엇일까요?

Red Hat 리소스

헷갈릴 수도 있지만 Docker는 전통적인 Linux 컨테이너와는 다릅니다. Docker 기술은 처음에는 LXC 기술을 기반으로 개발되었지만 이후에는 이러한 종속 관계를 벗어났습니다. 하지만 대부분의 사람들은 "전통적인" Linux 컨테이너와 연결지어 생각합니다. LXC는 경량의 가상화 방법으로 유용했지만, 뛰어난 개발자 또는 사용자 환경을 제공하지는 못했습니다. Docker 기술은 컨테이너를 구동하는 기능 이상의 것을 제공합니다. 컨테이너 생성 및 구축, 이미지 전송, 이미지 버전 관리 등의 프로세스를 용이하게 해줍니다.

전통적인 Linux 컨테이너는 멀티플 프로세스를 관리할 수 있는 init 시스템을 사용합니다. 즉, 전체 애플리케이션을 하나로 실행할 수 있습니다. Docker 기술은 애플리케이션을 개별 프로세스로 세분화하도록 권장하고 이를 위한 툴을 제공합니다. 이러한 세분화된 접근 방식에는 장점이 있습니다.

모듈성

컨테이너화에 대한 Docker 접근 방식은 전체 애플리케이션을 분해하지 않고도 업데이트 또는 복구를 위해 애플리케이션의 일부를 분해하는 기능에 중점을 둡니다. 이러한 마이크로서비스 기반 접근 방식 외에도 서비스 지향 아키텍처(SOA)와 거의 같은 방식으로 멀티플 애플리케이션 간에 프로세스를 공유할 수 있습니다.

계층 및 이미지 버전 제어

각 Docker 이미지 파일은 일련의 계층으로 구성되며 이러한 계층들은 단일 이미지로 결합됩니다. 계층은 이미지가 변경될 때 생성되고, 사용자가 실행 또는 복사와 같은 명령을 지정할 때마다 새 계층이 생성됩니다.

Docker는 이러한 계층을 재사용하여 새 컨테이너를 구축하는데, 이때 구축 프로세스 속도가 빨라집니다. 중간 변경 사항은 이미지 간에 공유되므로 속도와 크기, 효율성이 더욱 향상됩니다. 또한 계층화에는 버전 제어가 내재되어 있습니다. 새로운 변경 사항이 있을 때마다 변경 로그가 기본 제공되므로 컨테이너 이미지를 완벽하게 제어할 수 있습니다.

롤백

계층화의 가장 큰 장점은 아마 롤백 기능일 것입니다. 모든 이미지에는 계층이 있습니다. 현재의 이미지 반복이 적절하지 않은 경우 이전 버전으로 롤백하면 됩니다. 이 기능은 애자일 개발 접근 방식을 지원하며 툴 관점에서 실제로 지속적 통합 및 배포(CI/CD)를 수행하는 데 도움을 줍니다.

신속한 배포

이전에는 새로운 하드웨어를 확보, 실행, 프로비저닝, 제공하는 데 며칠이 걸렸으며, 이를 위한 작업 및 오버헤드 부담도 상당했습니다. Docker 기반 컨테이너는 배포 시간을 몇 초로 줄일 수 있습니다. 각 프로세스에 대한 컨테이너를 생성하면 해당 프로세스를 새 애플리케이션과 빠르게 공유할 수 있습니다. 또한 컨테이너를 추가하거나 이동하기 위해 운영 체제를 부팅할 필요가 없으므로 배포 시간이 상당히 단축됩니다. 배포 시간이 단축되면 컨테이너에서 생성한 데이터를 쉽고 비용 효율적으로 생성하고 제거할 수 있습니다.

따라서 Docker 기술은 효율성을 더욱 중요시하며 더욱 세분화되고 제어 가능한 마이크로서비스 기반 접근 방식입니다.

Docker는 자체적으로 단일 컨테이너를 관리할 수 있습니다. 수백 개로 세분화된 컨테이너와 컨테이너화된 애플리케이션을 점점 더 많이 사용하게 되면 관리 및 오케스트레이션이 어려워질 수 있습니다. 결국 모든 컨테이너 전반에서 네트워킹, 보안, 텔레메트리 등의 서비스를 제공하려면 한 걸음 물러서서 컨테이너를 그룹화해야 합니다. 바로 여기에 쿠버네티스가 사용됩니다.

쿠버네티스를 사용한 컨테이너 오케스트레이션에 대해 자세히 알아보기

 

Docker를 사용하면 전통적인 Linux 컨테이너에서 제공되는 것과 동일한 UNIX와 같은 기능을 사용할 수 없습니다. 여기에는 컨테이너 내에서 애플리케이션과 함께 cron 또는 syslog와 같은 프로세스 사용 기능이 포함됩니다. 하위 프로세스를 종료한 후 손자 프로세스를 정리하는 작업(기존 Linux 컨테이너에서 기본적으로 처리하는 작업) 등에도 제한이 있습니다. 이러한 문제는 처음부터 바로 드러나지는 않지만 초기에 구성 파일을 수정하고 이러한 기능을 설정하면 완화할 수 있습니다.

이 외에도 네임스페이스가 지정되지 않은 다른 Linux 하위 시스템 및 기기가 있습니다. 여기에는 SELinux, Cgroups, /dev/sd* 기기 등이 있습니다. 그렇기 때문에 공격자가 이러한 하위 시스템에 대한 제어 권한을 얻을 경우 호스트가 손상됩니다. 경량을 유지하기 위해 호스트 커널을 컨테이너와 공유할 경우 이러한 보안 취약점이 발생할 수 있습니다. 호스트 커널은 호스트 시스템에서 훨씬 더 확실히 분리된 가상 머신과 다릅니다.

Docker 컨테이너의 안전성 살펴보기

 

Docker 데몬에도 보안 우려 사항이 있을 수 있습니다. Docker 컨테이너를 사용하고 실행하기 위해 가장 많이 사용하는 것이 컨테이너의 퍼시스턴트 런타임인 Docker 데몬입니다. Docker 데몬에는 루트 권한이 필요하므로 이 프로세스에 액세스할 수 있는 사람과 프로세스 상주 위치에 각별히 주의를 기울여야 합니다. 예를 들어, 로컬 데몬의 공격 표면은 비교적 더 공개된 위치에 상주하는 데몬(예: 웹 서버)보다 작습니다.

Docker에 새로운 보안 기능 도입

허브

레드햇 공식 블로그

레드햇 공식 블로그에서 고객, 파트너, 커뮤니티 에코시스템 등 현재 화제가 되는 최신 정보를 살펴 보세요.

모든 Red Hat 제품 체험판

무료 제품 체험판을 통해 핸즈온 경험을 얻고, 자격증 시험에 대비하거나 해당 제품이 조직에 적합한지 평가할 수 있습니다.

추가 자료

Podman Desktop이란?

Podman Desktop은 로컬 개발자 환경에서 컨테이너 작업을 간소화하는 무료 오픈소스 툴입니다.

Ansible과 Puppet 비교: 선택 시 알아야 할 주요 사항 및 차이점

Ansible과 Puppet은 커뮤니티 오픈소스 IT 자동화 툴입니다. 이 문서에서는 두 툴의 유사점과 차이점을 자세히 설명하고, 선택 시 고려해야 할 주요 요소들을 안내합니다.

Podman: 리눅스에서 컨테이너 개발, 관리, 실행하는 오픈소스 툴

Podman은 리눅스 시스템에서 컨테이너 개발, 관리, 실행을 위한 오픈소스 툴이며 도커와 호환되는 명령어 인터페이스를 제공하여, 도커 사용자가 쉽게 전환할 수 있습니다

오픈소스 리소스

관련 기사