<TIL> 82. Docker 도커

YUJIN LEE·2023년 4월 4일
0

개발log

목록 보기
76/149

도커는 애플리케이션 뿐만 아니라 실행에 필요한 시스템 환경을 모아 컨테이너로 관리
이렇게 만든 것을 도커 이미지라고 함.
이 이미지로 만든 컨테이너는 도커가 설치된 곳이라면 어디든 똑같이 동작.

이를 이용시, 개발자가 커밋할 때마다 Jenkins와 같은 지속적인 통합(CI)툴에서 해당 소스를 도커 이미지로 빌드 -> 이미지 repository에서 이미지를 버전별로 관리 가능.

해당 이미지를 어느 환경이든 배포하기만 하면 독립적으로 동작해 지속적인 딜리버리(CD) 가능

도커는 분산환경을 쉽게 구축할 수 있는 클라우드 서비스와 잘 맞음.
주요 클라우드 프로바이더들은 모두 컨테이너 실행환경을 쉽게 관리할 수 있는 서비스 제공.

  • Amazon Elastic Container Service
  • Microsoft Azure Container Instances
  • Google Cloud Platform Kubernates Engine

각 서비스를 독립적인 배포 단위로 구성하는 마이크로서비스 아키텍처
Microservices Architecture, MSA)와도 잘맞음.
각 서비스를 컨테이너로 배포.

도커의 기능

Build - 이미지 만들기

도커는 애플리케이션과 실행에 필요한 라이브러리, 미들웨어, OS, 네트워크 설정 등 필요한 모든 파일을 모아서 도커 이미지로 만듬.
도커 이미지는 명령어를 이용해 수동으로 만들 수도 있지만 자동으로 빌드와 배포를 하는 CI/CD 환경에서는 도커 설정 파일을 이용해 자동으로 생성

보통의 이미지에는 하나의 애플리케이션만 넣고 여러 컨테이너를 조합해 서비스를 구축하는 방법 사용.
또한 이미지를 여러 개 같이 사용 가능.

Ship - 이미지 공유

도커 이미지를 업로드해서 공유하는 저장소를 도커 Registry라고 함.
대표적으로 도커의 공식 레지스트리인 Docker Hub가 있다.
도커 허브에서는 업체에서 제공하는 공식 이미지를 받을 수 있다.
OS 이미지, 미들웨어, 플랫폼 이미지도 제공.
이런 베이스 이미지를 활용하면 환경을 빠르고 안전하게, 자동 구축 가능.
내가 만든 애플리케이션 또한 이미지로 만들어 업로드하고 공유 가능.
Github와 같은 형상관리툴과 연동해 Dockerfile을 관리하고 도커 이미지를 자동으로 빌드해 도커 허브로 배포 가능

퍼블릭 클라우드에서는 비공개 레지스트리와 CI/CD 를 쉽게 구성할 수 있는 아키텍처 제공.
Amazon Elastic Container Registry 나 Google Cloude Platform의 Container Registry가 있음.
GCP 컨테이너 레지스트리는 보안을 강화하기 위해 컨테이너 이미지가 등록되면 취약점 스캔, 정책에 위배되는 이미지는 배포를 막고 잠금처리.

Run - 컨테이너 동작

도커는 도커 이미지를 가지고 컨테이너를 생성해서 동작.
하나의 이미지를 가지고 여러 개의 컨테이너를 만들어낼 수 있음.
도커는 컨테이너를 생성하고 관리하기 위한 여러 명령 제공.
여러 호스트로 된 분산환경인 경우가 많은데 이런 분산 환경에서 여러 노드의 컨테이너를 관리하기 위해 쿠버네티스(Kubernetes, k8s)와 같은 컨테이너 오케스트레이션 툴(Container Orchestration Tool)을 주로 사용.
오케스트레이션이란 컨테이너 배포, 장애 복구, 로드 밸런싱 등 여러 기능을 자동으로 처리해주는 것을 말함.

도커 구성 컴포넌트

  • Docker Engine: 도커 이미지를 생성하고 컨테이너를 실행하는 핵심 기능.
  • Docker Registry: 도커 이미지 공개 및 공유. 도커 허브도 도커 레지스트리를 사용
  • Docker Compose: 여러 컨테이너를 관리하기 위한 툴
  • Docker Machine: 로컬의 VirtualBox나 퍼블릭 클라우드에 도커 실행 환경을 구축하는 툴
  • Docker Swarm: 여러 도커 호스트를 마스터(Master)와 노드(Node) 구조로 클러스터화하는 툴. 쿠버네티스와 비슷한 기능.

도커를 이루는 기술

도커는 리눅스 커널 기술을 기반으로 컨테이너를 구성.

namespace

리눅스 오브젝트에 이름표를 붙여 같은 이름표가 붙여진 것들만 묶어 관리.

cgroups

프로세스와 쓰레드를 그룹화해서 관리하는 기술.
호스트 OS의 자원을 그룹별로 할당하거나 제한을 둘 수 있다.
즉, 컨테이너에서 사용하는 리소스를 제한함으로써 하나의 컨테이너가 자원을 모두 사용해 다른 컨테이너가 영향을 받지 않도록 할 수 있다.

출처

profile
인정받는 개발자가 되고싶습니다.

0개의 댓글