aspe

도커란? Docker? 본문

카테고리 없음

도커란? Docker?

aspe 2023. 2. 14. 02:11

Docker

도커는 어플리케이션을 개발, 실행하는 오픈 플랫폼 입니다. 도커는 인프라로부터 어플리케이션을 분리시켜 소프트웨어를 빠르게 전달할 수 있습니다. 도커를 사용하면 어플리케이션을 관리하는 것 처럼 인프라를 관리할 수 있습니다. 도커를 이용하여 코드를 신속하게 전송, 테스트 및 배포함으로써 프로덕션에서의 구동과 코드 작성의 딜레이를 감소시킬 수 있습니다.

Docker platform

도커는 컨테이너라는 독립된 환경에서 패키지를 실행할 수 있게 해줍니다. 이러한 고립과 보안은 주어진 호스트에서 여러개의 컨테이너를 동시에 작동할 수 있게 해줍니다. 컨테이너는 가볍고 어플리케이션을 작동하기 위해 필요한 모든 것을 가지고 있습니다. 그렇기에 현재 호스트에 어떤 환경이 설치되어 있는 지 신경쓰지 않아도 됩니다. 컨테이너의 공유는 간단합니다. 그리고 작업하는 모든 사람이 같은 방식으로 동작하는 컨테이너를 가지고 있는지 확인하세요.

 

도커는 컨테이너의 생명주기를 관리하는 툴과 플랫폼을 제공합니다.

  • 컨테이너로 어플리케이션과 어플리케이션과 관련된 컴포넌트를 개발하세요.
  • 컨테이너는 앱의 배포와 테스트의 단위입니다.
  • 준비가 완료되었다면 프로덕션 환경에 어플리케이션을 컨테이너 또는 오케스트레이션된 서비스로 배포하세요. 이것은 프로덕션 환경이 로컬 데이터 센터이든, 클라우드 제공자이든, 두 가지가 혼합된 환경이든 동일하게 작동합니다.

Docker로 무엇을 할 수 있나요?

빠르고 일관된 어플리케이션 제공이 가능합니다.

Docker는 개발자가 응용프로그램 및 서비스를 제공하는 로컬 컨테이너를 사용하여 표준화된 환경에서 작업할 수 있도록 함으로써 개발 생명주기를 간소화합니다. 컨테이너는 연속 통합 및 연속 전달(CI/CD) 워크플로우에 매우 적합합니다.

 

다음과 같은 시나리오에 적합합니다:

  • 개발자가 로컬에서 코드를 작성하고 도커 컨테이너를 사용하여 동료들과 작업을 공유합니다.
  • 테스트 환경에 어플리케이션을 푸쉬할 때 도커를 사용하고 자동화된 매뉴얼 테스트를 진행합니다.
  • 개발자가 버그를 찾으면, 개발 환경에서 수정하고 테스트와 검증을 위해 테스트 환경으로 재배포가 가능합니다.
  • 테스트가 끝나고 고객에게 수정 사항을 제공하려면 업데이트된 이미지를 프로덕션 환경으로 푸시하면 됩니다.

반응형 배포와 스케일링

도커의 컨테이너 기반 플랫폼은 이식성이 좋은 워크로드를 제공합니다. 도커 컨테이너는 데이터 센터의 물리, 가상 머신 또는 클라우드나 이 둘이 혼합된 환경과 같은 개발자 로컬 랩탑에서 실행이 가능합니다.

 

도커의 이식성과 가벼움 덕분에 워크로드를 동적으로 관리하고 비즈니스 요구사항에 따라 애플리케이션과 서비스를 거의 실시간으로 확장하거나 중단할 수 있습니다.

 

동일한 하드웨어에 더 많은 워크로드 구동

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

Docker architecture

도커는 클라이언트-서버 아키텍처를 사용합니다. 도커 클라이언트는 도커 컨테이너를 구축, 실행 및 배포하는 도커 데몬과 통신합니다. 도커 클라이언트와 데몬은 동일한 시스템에서 구동이 가능하며 도커 클라이언트와 도커 데몬을 원격으로 연결하는 것도 가능합니다. 도커 클라이언트와 데몬은 UNIX 소켓 또는 네트워크 인터페이스를 통해 REST API를 사용하여 통신합니다. 컨테이너의 셋으로 구성된 애플리케이션과 작업이 가능하게 해주는 도커 컴포즈도 도커 클라이언트 입니다.

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

도커 데몬

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

 

도커 클라이언트

도커 클라이언트(docker)는 도커 사용자들이 도커와 상호작용하는 주된 수단입니다. docker run 같은 커맨드를 사용할 때, 클라이언트는 이 커맨드를 실행하는 dockerd로 전송합니다. docker 커맨드는 도커 API를 사용합니다. 도커 클라이언트는 하나 이상의 데몬과 통신합니다.

 

도커 데스크탑

도커 데스크탑은 맥, 윈도우 또는 리눅스 환경에서 쉽게 설치 가능한 어플리케이션으로 컨테이너화된 어플리케이션과 마이크로 서비스의 빌드, 공유를 도와줍니다. 도커 데스크탑은 도커 데몬(dockerd), 도커 클라이언트(docker), 도커 컴포즈, Docker Content Trust, 쿠버네티스와 Credential Helper를 제공합니다.

 

도커 레지스트리

도커 레지스트리는 도커 이미지를 저장합니다. 도커 허브는 누구나 사용 가능한 공개 레지스트리이고 도커는 기본적으로 이미지를 도커 허브에서 찾습니다. 프라이빗 레지스트리 운영도 가능합니다.

 

docker pull 또는 docker run 커맨드를 사용할 때, 필요한 이미지는 설정된 레지스트리에서 가져옵니다. docker push 커맨드를 사용할 때, 해당 이미지는 설정된 레지스트리로 푸쉬됩니다.

도커 객체

도커를 사용하면 이미지, 컨테이너, 네트워크, 볼륨, 플로그인 그리고 다른 객체들을 생성합니다. 이 섹션에서는 객체들에 대해 가볍게 살펴봅시다.

 

이미지

이미지는 도커 컨테이너를 생성하는 명령어를 가지는 읽기 전용 템플릿입니다. 때때로 이미지는 다른 사용자 지정 설정을 포함하며 다른 이미지를 기반으로 합니다. 예를 들어, ubuntu 이미지를 기반으로 하는 이미지를 빌드하지만 Apache 웹 서버와 응용 프로그램을 설치하고, 응용 프로그램을 실행하는 데 필요한 구성 세부 정보를 설치할 수 있습니다.

 

사용자 지정 이미지를 생성하거나 다른 개발자들이 레지스트리에 퍼블리쉬한 이미지를 사용할 수 있습니다. 커스텀 이미지를 만들고 싶다면, 이미지를 생성하고 실행하는 데 필요한 단계를 정의하는 문법을 사용하여 Dockerfile을 작성하세요. Dockerfile의 각 명령어는 이미지에 레이어를 생성합니다. Dockerfile을 수정하고 이미지를 리빌드하면, 수정된 레이어만 리빌드됩니다. 이런 특징이 가상화 기술에 비해 이미지가 가볍고 빠른 이유입니다.

 

컨테이너

컨테이너는 실행가능한 이미지의 인스턴스입니다. 도커 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 플래그로 터미널에 연결되므로 출력이 터미널에 기록되는 동안 키보드를 사용하여 입력을 제공할 수 있습니다.
  6. /bin/bash 커맨드를 끝내기 위해 exit을 타이핑하면, 컨테이너는 중단되지만 삭제되지 않습니다. 이 컨테이너를 재실행하거나 제거할 수 있습니다.

기반이 되는 기술

도커는 Go 언어로 작성되었고 리눅스 커널의 다양한 기능을 사용하여 구현되었습니다. 도커는 고립된 워크스페이스(컨테이너)를 만들기 위해 namespaces라는 기술을 사용합니다. 컨테이너를 실행하면, 도커는 해당 컨테이너의 namespaces 셋을 생성합니다.

 

이러한 namespaces들은 고립 계층을 제공합니다. 컨테이너의 각 부분들은 별도의 namespaces에서 실행되며 액세스는 해당 namespaces로 제한됩니다.

Comments