2 분 소요

도커 컨테이너 (Docker Container) : 도커에서 제공하는 컨테이너 기술

해당 부분에서 이어지는 내용입니다. 이전 내용에서는 가상화의 한 종류인 컨테이너 기술에 대해 서술하였다면, 이번에는 도커를 중심으로 하여 컨테이너에 대해 다뤄보겠습니다.

도커 컨테이너는 도커가 관리하는 독립적인 가상 리소스를 가진다.

  • 컨테이너 안에는 어플리케이션과 그 어플리케이션의 실행 환경 (호스트명, IP 주소, 디스크 드라이브 등)이 들어있음
    • 각 컨테이너는 독립적인 환경을 가지되, 실행되는 컴퓨터의 CPU, 메모리, 운영체제를 공유함
      • 격리 (isolation)와 밀집 (density)의 조건을 동시에 충족
      • 빌드 - 공유 - 실행의 workflow으로 소프트웨어 배포를 단순화하기에 적합

  1. 컨테이너 내부 어플리케이션이 실행중이여야 컨테이너의 상태도 실행 중이 된다.
    • 컨테이너가 Existed인 상태에서는 CPU 자원이나 메모리를 사용하지 않는다.
  2. 컨테이너가 종료되어도, 컨테이너는 사라지지 않고 그대로 남아있다.
    • 나중에 다시 컨테이너를 실행하거나, 내부 파일이나 로그를 확인해볼 수 있다.
    • 컨테이너를 백그라운드에서 계속 동작하도록 하려면, -d (--detach)
  3. 컨테이너는 기본적으로 외부 환경에 노출되지 않는다.
    • 도커는 호스트 컴퓨터의 네트워크 계층에 끼어들어 네트워크 트래픽 중 필요한 것을 컨테이너에 전달
    • 컨테이너의 포트를 호스트 컴퓨터에 공개하려면, --publish
      • 도커가 호스트 컴퓨터를 주시하다가 해당 포트로 들어오는 트래픽을 컨테이너에 전달

도커 컨테이너 또한 별도의 환경 변수 (Environment variable)를 가질 수 있다.

  • 호스트 운영체제의 것을 가져오는 것이 아닌, IP 주소나 호스트 이름처럼 도커로부터 부여받음

도커 이미지 (Docker Image) : 컨테이너의 실행에 필요한 모든 파일과 설정값 정보를 포함

  • 상태값을 가지지 않음 (변하지 않는 값들을 저장) ↔ 컨테이너 : 이미지가 실행된 살태 (변하는 값들을 저장)
  • 이미지 레이어 : 도커 이미지는 여러 Read-Only 레이어로 구성되고, 파일 추가 및 생성 시 새로운 레이어 생성
    • 이미지 레이어는 도커 엔진의 캐시에 물리적으로 저장된 파일로, 여러 이미지와 컨테이너에서 공유함
    • 유니온 파일 시스템 (Union File Systems)읕 통해 여러 개의 레이어를 하나의 파일 시스템으로 활용
  • docker image ls에서 도커 이미지의 SIZE는 논리적 용량이지 실제로 차지하는 디스크 용량이 아니다!

  • docker system df를 통해 이미지 전체 용량의 총합을 볼 수 있다.

  • 컨테이너 레이어 : 컨테이너가 실행되면 이미지 레이어 위에 읽기-쓰기 (Read-Write) 레이어를 추가
    • 컨테이너를 실행하면서 생성되거나 변경된 내용을 저장
  • 이미지 경로 : URL 방식으로 관리 -> 뒤에 태그 (/tag)를 붙임

Q. 도커 이미지를 쓰는 이유? : 도커 이미지와 도커 컨테이너들을 클래스나 인스턴스처럼 활용한다.

  • 도커는 해시 값 (= 컨테이너 ID)과 임의의 이름 (= 컨테이너 이름)를 통해 컨테이너를 구분하고 이들을 환경변수로 관리
운영자가 지금까지 운영한 서버를 도커 이미지로 배포하고 도커 컨테이너에 설치한다면,
  • 도커 파일 : 지금까지 서버를 운영한 기록
  • 도커 이미지 (도커 파일 + 실행 시점) : 지금부터 설치된 서버가 가질 초기값
  • 도커 컨테이너 (도커 파일 + 환경 변수) : 지금부터 설치된 서버가 운영될 장소
  • 도커 안에서는 서버 역시 하나의 소프트웨어처럼 사용할 수 있고, 생성할 수 있는 컨테이너의 개수에도 제한이 없다.

도커 레지스트리 (Docker Registry) : 도커 이미지를 저장하고 관리하는 중앙 저장소

  • 도커 플랫폼은 소프트웨어 배포 기능을 자체적으로 내장하고 있음
    • 로컬에 이미지가 없더라도 도커가 서버에서 자동으로 이미지를 내려받음

도커 허브 (Docker Hub) : 도커 엔진에 기본으로 설정된 도커 레지스트리

  • 도커 허브 계정을 생성한 후, 터미널을 통해 도커 허브에 접속
docker login --username pocj8ur4in
Password: *****
Login Succeeded
  • 도커 이미지의 다운로드를 위한 이미지 참조 (Image Reference)는 네 개의 요소로 구성
    1. 이미지가 저장된 레지스트리 도메인 (기본값은 도커 허브)
    2. 이미지 작성자 계정 ID
    3. 이미지 레포지토리 ID
    4. 이미지 태그 (기본값은 latest)
docker.io/diamol/golang:latest
  • 이미지에 새로운 이미지 참조를 부여하여, 한 이미지에 여러 개의 참조를 갖게 할 수도 있음
docker image tag new-tag pocj8ur4in/vw-api:latest

사설 도커 레지스트리 (Private Docker Registry) : 로컬 혹은 원격 환경에 레지스트리를 구축

  • 도커 코어 레지스트리 서버는 docker/distribution에서 개발이 진행되고 있음
    • 도커 허브와 동일한 레이어 캐시 시스템을 통해 이미지를 내려받고 푸시하는 기능 제공
    • 웹 기반 UI 관련 기능은 빠져 있음

태그:

업데이트: