이번 섹션에서는 docker의 기본 개념에 대한 글을 번역을 진행합니다. 

https://docs.docker.com/get-started/overview/

 

Docker overview

Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you...

docs.docker.com

개 요

 Docker는 어플리케이션을 개발, 전달, 수행하기 위한 오픈 플랫폼입니다. 

 Docker를 사용하면 어플리케이션을 인프라와 분리해서 소프트웨어를 빠르게 전달 할 수 있습니다. 

 Docker의 배송, 테스트, 배포 방법을 활용해서 코드 작성과 제품의 수행 사이의 지연 시간을 크게 줄일 수 있습니다. 

Docker 플랫폼

 Docker 컨테이너라고 부르는 느슨하게 고립된 환경 안에서 어플리케이션을 패키징하고 실행 할 수 있는 기능을

 제공합니다. 격리와 보안을 통해서 호스트에서 동시에 많은 컨테이너를 수행 할 수 있습니다. 

 컨테이너는 하이퍼 바이저를 로드하지 않고 호스트 머신의 커널 안에서 직접 실행 되기 때문에 가볍습니다. 

 (※ 하이퍼 바이저는 호스트 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼입니다.

     가상화 머신 매니져라고도 부릅니다. )

 가상 머신을 사용하는 것보다 주어진 하드웨어에서 더 많은 컨테이너를 수행 할 수 있습니다. 

 실제로 가상 머신인 호스트 안에서도 docker 컨테이너를 수행 할 수 있습니다. 

 Docker는 컨테이너의 수명주기를 관리하기 위한 툴과 플랫폼을 제공합니다. 

 ▶ 어플리케이션을 개발하고 그것을 컨테이너를 사용해서 구성하세요

 ▶ 컨테이너는 어플리케이션의 배포와 테스트 단위가 됩니다. 

 ▶ 준비가 되면 컨테이너 또는 조율된 서비스로 작업 환경에 어플리케이션을 설치해서 수행하세요. 이 작업은

     작업 환경이 로컬 데이터 센터, 클라우드 제공자 또는 이 둘의 복합적인 환경이든 관계없이 동일하게 동작합니다

 

Docker engine

  docker engine은 이러한 주요 기능을 포함하는 클라이언트-서버 어플리케이션입니다. 

 ▶ 서버는 데몬 프로세스라고 부르는 장기간 수행하는 프로그램 종류를 말합니다. 

     (※ deamon은 사용자가 직접 제어하지 않고 백그라운드로 실행되는 프로그램이며 윈도우의 서비스와 비슷함)

 ▶ REST API는 데몬과 대화를 하고 수행할 작업을 지시하는데 사용하는 명시적인 API입니다. 

 ▶ CLI는 클라이언트가 사용하는 command line 인터페이스입니다. 

 CLI는 docker REST API를 사용해서 직접 CLI명령 또는 스크립트를 통해서 docker 데몬을 제어하거나 소통합니다. 

 많은 다른 docker 어플리케이션은 기본 API와 CLI를 사용합니다. 

 데몬은 images, container, networks와 volumes같은 docker object를 생성하고 관리합니다. 

 자세한 내용은 Docker architecture를 참조하세요

 

Docker를 사용해서 무엇을 할 수 있나요?

어플리케이션을 빠르고 일관성 있게 전달

 docker는 표준화된 환경에서 작업 할 수 있도록 어플리케이션 및 서비스를 제공하는 로컬 컨테이너를 사용해서 

 개발 사이클을 간소화 합니다.

 컨테이서는 지속적인 통합/ 지속적인 제공(CI/CD) 워크 플로우에 적합합니다. 

 다음 예제를 고려해보세요

  • 개발자들은 로컬에서 코드를 작성하고 docker 컨테이너를 사용해서 동료들과 그 작업들을 공유합니다.
  • docker를 사용해서 테스트 환경으로 어플리케이션을 넣어서 자동 및 수동 test를 수행합니다. 
  • 개발자가 버그를 발견했을 때 그것을 개발 환경에서 수정하고 테스트 검증을 위한 테스트 환경으로 재 배포할 수 있습니다.
  • 테스트가 완료되었을 때 고객에게 수정 사항을 적용하는 것은 업데이트 된 이미지를 운영 환경으로 푸시하는 것처럼 간단합니다. 

Responsive deployment and scaling

 docker의 컨테이너 기반 플랫폼은 portable한 작업들을 제공합니다. docker 컨테이너는 개발자의 로컬 노트북이나

 데이터 센터의 물리 또는 가상머신, 클라우드 또는 이러한 복합적인 환경에서 수행할 수 있습니다. 

 docker의 portability와 가벼운 특성을 통해서 거의 실시간으로 어플리케이션이나 서비스의 확장 및 축소 작업들을 

 동적으로 쉽게 관리 할 수 있습니다. 

같은 하드웨어에서 저 많은 작업 실행 

 docker는 가볍고 빠릅니다. 하이퍼 바이져 기반의 가상 머신 대신에 효율적인 대안을 제시하고 목표 달성을 위해서

 더 많은 연산 능력을 사용 할 수 있습니다. 

 docker는 고밀도로 구성된 환경과 적은 리소스로 더 많은 작업을 수행해야 하는 중소규모 배포에 적합 합니다. 

 

Docker의 구성방식 

 docker는 서버-클라이언트 방식의 구조를 사용합니다. 

 docker 클라이언트는 docker 컨테이너의 빌드, 실행 및 배포 작업을 주도하는 docker 데몬과 통신합니다. 

 docker 클라이언트와 데몬은 같은 시스템에서 수행 될 수 잇고 docker 데몬에 원격으로 접속 할 수 있습니다. 

 docker 클라이언트와 데몬은 UNIX 소켓이나 네트워크 인터페이스로 REST API를 사용해서 통신합니다 .

Docker 데몬

 docker 데몬은 Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크, 스토리지를 관리합니다. 

 데몬은 docker 서비스를 관리하는 다른 데몬들과 통신 할 수 있습니다. 

Docker 클라이언트 

 docker 클라이언트는 많은 docker 사용자들이 docker와 소통하는 일반적인 방법입니다. 

 docker run가 같은 명령어를 사용할 때 클라이언트는 dockerd에게 명령어를 전송하고 이를 수행합니다. 

 docker 명령어는 docker API를 사용합니다. docker 클라이언트는 하나 이상의 데몬고 소통 할 수 있습니다. 

Docker registries

 docker 레지스트리는 docker image들을 저장합니다. docker hub는 누구나 사용할 수 있는 공개용 registry이고 

 docker는 기본적으로 docker hub에서 image를 찾도록 설정되어 있습니다. 

 개인 소유의 private 레지스트리를 사용할 수도 있습니다. Docker Datacenter를 사용한다면 Docker Trusted Registry도 

 포함됩니다. 

 docker pull이나 docker run 명령어를 사용하면 설정된 레지스트리에서 이미지를 가져옵니다. 

 docker push 명령어를 사용하면 설정된 레지스트리로 이미지를 넣습니다. 

Docker Object

 docker를 사용할 때 이미지, 컨테이너, 네트워크, volumes, 플러그인, 기타 오브젝트를 생성하거나 사용할 수 있습니다.

 이 섹션 그 오브젝트의 일부에 대한 간략한 설명입니다.

이미지

 이미지는 docker 컨테이너를 만드는 방법이 포함된 읽기 전용 템플릿입니다.

 흔히 이미지는 다른 이미지 기반에 추가적인 사용자의 정의를 추가하기도 합니다.

 예를 들면 아파치 웹서버나 어플리케이션을 실행하는데 필요한 세부 구성을 설치할 때 우분투 이미지를 기반으로 

 이미지를 만들 수 있습니다. 

 나만의 이미지를 만들거나 다른 사람이 만들고 레지스트리에 게시한 이미지만 사용 할 수 있습니다. 

 자신의 이미지를 작성하려면 이미지를 생성하고 수행하는데 필요한 단계를 정의하는 간단한 구문으로 

 Dockerfile을 작성해야 합니다. Dockerfile의 개별 명령은 이미지에 레이어를 만듭니다. 

 Dockerfile이 변경되고 이미지가 재 빌드되면 오직 변경된 레이어만 다시 빌드합니다. 

 이것은 다른 가상화 기술과 비교하면 이미지를 매우 가볍고 작고 빠르게 만드는 방법중에 하나입니다. 

컨테이너

 컨테이너는 실행 가능한 이미지의 인스턴스입니다. docker의 API또는 CLI를 사용해서 컨테이너를 생성, 시작, 중단,

 이동 또는 삭제 할 수 있습니다.

 컨테이너에 하나 이상의 네트워크를 연결하거나 저장소를 연결하거나, 현재의 상태를 기반으로 새로운 이미지를

 만들 수 도 있습니다.

 기본적으로 컨테이너는 다른 컨테이너 및 호스트 시스템과 비교적 격리 되어 있습니다.

 컨테이너의 네트워크, 스토리지 또는 기타 기본 서브 시스템이 다른 컨테이너 및 호스트 시스템과 격리 되는 방식을 

 제어 할 수 있습니다. 컨테이너는 생성되거나 시작될 때 제공되는 이미지와 구성옵션으로 정의됩니다.

 컨테이너를 제거하면 영구 저장소에 저장되지 않는 변경은 사라집니다. 

예제 docker run 명령

 다음의 명령어은 우분투 컨테이너를 수행하고 로컬 커맨드 라인 세션으로 연결하고 /bin/bash를 수행합니다. 

docker run -i -t ubuntu /bin/bash

 이 명령어가 수행되면 다음과 같은 일이 발생합니다. 

 1. 우분투 이미지를 가지고 있지 않다면 마치 'docker pull ubuntu'를 수행한 것처럼 설정된 레지스트리에서 이미지를

    가져옵니다.

 2. docker container create 명령어를 수동으로 실행한 것처럼 docker의 새로운 컨테이너가 생성됩니다. 

 3. docker는 컨테이너의 최종 레이어로 읽기-쓰기 파일 시스템을 할당합니다. 이를 통해서 로컬 파일 시스템 안에서 

    실행중인 컨테이너의 파일과 디렉토리를 생성하거나 수정할 수 있습니다. 

 4. docker는 네트워크 옵션을 지정하지 않았기 때문에 기본 네트워크를 컨테이너에 연결하기 위한 네트워크

    인터페이스를 생성합니다. 컨테이너의 IP 주소 할당도 포함됩니다. 기본적으로 컨테이너는 호스트 머신의

    네트워크 연결을 사용해서 외부 네트워크 연결 할 수 있습니다.

 5. docker는 컨테이너를 시작하고 /bin/bash를 실행합니다. 컨테이너는 인터렉티브하게 수행되고 터미널이 연결 되기

    때문에 키보드 입력을 제공할 수 있습니다. 

 6. exit를 입력해서 /bin/bash 명령을 종료하면 컨테이너는 멈추지만 삭제되지 않습니다. 컨테이너를 다시 시작하거나

    삭제 할 수 있습니다.

 

'docker' 카테고리의 다른 글

[docker] command line  (0) 2020.06.17

+ Recent posts