도커, Docker

송철진·2023년 4월 28일
0

1. 정의

컨테이너 가상화 기술을 기반으로 하는 오픈소스 플랫폼.

컨테이너 가상화 기술은 Docker 이전에 이미 개발되어 존재하던 기술이다!

  • 최초의 컨테이너 기술: LXC(Linux Container)
  • Docker = LXC + (여러 중요한 기술들) : 효율성, 유연성.

장점

  • 컨테이너 가상화 환경 위에 애플리케이션 배포 엔진을 더하여 사용자의 코드를 어디서든 빠르고 가볍게 실행시킬 수 있다.
  • 한 컨테이너당 하나의 애플리케이션이나 프로세스를 실행 권장
  • MSA(Micro Service Architecture), CI/CD와 연계.

2. 구조

Client-Server Architecture
: 클라이언트가 명령어를 서버에 전달하고 서버가 전달받은 명령어를 실행

2-1. 클라이언트(Client)

사용자가 Docker 오브젝트를 관리하기 위해 사용하는 수단. CLI 제공.

  1. CLI 입력: docker run
  2. dockerd 프로세스로 전달.
    *명령어는 Docker API를 이용해 하나 이상의 dockerd와 상호작용함

2-2. 호스트(Host)

Docker 오브젝트를 관리하는 주체

  1. dockerd라는 프로세스가 클라이언트로부터 전달받은 명령어 실행.
    다양한 Docker 오브젝트 관리
  • Docker 오브젝트: 이미지, 컨테이너, 볼륨

2-3. 저장소(Registry) - DockerHub

DockerHub

  • GitHub에 소스 코드를 저장하여 관리하는 것처럼 이미지를 저장하여 관리할 수 있는 저장소.
  • Public, Private이 있음

3. Docker Objects

3-1. 이미지(Image)

컨테이너를 생성하기 위해 필요한 템플릿.

Docker 공식 이미지 또는 다른 개발자들이 만들어 놓은 이미지에 필요한 것들을 추가하여 본인만의 커스텀 이미지를 만들 수 있다.

3-2. 컨테이너(Container)

이미지의 실행 가능한 인스턴스.

이미지를 실행시켜 컨테이너라는 가상화 공간을 만든다.
Docker가 설치되었다면 어디서든지 저장소로부터 이미지를 가져와 컨테이너를 실행시킬 수 있다.

그외 특징들

Logs

  • 컨테이너는 stdout, stderr, stdin 을 통해서 생성되는 서비스 상태 로그를 전부 수집하여 분석 혹은 trouble-shooting을 가능하게 해준다.

Resource Isolation and Grouping

  • 리눅스 커널의 Cgroups 기능을 통해 각각의 컨테이너마다 독립적인 CPU와 메모리가 할당될 수 있다.

독립적

  • 컨테이너는 독립된 파일 시스템이다.
  • 호스트와 완전히 분리된 프로세스 환경.
    👉 독립적인 가상 네트워크 인터페이스와 IP 주소를 갖는다.
profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글