Red Hat에 오신 것을 환영합니다

각국 홈페이지

전세계 Red Hat 고객에게 일어나는 일들을 확인해 보십시오.

컨테이너

Docker에 대해 알아보십시오

"Docker"는 여러 가지 요소를 나타냅니다. 여기에는 오픈소스 커뮤니티 프로젝트, 오픈소스 프로젝트의 툴, Docker, 프로젝트의 주요 지지자인 회사, 이전에 Docker에서 지원되었던 툴이 포함됩니다. 기술의 이름과 회사의 이름이 같다는 것이 다소 혼란스러우실 수도 있을 겁니다.

간단히 설명하자면 이렇습니다.

  • IT 소프트웨어인 "Docker"는 Linux 컨테이너를 만들고 사용할 수 있도록 하는 컨테이너화 기술입니다.
  • 오픈소스 Docker 커뮤니티는 모든 사용자가 무료로 이점을 얻을 수 있도록 이러한 기술을 개선하기 위해 노력하고 있습니다.
  • Docker 사는 Docker 커뮤니티의 노력을 기반으로 하며, Docker 커뮤니티를 더 안전하게 만들고, 그러한 개선을 적용해 커뮤니티를 더 발전시키고 있습니다. 그리고 엔터프라이즈 고객을 위한 향상되고 강화된 기술을 지원합니다.

Docker를 사용하면 컨테이너를 매우 가벼운 모듈형 가상 머신처럼 다룰 수 있습니다. 또한 그러한 컨테이너를 만들고, 배포하고, 복사하고, 한 환경에서 다른 환경으로 이동하는 등 컨테이너를 유연하게 사용할 수 있습니다.


Docker는 어떻게 작동합니까?

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

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

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


Docker 기술이 기존의 Linux 컨테이너와 동일합니까?

그렇지 않습니다. Docker 기술은 처음에 LXC 기술을 기반으로 구축되긴 했으나, 그 이후로는 종속 관계를 벗어났습니다. 하지만 대부분의 사용자는 "기존의" Linux 컨테이너와 연결지어 생각하고 있습니다. LXC는 경량의 가상화로 유용하게 사용되었지만 뛰어난 개발자 또는 사용자 경험을 제공하지 못했습니다. Docker 기술은 컨테이너를 실행하는 기능 이상의 것을 제공하며 무엇보다도 컨테이너 생성 및 구축, 이미지 전송, 이미지 버전 관리 프로세스를 용이하게 해 줍니다.

기존의 Linux 컨테이너와 Docker 비교

기존의 Linux 컨테이너는 여러 프로세스를 관리할 수 있는 초기화 시스템을 사용합니다. 즉, 전체 애플리케이션을 하나로 실행할 수 있습니다. Docker 기술은 애플리케이션이 개별 프로세스로 세분화되도록 하며 이를 수행할 수 있는 툴을 제공합니다. 이 세분화된 접근 방식에는 이점이 있습니다.


Docker 컨테이너의 이점

모듈 방식

Docker의 컨테이너화 접근 방식은 전체 앱을 분해할 필요 없이 애플리케이션의 일부를 분해하고, 업데이트 또는 복구하는 능력에 집중되어 있습니다. 사용자는 이 마이크로서비스 기반 접근 방식 외에도 SOA(service-oriented architecture)의 작동 방식과 동일하게 여러 앱 사이에서 프로세스를 공유할 수 있습니다.

계층 및 이미지 버전 제어

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

Docker는 새로운 컨테이너를 구축할 때 이러한 계층을 재사용하므로 구축 프로세스가 훨씬 더 빨라집니다. 중간 변경 사항이 이미지 사이에서 공유되므로 속도, 크기, 효율성이 더욱 향상됩니다. 계층화에는 버전 관리가 내재되어 있으며 새로운 변경 사항이 발생할 때마다 내장 변경 로그가 기본적으로 적용되므로 컨테이너 이미지를 완전히 제어할 수 있습니다.

롤백

계층화에서 가장 유용한 부분은 아마도 롤백 기능일 것입니다. 모든 이미지에는 계층이 있습니다. 현재 이미지 반복이 마음에 들지 않으십니까? 그렇다면 이전 버전으로 롤백하십시오. 이 기능은 애자일(agile) 개발 접근 방식을 지원하며 툴 관점에서 실제로 지속적인 통합 및 배포(CI/CD)를 수행하는 데 도움을 줍니다.

신속한 배포

새로운 하드웨어를 준비하고, 실행하고, 프로비저닝하고, 사용할 수 있게 하려면 일반적으로 며칠이 소요되었습니다. 많은 노력과 부가적인 업무가 필요하므로 부담도 상당했습니다. Docker 기반 컨테이너는 배포 시간을 몇 초로 단축할 수 있습니다. 각 프로세스에 대한 컨테이너를 생성함으로써 사용자는 유사한 프로세스를 새 앱과 빠르게 공유할 수 있습니다. 또한, 컨테이너를 추가하거나 이동하기 위해 OS를 부팅할 필요가 없으므로 배포 시간이 크게 단축됩니다. 이뿐만 아니라 배포 속도가 빨라 컨테이너에서 생성된 데이터를 비용 효율적으로 쉽게 생성하고 삭제할 수 있고 사용자는 우려를 할 필요가 없습니다.

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


Docker를 사용하는 데 제약이 있습니까?

Docker는 그 자체로 단일 컨테이너를 관리하는 데 매우 유용합니다. 수백 개로 세분화된 컨테이너와 컨테이너화된 앱을 점점 더 많이 사용하기 시작하면 관리와 오케스트레이션이 매우 어려워질 수 있습니다. 결국 모든 컨테이너 전체에서 네트워킹, 보안, 텔레메트리와 같은 서비스를 제공하기 위해서는 한 걸음 물러나서 컨테이너를 그룹화해야 합니다. 바로 여기에 Kubernetes가 사용됩니다.


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

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


Docker 데몬에도 보안 문제는 있을 수 있습니다. Docker 컨테이너를 사용하고 실행하기 위해 가장 많이 사용하는 것이 컨테이너의 퍼시스턴트 런타임인 Docker 데몬입니다. Docker 데몬을 사용하려면 루트 권한이 필요하므로 이 프로세스에 액세스할 수 있는 사람과 프로세스가 상주하는 위치에 각별한 주의를 기울여야 합니다. 예를 들어, 로컬 데몬은 웹 서버와 같은 퍼블릭 위치에 상주하는 데몬보다 공격에 대한 취약성이 낮습니다.

다양하게 활용할 수 있는 컨테이너