본문 바로가기
기타개발

Docker 개념

by 궝테스트 2020. 3. 23.

0. 가상화 머신

  • OS 전체 가상화
    • 호스트 OS 위에 게스트 OS 전체를 가상화
    • 여러가지 OS 를 운영할 수 있지만 이미지 안에 OS 가 포함되어 용량이 크고 속도가 느리다
    • ex) VMware, VirtualBox
  • OS 반 가상화
    • OS 전체 가상화보다는 성능이 향상되었지만 추가적인 OS 설치는 여전히 필요
    • ex) AWS 같은 클라우드 서비스 기술에 사용됨
  • 프로세스 격리 방식
    • Linux 커널 레벨에서 제공하는 격리된 가상 공간을 사용한다
    • 게스트는 OS 를 설치하지 않기 때문에 호스트와 속도 차이가 거의 없다
    • Linux container : Linux에서 프로세스를 격리하고 CPU, 메모리는 필요한 만큼만 추가로 사용하여 성능 손실 거의 없음
    • 여러개의 컨테이너를 독립적으로 실행 및 여러개의 프로세스를 백그라운드로 실행 가능

 

 

 

1. Docker

- 2013년에 출시한 Linux container 기반의 가상화 플랫폼으로 오픈소스 Docker Engine 으로 시작되었다

- libcontainer 를 개발했으며 2015년 runc 활용

- DevOps (개발자와 운영자) 을 위하여 어플리케이션 종속성을 인프라와 분리했다

- Host 와 OS 자원을 공유하여 이미지 용량이 크게 줄었다

- Git 과 같이 이미지 버전 관리도 제공하고 배포 및 공유가 가능하다

- 주요한 개념으로는 Container 와 Container Image 가 있다

 

Docker & Virtual Machine

2. Container

  • 앱 레이어에서의 코드와 모든 종속성을 함께 패키징한 표준 소프트웨어 단위로 read-write 이다
  • 여러 컨테이너가 동일한 머신에서 실행될 수 있고 OS 커널을 다른 컨테이너와 공유할 수 있으며, 각 컨테이너는 사용자의 공간에서 격리된 프로세스로 실행된다
  • 컨테이너는 VM 보다 공간을 덜 차지하며 더 많은 응용프로그램을 처리할 수 있으며 더 적은 VM 과 운영체제가 필요하다

3. Image

  • 응용 프로그램을 실행하는데 필요한 모든 것(코드, 런타임, 시스템 도구 및 라이브러리, 설정 등) 을 포함하는 경량의 독립형 소프트웨어 패키지로 read-only 이다
  • 런타임 시 이미지는 Container 가 되며 변경되는 값은 컨테이너에 저장된다
  • Image 를 여러번 실행하면 같은 이미지로 여러개의 컨테이너를 생성할 수 있으며,
    컨테이너의 상태가 바뀌어도 해당 이미지는 변하지 않는다 (그래서 이미지는 상태를 가질 수 없다)
  • Container 를 재사용 하려면 docker commit 을 통해 이미지로 만들 수 있다
  • Image 에는 컨테이너를 실행하기 위한 모든 정보를 담고있기 때문에 추가적인 설치가 필요없으며,
    해당 이미지를 repository 에 올리고 Docker 를 사용할 수 있는 환경에서 이미지를 받아서 실행시킨 뒤 사용할 수 있다

4. Docker Hub

  • 컨테이너 커뮤니티 개발자, 오픈 소스 프로젝트, ISV(Independent Software Vendor) 등이 컨테이너에 코드를 작성하여 배포하는 등 다양한 콘텐츠 소스가 포함된 Container image 저장소이다
  • 유지보수가 필요없는 바로 사용을 원할 경우 docker hub 에서 다운받아 사용하면 된다
  • Ubuntu, CentOS 등 리눅스 OS 이미지와 MySQL, Redis, Wordpress 의 공식 이미지를 제공하고 있다
    이미지 이름은 "네임스페이스/이미지네임" 로 구성되는데, 공식 이미지는 네임스페이스와 슬래시(/) 가 없다

# 참고

'기타개발' 카테고리의 다른 글

Coroutines - Channels  (0) 2020.07.30
RxJava - What's different in 3.0  (0) 2020.06.23

댓글