Skip to content

Latest commit

 

History

History
105 lines (60 loc) · 11 KB

File metadata and controls

105 lines (60 loc) · 11 KB

What is Docker?

도커는 애플리케이션을 개발, 배포 및 실행할 수 있는 개방형 플랫폼입니다. 도커를 사용하면 애플리케이션을 인프라와 분리하여 소프트웨어를 신속하게 제공할 수 있습니다. 도커를 사용하면 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있습니다. 도커의 코드 전달, 테스트 및 배포 방법론을 활용하면 코드 작성과 프로덕션 실행 사이의 지연을 크게 줄일 수 있습니다.

The Docker platform

도커는 컨테이너라는 느슨하게 격리된 환경에서 애플리케이션을 패키징하고 실행할 수 있는 기능을 제공합니다. 격리 및 보안을 통해 주어진 호스트에서 여러 컨테이너를 동시에 실행할 수 있습니다. 컨테이너들은 가볍우면서도 애플리케이션 실행에 필요한 모든 것을 포함하므로, 호스트에 설치된 프로그램에 의존하지 않습니다. 작업 중에도 컨테이너를 공유할 수 있으며, 공유하는 모든 사람이 동일한 방식으로 작동하는 동일한 컨테이너를 사용할 수 있도록 합니다.

도커는 컨테이너의 수명 주기를 관리할 수 있는 툴링과 플랫폼을 제공합니다 :

  • 컨테이너를 사용해 애플리케이션과 지원 구성 요소를 개발하세요
  • 컨테이너는 애플리케이션을 배포하고 테스트하는 단위가 됩니다
  • 준비가 되면, 애플리케이션을 컨테이너 또는 오케스트레이션된 서비스와 같은 프로덕션 환경에 배포하세요. 이는 프로덕션 환경이 로컬 데이터 센터, 클라우드 제공 업체, 두 가지의 하이브리드이든 이에 상관없이 동일하게 동작합니다

What can I use Docker for?

Fast, consistent delivery of your applications

도커는 애플리케이션과 서비스들을 제공하는 로컬 컨테이너들을 사용해 표준화된 개발 작업 환경을 가능하도록 함으로써 개발 수명 주기를 간소화합니다. 컨테이너들은 지속적인 통합 및 연속 전달(CI/CD) 워크플로우에 매우 적합합니다.

다음 예시 시나리오를 고려해보세요 :

  • 개발자들은 로컬에서 코드를 작성하고 도커 컨테이너를 사용하여 동료들과 작업을 공유합니다
  • 그들은 도커를 사용하여 애플리케이션을 테스트 환경으로 밀어 넣고 자동으로 실행하고 수동으로 테스트합니다
  • 개발자가 버그를 발견하면, 개발 환경에서 버그를 수정하고 테스트 및 검증을 위해 테스트 환경에 재배포 할 수 있습니다
  • 테스트가 완료되면, 고객에게 수정 사항을 전달하는 것은 업데이트된 이미지를 프로덕션 환경으로 푸시하는 것만큼이나 간단합니다

Responsive deployment and scaling

도커의 컨테이너 기반 플랫폼은 매우 이동성이 뛰어난 워크로드를 허용합니다. 도커 컨테이너는 개발자의 로컬 노트북, 데이터 센터의 물리적 또는 가상 머신, 클라우드 공급자 또는 혼합된 환경에서 실행할 수 있습니다.

도커의 이동성과 가벼운 특성 덕분에 워크로드를 동적으로 관리하고, 비즈니스 요구 사항에 따라 애플리케이션과 서비스를 거의 실시간으로 확장하거나 축소하는 것이 쉽습니다.

Running more workloads on the same hardware

도커는 가볍고 빠릅니다. 하이퍼바이저 기반 가상 머신에 비해 실행 가능하고 비용적으로 효율적인 대안을 제공하므로, 서버 용량을 더 효율적으로 사용하여 비즈니스 목표를 달성할 수 있습니다. 도커는 고밀도 환경과 더 적은 리소스로 더 많은 작업을 수행해야 하는 소규모 및 중규모 배포에 적합합니다.

Docker architecture

도커는 클라이언트-서버 아키텍처를 사용합니다. 도커 클라이언트는 도커 컨테이너를 빌드, 실행 및 배포하는 고성능 작업을 수행하는 도커 데몬과 통신합니다. 도커 클라이언트와 데몬은 동일한 시스템에서 실행될 수도 있고 도커 클라이언트를 원격 도커 데몬에 연결할 수도 있습니다. 도커 클라이언트와 데몬은 REST API, UNIX 소켓 또는 네트워크 인터페이스를 사용하여 통신합니다. 또 다른 도커 클라이언트는 도커 컴포즈(Docker compose)로, 도커 Compose는 컨테이너 세트로 구성된 애플리케이션으로 작업할 수 있도록 해줍니다. Docker architecture

The Docker daemon

도커 데몬(dockerd)은 Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 도커 객체를 관리합니다. 데몬은 다른 데몬과 통신하여 도커 서비스를 관리할 수도 있습니다.

The Docker client

도커 클라이언트(docker)는 많은 도커 사용자가 도커와 상호 작용하는 주요 방법입니다. docker run과 같은 명령을 사용하면 클라이언트가 이러한 명령을 dockerd로 보내고 dockerd가 이를 실행합니다. 도커 명령은 도커 API를 사용합니다. 도커 클라이언트는 두 개 이상의 데몬과 통신할 수 있습니다.

Docker Desktop

도커 데스크탑은 컨테이너화된 애플리케이션과 마이크로서비스를 빌드하고 공유할 수 있는 Mac, Windows 또는 Linux 환경에 설치하기 쉬운 애플리케이션입니다. 도커 데스크탑에는 도커 데몬(dockerd), 도커 클라이언트(docker), 도커 컴포즈(compose), Docker Content Trust, Kubernetes 및 Credential Helper가 포함되어 있습니다. 자세한 내용은 도커 데스크탑을 참조하세요.

Docker registries

도커 레지스트리는 도커 이미지를 저장합니다. 도커 허브는 누구나 사용할 수 있는 공개 레지스트리이며 도커는 기본적으로 도커 허브에서 이미지를 찾습니다. 개인 레지스트리를 직접 실행할 수도 있습니다.

docker pull 또는 docker run 명령을 사용하면 도커가 설정된 레지스트리에서 필요한 이미지를 가져옵니다. docker push 명령을 사용하면 도커가 설정된 레지스트리에 이미지를 푸시합니다.

Docker objects

도커를 사용하면 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 및 기타 객체를 만들고 사용합니다. 이 섹션은 이러한 객체 중 일부에 대한 간략한 개요입니다.

Images

이미지는 도커 컨테이너를 만드는 설계도가 있는 읽기 전용 템플릿입니다. 종종, 이미지는 다른 이미지를 기반으로 하며, 약간의 추가 사용자 재정의로 구성될 수 있습니다. 예를 들어, ubuntu 이미지를 기반으로 하지만, Apache 웹 서버와 애플리케이션, 그리고 애플리케이션을 실행하는 데 필요한 구성 세부 정보를 추가로 설치하는 이미지를 빌드할 수 있습니다.

직접 자신만의 이미지를 만들거나 다른 사람이 만들어 레지스트리에 게시한 이미지만 사용할 수 있습니다. 직접 자신만의 이미지를 빌드하려면, 이미지를 만들고 실행하는 데 필요한 단계를 정의하는 간단한 구문이 있는 도커 파일(Dockerfile)을 만듭니다. 도커 파일의 각 지침은 이미지에 계층을 만듭니다. 도커 파일을 변경하고 이미지를 다시 빌드하면 변경된 계층만 다시 빌드됩니다. 이는 다른 가상화 기술과 비교했을 때 이미지를 매우 가볍고 작고 빠르게 만드는 요인 중 하나입니다.

Containers

컨테이너는 이미지의 실행 가능한 인스턴스입니다. Docker API 또는 CLI를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있습니다. 컨테이너를 하나 이상의 네트워크에 연결하거나, 스토리지를 연결하거나, 현재 상태를 기반으로 새 이미지를 생성할 수도 있습니다.

기본적으로, 컨테이너는 다른 컨테이너와 호스트 머신에서 비교적 잘 격리됩니다. 컨테이너의 네트워크, 스토리지 또는 기타 기본 하위 시스템이 다른 컨테이너나 호스트 머신에서 얼마나 격리되는지 제어할 수 있습니다.

컨테이너는 이미지와 컨테이너를 생성하거나 시작할 때 제공하는 모든 구성 옵션으로 정의됩니다. 컨테이너가 제거되면 영구 스토리지에 저장되지 않은 상태의 모든 변경 사항이 사라집니다.

예시 docker run 명령

다음 명령은 ubuntu 컨테이너를 실행하고 로컬 명령줄 세션에 대화형으로 연결한 다음 /bin/bash를 실행합니다.

$ docker run -i -t ubuntu /bin/bash

이 명령을 실행하면 다음과 같은 일이 발생합니다(기본 레지스트리 구성을 사용하는 경우):

  1. 로컬에 ubuntu 이미지가 없으면, 마치 docker pull ubuntu 명령을 수동적으로 실행하는 것처럼, 도커는 구성된 레지스트리에서 이를 가져옵니다.
  2. 도커는 마치 docker container create 명령을 수동으로 실행하는 것처럼, 새 컨테이너를 생성합니다.
  3. 도커는 컨테이너에 최종 계층으로 읽기-쓰기 파일 시스템을 할당합니다. 이를 통해 실행 중인 컨테이너는 로컬 파일 시스템에서 파일과 디렉토리를 생성하거나 수정할 수 있습니다.
  4. 도커는 네트워크 옵션을 지정하지 않았기 때문에 컨테이너를 기본 네트워크에 연결하기 위한 네트워크 인터페이스를 만듭니다. 여기에는 컨테이너에 IP 주소를 할당하는 것이 포함됩니다. 기본적으로 컨테이너는 호스트 머신의 네트워크 연결을 사용하여 외부 네트워크에 연결할 수 있습니다.
  5. 도커는 컨테이너를 시작하고 /bin/bash를 실행합니다. 컨테이너가 대화형으로 실행되고 터미널에 연결되어 있기 때문에(-i-t 플래그로 인해) Docker가 터미널에 출력을 기록하는 동안 키보드를 사용하여 입력을 제공할 수 있습니다.
  6. /bin/bash 명령을 종료하기 위해 exit를 실행하면, 컨테이너는 중지되지만 제거되지 않습니다. 다시 시작하거나 제거할 수 있습니다.

The underlying technology

도커는 Go 프로그래밍 언어로 작성되었으며 Linux 커널의 여러 기능을 활용하여 기능을 제공합니다. 도커는 namespace라는 기술을 사용하여 컨테이너라는 격리된 작업 공간을 제공합니다. 컨테이너를 실행하면 도커는 해당 컨테이너에 대한 네임스페이스 세트를 만듭니다.

이러한 네임스페이스는 격리 계층을 제공합니다. 컨테이너의 각 측면은 별도의 네임스페이스에서 실행되며 해당 네임스페이스로 액세스가 제한됩니다.

Next steps