Docker

안정현·2021년 6월 6일
0

1. Docker란 무엇인가?

  • Docker(도커) : 컨테이너 가상화 시스템
  • 가상화 컨테이너에 application 배포를 자동화 시켜주는 오픈소스 엔진

  • container 가상화 실행 환경 위에 application 배포 엔진을 더함으로써 사용자의 코드를 어디서든 빠르고 가볍게 실행시킬수 있는 기술을 제공

  • docker는 한 컨데이너 당 하나의 application이나 프로세스를 실행하는 것을 권함


2. Docker 구조

  • Docker는 크게 4가지 부분으로 되어 있음
    (1) Docker client 와 server (server는 docker engine으로 불리기도 함)
    (2) Docker 이미지
    (3) Docker registries
    (4) Docker containers

(1) Docker client 와 server

  • Docker는 클라이언트와 서버 구조로 이루어져 있음

  • 클라이언트가 서버에 명령을 전달하고 서버가 실행시키는 구조

  • docker binary 명령어 가 docker 클라이언트이고, dockerd 가 docker daemon 혹은 docker engine 임

    • Docker engine과 interact하기 위한 Restful API도 제공됨
  • 클라이언트와 서버는 동일한 호스트 안에서 운영 될수도 있으며, 서로 다른 호스트에서 운영 될수도 있음


(2) Docker 이미지

  • Docker의 life cycle에서 docker 이미지는 build 의 부분에 해당

  • Docker container에서 실행시키고 싶은 application을 docker 이미지로 빌드해서 실행시키게 됨


(3) Docker registries

  • Docker registires는 docker 이미지를 저장하는 repository라고 보면 됨

  • Source code를 Github에 저장하여 관리하듯 docker 이미지Dockerhub 같은 docker registries에 저장한다고 생각하면 됨

  • Github과 마찬가지로 public registry 가 있고 private registry가 있음


(4) Docker containers

  • Docker container 에서 docker 이미지가 실행됨

    • 즉 docker 이미지를 실행시키는 가상화 공간임
  • Docker container는 하나 혹은 그 이상의 프로세스를 실행 시킬수 있음

    • 하지만 하나의 프로세스만 실행시키는 것을 권장

3. 기타 Docker의 특징

  • Docker는 modern한 리눅스 커널이 설치되어 있는 x64 호스트에서는 다 실행 가능

    • 하지만 커널 버젼 3.10 이상에서 실행되는 것이 overhead (오버헤드. 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등)가 적기 때문에 권장됨
  • 최근에는 docker를 Windows 나 Mac에서도 사용 가능

    • 하지만 Windows 및 Mac에서 docker를 직접 실행시키면 내부적으로 가상머신이 실행되어 그 안에서 docker가 실행되기 때문에 개발용 및 테스트 용으로는 괜찮지만 production 용도로는 적합하지 않음
  • Docker 컨테이너는 독립된 root 파일 시스템이기도 하므로 파일 시스템 분리 가 이루어져 있음

  • 또한 docker 컨테이너는 호스트와 분리된 프로세스 환경 을 가지고 있으므로 독립적인 프로세스를 실행할수 있음

  • 네트워크 또한 분리 되어 있어 독립적인 가상 네트워크 인터페이스 와 IP 주소 를 가질 수 있음

  • Resource isolation and grouping

    • 커널의 cgroups(control groups) 기능을 통해서 docker container 마다 독립적인 CPU와 메모리가 할당 될 수 있음
  • Docker 파일 시스템은 copy-on-write 을 사용하여 효율적이며 빠른 디스크 I/O를 실행

  • Docker 컨테이너에서 STDOUT, STDERR, STDIN 을 통해서 생성되는 로그들은 전부 수집되어 분석하거나 trouble-shooting 을 가능하게 해줌

    • 뿐만 아니라, 실행되고 있는 docker container의 shell에 접속하여 interact 할 수도 있음

<출처> wecode(코딩 부트캠프) 세션

0개의 댓글