답변:
로부터 부두 노동자 자주 묻는 질문 :
Docker는 lxc를 대체하지 않습니다. "lxc"는 서로 샌드 박싱 프로세스를 허용하고 리소스 할당을 제어 할 수있는 Linux 커널 (특히 네임 스페이스 및 제어 그룹)의 기능을 나타냅니다.
Docker는이 저수준의 커널 기능 기반 외에도 몇 가지 강력한 기능을 갖춘 고급 도구를 제공합니다.
여러 시스템에 이식 가능Docker는 응용 프로그램 및 모든 종속 항목을 단일 객체로 묶는 형식을 정의하여 모든 도커 지원 시스템으로 전송할 수 있으며 응용 프로그램에 노출 된 실행 환경이 동일하다는 것을 보장하면서 실행할 수 있습니다. Lxc는 프로세스 샌드 박스를 구현하는데, 이는 휴대용 배포를위한 중요한 전제 조건이지만 휴대용 배포로는 충분하지 않습니다. 사용자 정의 lxc 구성으로 설치된 응용 프로그램의 사본을 나에게 보내면 네트워킹, 스토리지, 로깅, 배포, 시스템의 특정 구성과 관련되어 있기 때문에 내 시스템에서 실행되지 않을 것입니다. Docker는 이러한 머신 별 설정에 대한 추상화를 정의하므로 동일한 도커 컨테이너가 변경되지 않은 여러 머신에서 실행될 수 있습니다.
응용 프로그램 중심. Docker는 컴퓨터와 달리 응용 프로그램 배포에 최적화 되어 있습니다. 이는 API, 사용자 인터페이스, 디자인 철학 및 문서에 반영되어 있습니다. 반면, lxc 도우미 스크립트는 컨테이너를 경량 시스템으로 초점을 맞 춥니 다. 기본적으로 더 빠르게 부팅하고 램이 더 적은 서버입니다. 컨테이너보다 더 많은 것이 있다고 생각합니다.
자동 빌드 . Docker에는 개발자가 응용 프로그램 종속성, 빌드 도구, 패키징 등을 완벽하게 제어하여 소스 코드에서 컨테이너를 자동으로 조립할 수있는 도구가 포함되어 있습니다. 이들은 make, maven, chef, puppet, salt, debian 패키지, rpms, source 기계의 구성에 관계없이 타르볼 또는 위의 조합 .
버전 관리. Docker에는 컨테이너의 연속 버전 추적, 버전 간 차이 검사, 새 버전 커밋, 롤백 등을위한 git-like 기능이 포함되어 있습니다. 히스토리에는 컨테이너가 어떻게 조립되고 누구에 의해 작성 되었는가 도 포함되어 있으므로 프로덕션 서버에서 완전한 추적 성을 얻을 수 있습니다. 다시 업스트림 개발자에게 돌아갑니다. Docker는 "git pull"과 유사한 증분 업로드 및 다운로드를 구현하므로 diff 만 보내면 새로운 버전의 컨테이너를 전송할 수 있습니다.
구성 요소 재사용. 컨테이너는 더 전문화 된 컴포넌트를 작성하기 위해 "기본 이미지"로 사용될 수 있습니다. 이는 수동으로 또는 자동화 된 빌드의 일부로 수행 할 수 있습니다. 예를 들어 이상적인 파이썬 환경을 준비하고 10 가지 응용 프로그램의 기반으로 사용할 수 있습니다. 미래의 모든 프로젝트에 이상적인 postgresql 설정을 재사용 할 수 있습니다. 등등.
나누는. Docker는 수천 명의 사람들이 유용한 컨테이너를 업로드 한 공개 레지스트리 ( https://registry.hub.docker.com/ )에 액세스 할 수 있습니다 : redis, couchdb, postgres, irc bouncers, rails app server to hadoop to base images에 대한 컨테이너 다양한 배포판. 레지스트리에는 또한 docker 팀이 유지 관리하는 유용한 컨테이너의 공식 "표준 라이브러리"가 포함되어 있습니다. 레지스트리 자체는 오픈 소스이므로 누구나 내부 서버 배포를 위해 개인 컨테이너를 저장 및 전송하기 위해 자신의 레지스트리를 배포 할 수 있습니다.
도구 생태계. Docker는 컨테이너 생성 및 배포를 자동화하고 사용자 지정하기위한 API를 정의합니다. 기능을 확장하기 위해 docker와 통합 된 수많은 도구가 있습니다. PaaS와 유사한 배포 (Dokku, Deis, Flynn), 다중 노드 오케스트레이션 (maestro, salt, mesos, openstack nova), 관리 대시 보드 (docker-ui, openstack horizon, 조선소), 구성 관리 (chef, puppet), 지속적인 통합 Docker는 컨테이너 기반 툴링의 표준으로 빠르게 자리 매김하고 있습니다.
이게 도움이 되길 바란다!
Docker의 기술적 기능 목록을 살펴보고 LXC가 제공하는 기능과 그렇지 않은 기능 을 확인하십시오.
1) 파일 시스템 격리 : 각 프로세스 컨테이너는 완전히 별도의 루트 파일 시스템에서 실행됩니다.
일반 LXC와 함께 제공됩니다.
2) 리소스 격리 : CPU 및 메모리와 같은 시스템 리소스는 cgroup을 사용하여 각 프로세스 컨테이너에 다르게 할당 될 수 있습니다.
일반 LXC와 함께 제공됩니다.
3) 네트워크 격리 : 각 프로세스 컨테이너는 가상 인터페이스와 자체 IP 주소로 자체 네트워크 네임 스페이스에서 실행됩니다.
일반 LXC와 함께 제공됩니다.
4) 기록 중 복사 : 루트 파일 시스템은 기록 중 복사를 사용하여 생성되므로 배포 속도가 매우 빠르며 메모리 절약 및 디스크 절약이 가능합니다.
이것은 Docker가 의존하는 통합 파일 시스템 인 AUFS에서 제공합니다. LXC를 사용하여 AUFS를 직접 설정할 수 있지만 Docker는 표준으로 사용합니다.
5) 로깅 : 각 프로세스 컨테이너의 표준 스트림 (stdout / stderr / stdin)이 실시간 또는 배치 검색을 위해 수집 및 로깅됩니다.
Docker가 제공합니다.
6) 변경 관리 : 컨테이너의 파일 시스템에 대한 변경 사항을 새로운 이미지로 커밋하고 재사용하여 더 많은 컨테이너를 만들 수 있습니다. 템플릿이나 수동 구성이 필요하지 않습니다.
"템플릿 또는 수동 구성"은 LXC에 대한 참조이며,이 두 가지에 대해 알아야합니다. Docker를 사용하면 LXC 구성에 대한 학습없이 가상 머신을 처리하는 데 사용되는 방식으로 컨테이너를 처리 할 수 있습니다.
7) 대화 형 쉘 : 도커는 의사 tty를 할당하고 컨테이너의 표준 입력에 연결할 수 있습니다 (예 : 버리기 대화 형 쉘 실행).
LXC는 이미 이것을 제공합니다.
방금 LXC와 Docker에 대해 배우기 시작했기 때문에 수정이나 더 나은 답변을 환영합니다.
unshare
도구 (또는 직접 clone()
syscall) 보다 쉽게 사용할 수 있도록하는 상용 사용자 도구 입니다. 마찬가지로 Docker는 이러한 것들을 더 쉽게 사용할 수있게합니다 (그리고 이미지를 밀거나 당기는 기능과 같이 테이블에 더 많은 기능을 제공합니다). 내 2c.
update-index
and 같은 명령만으로 Git을 사용하는 것과 비슷 합니다. Docker는 LXC의 "배관"위에 "도자기"계층을 제공하여 더 높은 수준의 개념으로 작업하고 낮은 수준의 세부 사항에 대해 걱정할 필요가 없습니다. read-tree
add
commit
merge
LXD 의 개발이 LXC를 지속적으로 향상 함에 따라 위의 게시물 및 답변은 빠르게 구식이되었습니다 . 예, Docker도 여전히 서 있지 않습니다.
LXD는 이제 사용자가 푸시 / 풀에서 기여하거나 재사용 할 수있는 LXC 컨테이너 이미지를위한 저장소를 구현합니다.
LXD의 LXC에 대한 REST API는 이제 매우 간단한 명령 구문을 사용하여 LXC 컨테이너의 로컬 및 원격 작성 / 배포 / 관리를 모두 가능하게 합니다.
LXD의 주요 기능은 다음과 같습니다.
이 OpenStack은이 수 OpenStack은 지금 플러그인 NCLXD 배포에 LXD를 활용하는이 / 대신, VM웨어 등 KVM을 사용하는 OpenStack은에서 가상 머신으로 LXC 컨테이너를 관리
그러나 NCLXD는 기존 HW VM과 LXC VM이 혼합 된 하이브리드 클라우드도 지원합니다.
지원되는 기능 목록은 OpenStack nclxd 플러그인입니다.
stop/start/reboot/terminate container
Attach/detach network interface
Create container snapshot
Rescue/unrescue instance container
Pause/unpause/suspend/resume container
OVS/bridge networking
instance migration
firewall support
2016 년 4 월 Ubuntu 16.04가 출시 될 때까지 블록 장치 지원, 라이브 마이그레이션 지원과 같은 멋진 기능 이 추가 되었습니다 .
도커는 레이어로 구성된 이미지를 사용합니다. 이것은 이식성, 공유, 버전 관리 및 기타 기능 측면에서 많은 것을 추가합니다. 이러한 이미지는 이식 또는 전송이 매우 쉽고 레이어에 있기 때문에 후속 버전의 변경 사항은 이전 레이어에 레이어 형태로 추가됩니다. 따라서 여러 번 포팅하는 동안 기본 계층을 포팅 할 필요가 없습니다. 도커에는 실행 환경이 포함 된 상태로 이러한 이미지를 실행하는 컨테이너가 있으며, 버전을 쉽게 제어 할 수있는 새로운 레이어로 변경 사항을 추가합니다.
그 외에도 Docker Hub는 수천 개의 공개 이미지가있는 좋은 레지스트리이며 OS 및 기타 소프트웨어가 설치된 이미지를 찾을 수 있습니다. 따라서 응용 프로그램에 대한 좋은 출발점을 얻을 수 있습니다.
이 pithier를 유지하기 위해, 이것은 이미 위의 질문과 대답 입니다 .
그러나 뒤로 물러서서 약간 다르게 대답하면, 도커 엔진 자체는 오케스트레이션을 추가 요소 중 하나로 추가하며 이는 파괴적인 부분입니다. 여러 컨테이너 엔진에서 '어딘가'를 실행하는 컨테이너 조합으로 앱을 실행하기 시작하면 정말 흥미로워집니다. 견고성, 수평 스케일링, 기본 하드웨어에서 완벽한 추상화, 계속 갈 수 있습니다 ...
실제로 당신에게 이것을 제공하는 Docker뿐만 아니라 실제로 Container Orchestration 표준은 Kubernetes입니다.
그런 다음 K8S 아래에 대체 컨테이너 엔진이 있습니다. 흥미로운 것은 Docker와 CRIO입니다. 최근에 빌드되고 데몬이 없으며 Kubernetes 전용 컨테이너 엔진으로 개발되었지만 미성숙합니다. 컨테이너 엔진의 진정한 장기 선택이 될 것이라고 생각합니다.