[재 인쇄] 아마도 Docker의 개념에 대한 가장 명확한 기사 일 것입니다.

[재 인쇄] 원본 링크 : https://mp.weixin.qq.com/s/xSbYTJmLuqsyYEDEIsndZw


이 기사에서는 Docker의 개념에 대한 자세한 소개 만 제공하며 Docker 환경과 같은 일부 설치 및 Docker의 일부 공통 작업 및 명령은 포함하지 않습니다.

Docker는 세계 최고의 소프트웨어 컨테이너 플랫폼이므로 Docker의 개념을 이해하려면 먼저 컨테이너부터 시작해야합니다.

먼저 컨테이너를 이해하는 것부터 시작하십시오.

1.1 컨테이너 란?



컨테이너에 대한보다 공식적인 설명을 살펴 보겠습니다. 컨테이너를 요약하는 한 문장 : 컨테이너는 개발, 제공 및 배포를 위해 소프트웨어를 표준화 된 단위로 패키징하는 것입니다.
  • 컨테이너 이미지는 코드, 런타임 환경, 시스템 도구, 시스템 라이브러리 및 설정 등 소프트웨어를 실행하는 데 필요한 모든 콘텐츠를 포함하는 가볍고 실행 가능한 독립 소프트웨어 패키지입니다.
  • 컨테이너화 된 소프트웨어는 Linux 및 Windows 기반 애플리케이션에 적합하며 모든 환경에서 일관되게 실행될 수 있습니다.
  • 컨테이너는 소프트웨어 독립성을 제공하고 외부 환경 차이 (예 : 개발 및 리허설 환경의 차이)로부터 보호하므로 동일한 인프라에서 서로 다른 소프트웨어를 실행하는 팀 간의 충돌을 줄이는 데 도움이됩니다.


컨테이너에 대한 더 인기있는 설명을 살펴 보겠습니다. 컨테이너에

대한 인기있는 설명이 필요하면 컨테이너가 물건을 보관할 수있는 장소라고 생각합니다. 마치 책가방이 모든 종류의 문구를 담을 수 있고 옷장이 모든 것을 담을 수있는 것처럼 종류의 옷, 신발장에 모든 종류의 신발을 담을 수 있습니다. 컨테이너 스토리지에 대해 이야기하는 내용은 웹 사이트, 프로그램 또는 시스템 환경과 같은 애플리케이션에 더 편향 될 수 있습니다.
01.png

1.2 그래픽 물리적 머신, 가상 머신 및 컨테이너

가상 머신과 컨테이너의 비교는 나중에 자세히 소개 될 예정이며, 여기에서는 인터넷 사진을 통해 물리적 머신, 가상 머신 및 컨테이너에 대한 모든 사람의 이해를 깊게하기위한 것입니다.

물리적 시스템 :
02.jpg

가상 기기:
03.jpg

용기 :
04.jpg

위의 세 가지 추상 다이어그램을 통해 비유로 일반화 할 수 있습니다. 컨테이너 가상화는 하드웨어가 아닌 운영 체제이며 동일한 운영 체제 리소스 집합이 컨테이너간에 공유됩니다. 가상 머신 기술은 하드웨어 세트를 가상화하고 여기에서 완전한 운영 체제를 실행하는 것입니다. 따라서 컨테이너의 격리 수준이 약간 낮아집니다.

위의 설명을 통해 누구나 익숙하지 않고 익숙한 컨테이너 개념을 사전에 이해할 수 있다고 생각합니다 .Docker의 개념에 대해 이야기 해 봅시다.


둘째, Docker의 몇 가지 개념에 대해 이야기하겠습니다.

05.png

2.1 Docker 란?

Docker가 무엇인지 솔직히 말해서 말하기는 쉽지 않습니다. Docker가 무엇인지 네 가지 요점에서 설명하겠습니다.
  • Docker는 세계 최고의 소프트웨어 컨테이너 플랫폼입니다.
  • Docker는 개발 및 구현을 위해 Google에서 출시 한 Go 언어를 사용합니다. Linux 커널의 cgroup, 네임 스페이스, AUFS와 유사한 UnionFS 기술을 기반으로 운영 체제 수준의 가상화 기술인 프로세스를 캡슐화하고 격리합니다. 격리 된 프로세스는 호스트 및 기타 격리 된 프로세스와 독립적이므로 컨테이너라고도합니다. Docke는 원래 LXC를 기반으로 구현되었습니다.
  • Docker는 개발 환경 설정 및 구성과 같은 반복적 인 작업을 자동화 할 수 있으므로 개발자는 개발자가 정말 중요한 일, 즉 훌륭한 소프트웨어 구축에 집중할 수 있습니다.
  • 사용자는 컨테이너를 쉽게 만들고 사용하고 자신의 애플리케이션을 컨테이너에 넣을 수 있습니다. 컨테이너는 일반 코드를 관리하는 것처럼 버전 관리, 복사, 공유 및 수정을 수행 할 수도 있습니다.


06.jpg

2.2 Docker 생각

  • 컨테이너
  • 표준화 : ① 운송 방식, ② 저장 방식, ③API 인터페이스
  • 격리


2.3 Docker 컨테이너의 기능

  • 머신에서 실행되는 경량의 여러 Docker 컨테이너는이 머신의 운영 체제 커널을 공유 할 수 있습니다. 빠르게 시작할 수 있으며 컴퓨팅 및 메모리 리소스를 거의 차지하지 않습니다. 이미지는 파일 시스템 계층을 통해 구성되며 일부 공통 파일을 공유합니다. 이러한 방식으로 디스크 사용량을 최소화하고 이미지를 더 빠르게 다운로드 할 수 있습니다.
  • 표준, Docker 컨테이너는 개방형 표준을 기반으로하며 모든 주류 Linux 버전, Microsoft
    Windows 및 VM, 베어 메탈 서버 및 클라우드를 포함한 모든 인프라 에서 실행할 수 있습니다 .
  • Docker가 애플리케이션에 제공하는 격리 인 보안은 서로 격리하는 데 국한되지 않고 기본 인프라와도 독립적입니다. Docker는 기본적으로 가장 강력한 격리를 제공하므로 애플리케이션 문제는 단일 컨테이너의 문제 일 뿐이며 전체 머신에 영향을주지 않습니다.


2.4 Docker를 사용하는 이유

  • Docker의 이미지는 커널을 제외한 완전한 런타임 환경을 제공하여 애플리케이션 런타임 환경의 일관성을 보장하므로 "이 코드는 내 컴퓨터에서 괜찮습니다"와 같은 문제가 없습니다 .- 일관된 런타임 환경
  • 초 또는 밀리 초의 시작 시간을 달성 할 수 있습니다. 개발, 테스트 및 배포 시간을 크게 절약합니다. -빠른 시작 시간
  • 공용 서버를 피하십시오. 리소스는 다른 사용자의 영향을 쉽게받습니다. --격리
  • 집중적으로 발생하는 서버 사용의 압박에 잘 대처-탄력적 인 확장 및 빠른 확장
  • 한 플랫폼에서 실행되는 응용 프로그램은 응용 프로그램이 정상적으로 실행되지 못하게하는 운영 환경의 변화에 ​​대해 걱정하지 않고 다른 플랫폼으로 쉽게 마이그레이션 할 수 있습니다. —— 쉽게 마이그레이션
  • Docker를 사용하면 애플리케이션 이미지를 사용자 지정하여 지속적 통합, 지속적 배포 및 배포를 수행 할 수 있습니다. -지속적인 배포 및 배포

컨테이너에 대해 이야기 할 때 가상 머신과 비교해야합니다.

세, 컨테이너 VS 가상 머신

간단히 말해 : 컨테이너와 가상 머신은 리소스 분리 및 할당에있어 유사한 이점이 있지만 기능이 다릅니다. 컨테이너는 하드웨어가 아닌 운영 체제를 가상화하기 때문에 컨테이너를 이식하기 쉽고 더 효율적입니다.

3.1 둘의 비교

전통적인 가상 머신 기술은 하드웨어 세트를 가상화하고 완전한 운영 체제를 실행 한 다음 시스템에서 필요한 애플리케이션 프로세스를 실행하는 것입니다. 컨테이너의 애플리케이션 프로세스는 호스트의 커널에서 직접 실행되지만 컨테이너는 그렇지 않습니다. 자체 커널이 있으며 하드웨어 가상화가 없습니다. 따라서 컨테이너는 기존 가상 머신보다 더 이식성이 뛰어납니다.
07.png

3.2 컨테이너 및 가상 머신 (VM) 요약

08.png

  • 컨테이너는 코드와 종속 리소스를 함께 패키징하는 데 사용되는 애플리케이션 수준의 추상화입니다. 여러 컨테이너가 동일한 시스템에서 실행되어 운영 체제 커널을 공유 할 수 있지만 각 컨테이너는 사용자 공간에서 독립적 인 프로세스로 실행됩니다. 가상 머신과 비교할 때 컨테이너는 공간을 덜 차지하며 (컨테이너 이미지 크기는 일반적으로 수십 메가 바이트에 불과 함) 시작은 즉시 완료 될 수 있습니다.
  • 가상 머신 (VM)은 하나의 서버를 여러 서버로 전환하는 데 사용되는 물리적 하드웨어 계층 추상화입니다. 하이퍼 바이저를 사용하면 하나의 컴퓨터에서 여러 VM을 실행할 수 있습니다. 각 VM에는 완전한 운영 체제 세트, 하나 이상의 애플리케이션, 필요한 이진 파일 및 라이브러리 리소스가 포함되어 있으므로 많은 공간을 차지합니다. 그리고 VM 시작도 매우 느립니다.


Docker 공식 웹 사이트를 통해 우리는 Docker의 많은 장점을 알고 있지만 두 가지 사용 시나리오가 다르기 때문에 가상 머신 기술을 완전히 거부 할 필요가 없습니다. 가상 머신은 전체 운영 환경을 완전히 격리하는 데 더 좋습니다. 예를 들어, 클라우드 서비스 공급자는 일반적으로 가상 머신 기술을 사용하여 여러 사용자를 격리합니다. Docker는 일반적으로 프런트 엔드, 백 엔드 및 데이터베이스와 같은 다양한 애플리케이션을 격리하는 데 사용됩니다.

3.3 컨테이너와 가상 머신 (VM) 모두 공존 가능

내가 생각하는 한, 누가 둘을 대체할지는 중요하지 않지만 둘은 조화롭게 공존 할 수있다.
09.png

Docker의 매우 중요한 세 가지 기본 개념이 세 가지 개념을 이해하면 Docker의 전체 수명주기를 이해할 수 있습니다.


넷째, Docker의 기본 개념

Docker에는 세 가지 기본 개념이 있습니다.
  • 镜像 (Image)
  • 컨테이너
  • 저장소


10.jpg

4.1 이미지-특수 파일 시스템

운영 체제는 커널과 사용자 공간으로 나뉩니다. Linux의 경우 커널이 시작된 후 사용자 공간 지원을 제공하기 위해 루트 파일 시스템이 마운트됩니다. Docker 이미지 (이미지)는 루트 파일 시스템과 동일합니다.

Docker 이미지는 특수 파일 시스템입니다. 컨테이너 런타임에 필요한 프로그램, 라이브러리, 리소스, 구성 및 기타 파일을 제공하는 것 외에도 런타임을 위해 준비된 일부 구성 매개 변수 (예 : 익명 볼륨, 환경 변수, 사용자, 등)). 이미지에는 동적 데이터가 포함되어 있지 않으며 이미지가 빌드 된 후에도 콘텐츠가 변경되지 않습니다.

Docker가 설계되었을 때 Union FS의 기술을 최대한 활용하고 계층 형 스토리지 아키텍처로 설계했습니다. 미러는 실제로 다중 레이어 파일 시스템의 조합으로 구성됩니다.

미러링이 구축되면 레이어별로 구축되고 전자 레이어가 후자 레이어의 기초가됩니다. 각 레이어가 구성된 후에는 변경 사항이 없으며 후자의 레이어에 대한 변경 사항은 자신의 레이어에서만 발생합니다. 예를 들어, 이전 레이어의 파일을 삭제하는 작업은 실제로 이전 레이어의 파일을 삭제하는 것이 아니라 현재 레이어에서 파일을 삭제 된 것으로 표시하는 것뿐입니다. 최종 컨테이너가 실행 중일 때이 파일은 표시되지 않지만 실제로 파일은 항상 이미지를 따릅니다. 따라서 거울을 만들 때는 각별한주의가 필요합니다. 각 레이어에는 레이어에 추가해야하는 항목 만 포함되어야하며 추가 항목은 레이어 구성이 끝나기 전에 정리해야합니다.

계층 적 스토리지의 기능을 사용하면 미러링을보다 쉽게 ​​재사용하고 사용자 지정할 수 있습니다. 이전에 빌드 한 이미지를 기본 레이어로 사용한 다음 새 레이어를 추가하여 필요한 항목을 사용자 지정하고 새 이미지를 빌드 할 수도 있습니다.

4.2 컨테이너 (컨테이너)-런타임을 미러링하는 엔티티

이미지 (Image)와 컨테이너 (Container) 사이의 관계는 객체 지향 프로그래밍의 클래스 및 인스턴스와 유사하며 이미지는 정적 정의이고 컨테이너는 런타임시 이미지의 엔티티입니다. 컨테이너는 생성, 시작, 중지, 삭제, 일시 중단 등이 가능합니다.

컨테이너의 본질은 프로세스이지만 호스트에서 직접 실행되는 프로세스와 달리 컨테이너 프로세스는 자체 독립 네임 스페이스에서 실행됩니다. 앞에서 언급했듯이 미러링은 계층 형 스토리지를 사용하며 컨테이너도 사용합니다.

용기 저장 층의 수명주기는 용기의 수명주기와 동일하며 용기가 죽으면 용기 저장 층도 죽는다. 따라서 컨테이너가 삭제되면 컨테이너의 저장 계층에 저장된 모든 정보가 손실됩니다.

Docker 모범 사례의 요구 사항에 따라 컨테이너는 스토리지 계층에 데이터를 쓰지 않아야하며 컨테이너 스토리지 계층은 상태 비 저장 상태로 유지되어야합니다. 모든 파일 쓰기 작업은 데이터 볼륨 (볼륨)을 사용하거나 호스트 디렉터리를 바인딩해야합니다. 이러한 위치에서 읽고 쓰면 컨테이너 저장소 계층을 건너 뛰고 호스트 (또는 네트워크 저장소)에 직접 읽고 씁니다. 안정성이 높아집니다. 데이터 볼륨의 수명주기는 컨테이너와 독립적이며 컨테이너는 죽고 데이터 볼륨은 죽지 않습니다. 따라서 데이터 볼륨을 사용한 후 컨테이너를 삭제하고 마음대로 다시 실행할 수 있지만 데이터가 손실되지는 않습니다.

4.3 저장소-미러 파일이 중앙에 저장되는 장소

이미지를 빌드 한 후 현재 호스트에서 쉽게 실행할 수 있지만 다른 서버에서이 이미지를 사용해야하는 경우 이미지에 대한 중앙 집중식 저장 및 배포 서비스가 필요합니다. Docker Registry가 바로 그러한 서비스입니다.

Docker Registry는 여러 리포지토리를 포함 할 수 있습니다. 각 리포지토리는 여러 태그를 포함 할 수 있습니다. 각 태그는 미러에 해당합니다. 따라서 미러웨어 하우스는 이전에 사용한 코드웨어 하우스와 유사하게 Docker가 미러 파일을 중앙에 저장하는 데 사용하는 곳입니다.

일반적으로 창고에는 동일한 소프트웨어의 서로 다른 버전의 이미지가 포함되며 태그는 종종 소프트웨어의 각 버전에 해당하는 데 사용됩니다. <warehouse name> : <tag> 형식을 사용하여이 소프트웨어의 어느 버전이 미러 이미지인지 지정할 수 있습니다. 레이블이 지정되지 않은 경우 최신 레이블이 기본 레이블로 사용됩니다.

다음은 Docker Registry 공용 서비스 및 사설 Docker Registry의 개념에 대한 보충 자료입니다.

Docker Registry 공용 서비스는 사용자에게 개방되어 있으며 사용자가 이미지를 관리 할 수 ​​있도록하는 레지스트리 서비스입니다. 일반적으로 이러한 유형의 공공 서비스는 사용자가 공개 이미지를 무료로 업로드 및 다운로드 할 수 있도록하며, 사용자가 비공개 이미지를 관리 할 수 ​​있도록 유료 서비스를 제공 할 수 있습니다.

가장 일반적으로 사용되는 레지스트리 공용 서비스는 기본 레지스트리이기도 한 공식 Docker Hub이며 많은 고품질 공식 미러가 있습니다. 웹 사이트는 hub.docker.com/입니다. 중국의 Docker Hub에 액세스하는 속도가 느릴 수 있으며 Docker Hub와 유사한 공공 서비스를 제공하는 일부 클라우드 서비스 제공 업체도 중국에 있습니다.

공용 서비스를 사용하는 것 외에도 사용자는 로컬에서 개인 Docker 레지스트리를 빌드 할 수도 있습니다. Docker는 공식적으로 비공개 레지스트리 서비스로 직접 사용할 수있는 Docker 레지스트리 이미지를 제공합니다. 오픈 소스 Docker Registry 이미지는 사용에 영향을주지 않고 Docker 명령을 지원하기에 충분한 Docker Registry API의 서버 측 구현 만 제공합니다. 그러나 여기에는 그래픽 인터페이스와 미러 유지 관리, 사용자 관리 및 액세스 제어와 같은 고급 기능이 포함되어 있지 않습니다.

Docker의 개념은 기본적으로 완료되었으며 마지막으로 빌드, 배송 및 실행에 대해 이야기합니다.

5. 마지막 강연 : 빌드, 배송 및 실행

Docker 공식 웹 사이트를 검색하면 "Docker-Build, Ship, and Run Any App, Anywhere"라는 단어를 찾을 수 있습니다. 그렇다면 Build, Ship 및 Run은 정확히 무엇을하고 있습니까?
11.png

  • 빌드 (빌드 이미지) : 이미지는 파일, 운영 환경 및 기타 리소스를 포함하는 컨테이너와 같습니다.
  • 선박 (운송 미러링) : 호스트와 창고 사이의 운송. 여기서 창고는 수퍼 터미널과 같습니다.
  • 실행 : 실행중인 이미지는 컨테이너이고 컨테이너는 프로그램을 실행하는 장소입니다.


Docker 실행 프로세스는웨어 하우스로 이동하여 이미지를 로컬로 가져온 다음 명령을 사용하여 이미지를 컨테이너로 실행하는 것입니다. 따라서 Docker는 Docker의 중국어 번역 포터와 정확히 동일한 Docker 또는 Docker라고도합니다.

여섯, 요약

이 기사는 주로 Docker의 몇 가지 일반적인 개념을 자세히 설명하지만 Docker 설치, 미러링 사용 및 컨테이너 작동은 포함하지 않습니다. 독자들이 책과 공문서를 읽음으로써이 부분을 마스터 할 수 있기를 바랍니다.

원본 링크 : https://mp.weixin.qq.com/s/xSbYTJmLuqsyYEDEIsndZw

추천

출처blog.csdn.net/michael_f2008/article/details/87267485