[Docker] 1. Docker 개념

Dana·2021년 7월 23일
0

Docker

목록 보기
1/2

Immutable Infrastructure

  • 호스트 OS와 서비스 운영 환경을 분리하고, 한번 설정한 운영 환경은 변경하지 않은다는 개념
  • 서비스 운영 환경을 이미지로 생성한 뒤 서버에 배포하여 실행
  • Docker는 Immutable Infrastructure를 구현한 프로젝트

가상 머신

  • 가상 머신 자체는 완전한 컴퓨터라 항상 게스트 OS를 설치해야 한다
  • 이미지 안에 OS가 포함되기 때문에 이미지 용량이 커진다

Docker

  • 게스트 OS를 설치하지 않는다
  • Docker 이미지에 서버 운영을 위한 프로그램과 라이브러리만 격리해서 설치할 수 있고, OS 자원은 호스트와 공유한다
  • 이미지 용량이 크게 줄어든다
  • 하드웨어를 가상화하는 계층이 없기 때문에 메모리접근, 파일시스템, 네트워크 속도가 가상 머신에 비해 빠르다
  • 이미지 생성과 배포에 특화된 기능을 제공한다

chroot 명령

  • 리눅스/유닉스 환경의 파일시스템에서 루트 디렉터리(/)를 변경하는 명령
  • 특정 디렉터리를 루트 디렉터리로 설정하면 chroot jail이라는 환경이 생성되며, chroot jail 안에서는 바깥의 파일과 디렉터리에 접근할 수 없다
  • 디렉터리 경로를 격리하기 때문에 서버 정보 유출과 피해를 최소화 하는데 주로 사용
  • chroot jail에 들어갈 실행 파일과 공유 라이브러리를 직접 준비해야 하고 설정 방법이 복잡하다
  • 완벽한 가상 환경이 아니기 때문에 각종 제약이 많다

LXC(LinuX Container)

  • 컴퓨터를 통째로 가상화하여 OS를 실행하는 것이 아닌 리눅스 커널 레벨에서 제공하는 일종의 격리된 가상 공간
  • OS가 설치되지 않기 때문에 가상 머신이 아닌 컨테이너라 부른다
  • 리눅스 커널의 cgroups와 namespaces 기능을 활용하여 가상 공간을 제공한다
    - Control Groups(cgroups)는 CPU, 메모리, 디스크, 네트워크 자원을 할당하여 완전한 형태의 가상공간을 제공하며 프로세스 트리, 사용자 계정, 파일시스템, IPC 등을 격리시켜 호스트와 별개의 공간을 만든다. 이것을 Namespace isolation(namespaces)라고 한다.
  • 격리된 공간만 제공할 뿐 개발 및 서버 운영에 필요한 부가 기능이 부족했다

Docker 이미지와 컨테이너

  • 베이스 이미지: 리눅스 배포판의 유저랜드만 설치된 파일
    - 유저랜드: OS의 유저공간에서 실행되는 실행 파일과 라이브러리, 부팅에 필요한 최소 실행파일과 라이브러리 조합
  • Docker 이미지: 베이스 이미지에 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 파일 하나로 만든 것
  • 베이스 이미지에서 바뀐 부분만 이미지로 생성하고, 실행할 때는 베이스 이미지와 바뀐 부분을 합쳐서 실행한다
  • Docker는 이미지를 통째로 생성하지 않고 바뀐 부분만 생성한 뒤 부모 이미지를 계속 참조하는 방식으로 동작하며, 이를 레이어라고 한다.
  • Docker 이미지는 파일이기 때문에 저장소에 올린 뒤 다른 곳에서 받을 수 있다. 이 때는 자식 이미지와 부모 이미지를 함께 올린다.
  • Docker 컨테이너는 이미지를 실행한 상태이다. 이미지로 여러 개의 컨테이너를 만들 수 있다.
  • 이미 실행된 컨테이너에서 변경된 부분을 이미지로 생성할 수도 있다.
  • Docker는 특정 실행 파일 또는 스크립트를 위한 실행 환경이다.

0개의 댓글