[도커] Docker overview

DongGu·2021년 3월 24일
0

https://docs.docker.com/get-started/overview/ 를 번역한 글입니다.

Docker Overview

Docker는 응용프로그램 개발, 발송 및 실행을 위한 오픈소스이다. Docker를 사용하면 소프트웨어를 신속하게 제공할 수 있도록 애플리케이션과 인프라를 분리할 수 있다. Docker를 사용하면 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있다. 코드를 신속하게 발송, 테스트, 배치하는 도커의 방법론을 활용하면 코드 작성과 프로덕션에서 실행 사이의 지연을 현저하게 줄일 수 있다.

The Docker platform

도커는 컨테이너라고 불리는 느슨하게 격리된 환경에서 애플리케이션을 패키징하고 실행할 수 있는 기능을 제공한다. 격리 및 보안을 통해 지정된 호스트에서 여러 컨테이너를 동시에 실행할 수 있다. 컨테이너는 경량이며 애플리케이션을 실행하는 데 필요한 모든 것을 포함하고 있으므로 호스트에 현재 설치되어 있는 것에 의존할 필요가 없다. 작업하는 동안 컨테이너를 쉽게 공유할 수 있으며, 공유되는 모든 사람이 동일한 방식으로 동일한 컨테이너를 얻는다.

도커는 컨테이너의 사이클을 관리하기 위해 도구와 플랫폼을 제공한다.

  • 컨테이너를 사용하여 응용프로그램 및 지원 구성요소를 개발하십시오.
  • 컨테이너는 응용 프로그램을 배포하고 테스트하는 장치가 된다.
  • 준비가 되었으면 애플리케이션을 컨테이너 또는 오케스트레이션된 서비스로 프로덕션 환경에 배포하십시오. 이는 프로덕션 환경이 로컬 데이터 센터, 클라우드 공급자, 하이브리드든 뭐든 작동한다.

What can I use Docker for?

Fast, consistent delivery of your appliactions

도커는 개발자가 애플리케이션과 서비스를 제공하는 로컬 컨테이너를 사용하여 표준화된 환경에서 작업할 수 있도록 함으로써 개발 라이프사이클을 간소화한다. 컨테이너는 지속적인 통합과 지속적인 전달(CI/CD) 워크플로우에 적합하다.

다음 예제 시나리오를 고려하십시오.

  • 개발자들은 현지에서 코드를 작성하고 도커 컨테이너를 사용하여 동료들과 작업을 공유한다.
  • 그들은 도커를 사용하여 응용프로그램을 테스트 환경으로 밀어넣고 자동 및 수동 테스트를 실행한다.
  • 개발자가 버그를 발견하면 개발 환경에서 버그를 수정하여 테스트 및 유효성 검사를 위해 테스트 환경에 재배치할 수 있다.
  • 테스트가 완료되면 고객에게 수정 사항을 제공하는 것이 업데이트된 이미지를 프로덕션 환경으로 푸시하는 것만큼 간단하다.
Responsive deployement and scaling

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

또한 Docker의 휴대성과 경량성으로 인해 비즈니스 요구에 따라 애플리케이션과 서비스를 거의 실시간으로 확장하거나 해체하여 워크로드를 동적으로 관리할 수 있다.

Running more workloads on the same hardware

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

Docker Architecture

Docker는 클라이언트-서버 아키텍처를 사용한다. Docker 클라이언트는 Docker 대몬과 대화하여 Docker 컨테이너를 제작, 실행 및 배포하는 무거운 작업을 수행한다. Docker 클라이언트와 데몬은 동일한 시스템에서 실행하거나, Docker 클라이언트를 원격 Docker 데몬에 연결할 수 있다. Docker 클라이언트와 데몬은 REST API, UNIX 소켓 또는 네트워크 인터페이스를 통해 통신한다. 또 다른 도커 클라이언트는 컨테이너 세트로 구성된 응용프로그램으로 작업할 수 있는 도커 작성이다.

Docker Architecture Diagram

The Docker daemon

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

The Docker client

도커 클라이언트(docker)는 많은 도커 사용자가 도커와 상호 작용하는 일차적인 방법이다. 다음과 같은 명령(docker run)을 사용하는 경우, 클라이언트에게 그 명령어를 dockerd에게 전송한다. docker 명령어는 Docker API를 사용한다. 도커 클라이언트는 하나 이상의 데몬과 통신할 수 있다.

Docker regisitries

도커 레지스트리는 도커 이미지를 저장한다. 도커 허브는 누구나 사용할 수 있는 공용 레지스트리로, 도커 허브에서 기본적으로 이미지를 찾도록 도커가 구성된다. 당신은 심지어 당신만의 개인 레지스트리도 실행할 수 있다.

사용 시 docker pull 또는 docker run 명령, 구성된 레지스트리에서 필요한 이미지를 가져오십시오. 사용 시 docker push 명령, 이미지가 구성된 레지스트리에 푸시됨.

Docker objects

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

이미지들

이미지는 도커 컨테이너를 만드는 지시사항이 있는 읽기 전용 템플릿이다. 종종 이미지는 다른 이미지를 기반으로 하며, 약간의 추가 사용자 정의(수정)가 있다. 예를 들어, 당신은 ubuntu에 기반을 둔 이미지를 만들 수 있다. 하지만 아파치 웹서버, 어플리케이션을 설치한다. 너의 어플리케이션을 작동하게 할 세부 환경뿐만 아니라.

자신만의 이미지를 만들거나 다른 사용자가 만든 이미지만 사용하여 레지스트리에 게시할 수 있다. 이미지를 직접 작성하려면 이미지를 만들고 실행하는 데 필요한 단계를 정의하기 위한 간단한 구문을 사용하여 도커 파일을 작성하십시오. 도커 파일의 각 지시사항은 이미지에 레이어를 만든다. 도커 파일을 변경하고 이미지를 재구성하면 변경된 계층만 다시 작성된다. 이는 다른 가상화 기술에 비해 이미지를 경량화, 소형화, 고속화시키는 일부다.

컨테이너

컨테이너는 이미지의 실행 가능한 인스턴스다. 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. Docker는 최종 계층으로 컨테이너에 read-write file system을 할당한다. 이는 작동중인 컨테이너가 로컬 파일시스템의 명령어를 만들거나 수정하도록 한다.

  4. 사용자가 네트워킹 옵션을 지정하지 않았으므로 도커는 컨테이너를 기본 네트워크에 연결하기 위한 네트워크 인터페이스를 생성한다. 여기에는 컨테이너에 IP 주소를 할당하는 것도 포함된다. 기본적으로 컨테이너는 호스트 시스템의 네트워크 연결을 사용하여 외부 네트워크에 연결할 수 있다.

  5. 도커가 컨테이너를 시작하고 /bin/bash를 실행한다. 컨테이너가 인터랙티브(-i flag)하게 실행되고, 터미널에 부착되어 있기 때문에(-t flag) 출력이 터미널에 기록되는 동안 키보드를 사용하여 입력을 제공할 수 있다.

  6. exit 를 입력할 때 /bin/bash 명령어를 종료한다, 컨테이너는 중지되지만 제거되지는 않는다. 다시 시작하거나 제거할 수 있다.

기본 기술

Docker는 Go 프로그래밍 언어로 작성되며 Linux 커널의 여러 기능을 활용하여 그 기능을 제공한다. Docker는 namespace라는 기술을 사용한다. 컨테이너라는 독립된 작업 공간을 제공하기 위해. 컨테이너를 실행할 때, 도커는 해당 컨테이너에 대한 네임스페이스 집합을 만든다.

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

profile
코딩하는 신방과생

0개의 댓글