[DevOps] Docker 원리와 이해

도커, 리눅스 컨테이너, 도커 컨테이너, 이미지

Posted by iheese on July 03, 2023 · 3 mins read

Docker 원리와 이해

Docker

  • 컨테이너 기반의 오픈 소스 가상화 플랫폼

컨테이너

  • 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포와 관리를 단순하게 해준다.
  • 이미지를 실행한 상태, 동적인 값이 컨테이너에 저장된다
  • 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다.

기존의 가상화, 가상머신

  • 컨테이너는 가상화 기술을 사용하고 기존의 방식과는 차이 있다.
  • 기존에는 호스트 OS(Operating System) 위의 게스트 OS 전체를 가상화하였다.
  • 전체 게스트 OS를 가상화하기 때문에 사용하는 컴퓨터의 리소스가 분할 사용되어 성능 이슈와 무겁다는 단점이 있었다,
  • EX) VMware나 VirtualBox 같은 가상머신


스크린샷 2023-07-03 오전 9 20 45

도커 엔진(Docker Engine)

  • 도커 엔진은 Docker Components와 서비스를 제공하는 컨테이너를 구축하고 실행하는 기본 핵심 소프트웨어입니다.

리눅스 컨테이너

  • 리눅스에서 운영체제 커널을 제외한 프로세스를 격리하여 사용하는 방식을 의미한다.
    • 운영체제 커널 : 운영체제의 핵심 부분, 하드웨어와 응용프로그램 사이에서 인터페이스를 제공, 자원을 관리하는 역할
  • 프로세스를 격리시키기 때문에 가볍고 빠르다
  • CPU, 메모리도 필요한 만큼 사용할 수 있어 성능적으로 거의 손실이 없다.

도커 컨테이너

  • 위의 리눅스 컨테이너를 쉽게 사용할 수 있게 기능을 좀 더 추가한 것이 도커 컨테이너이다.
  • 도커 컨테이너도 호스트 OS 위에서 동작하는 프로세스입니다.


도커 이미지

  • 컨테이너 실행에 필요한 파일과 설정값을 가지고 있는 것입니다.
  • 상태값을 가지지 않고 불변합니다.
  • 유니언 마운트를 이용해 레이어를 겹겹이 쌓아 올리는 방식으로 만들어 진다.
    • 유니언 마운트 : 하나의 디렉토리 지점에 여러 개의 디렉터리를 겹겹이 추가하는 것
  • 이미지를 실행시켜 컨테이너를 생성할 때도 읽기/쓰기 레이어를 추가하여 실행한다.
    • 가상화 특성상 이미지 용량이 크고 여러 대에 배포하는 것을 감안하면 단순하지만 영리한 설계 구조이다.

도커 이미지 경로

스크린샷 2023-07-03 오전 10 40 31

  • 이미지는 url 방식으로 관리되고 태그를 붙일 수 있다.
  • EX) ubuntu 14.04 이미지 : docker.io/library/ubuntu:14.04 or docker.io/library/ubuntu:trusty
    • docker.io/library은 생략 가능, ubuntu:14.04 로 사용가능


도커 이미지와 컨테이너

  • 이미지는 프로그램(정적인 코드 덩어리 같은 느낌), 컨테이너는 이미지를 실행시킨 프로세스이다..
  • 컨테이너로 무엇을 하든 이미지에는 변화가 없고 서로 독립적인 존재이다..
  • 컨테이너에 새로운 파일을 더해 새로운 이미지로 만들 수 있다.
  • 컨테이너는 레이어 구조로 되어있고 추가 변경사항들은 최상단 레이어에 쓰여진다.
  • 컨테이너가 삭제되면 모두 사라지게 된다.


도커 허브


추가 공부할 사항

  • 쿠버네티스 : 여러 개의 컨테이너를 서비스 단위로 관리하고 실행하는 툴


Reference: