[Docker] Container, Docker 개념

예니·2022년 8월 9일
2

Container

Container란 application을 동작시키는 데에 필요한 환경이 있는 독립된 공간

  • 기존: Hypervisor 위에 각각의 VM을 두고 그 안에서 앱을 실행
  • Docker : OS위에 Container engine (docker)을 두고, 그 위에 container를 동작시킴
    -> 확장성 good, 배포 쉬워짐

리눅스에서 돌리는 이유

  • 리눅스에 있는 chroot(독립된 공간 형성), namespace(isolate 기능), cgroup(필요한 만큼 HW 지원)과 같은 기능을 기반으로 container를 만들었기 때문 (기반기술이 리눅스 커널)
  • Container를 리눅스 커널에서 돌릴 수 있게 해주는 것이 container engine
  • 리눅스 커널이 없는 윈도우즈, 맥os에서는 hypervisor 활성화 필요

도커

  • 쓰는 이유
    환경 제약없이 어디서든 돌아감
    scale in/out 쉬움. MSA, DevOps에 적합
  • 도커 호스트?
    도커 데몬 (dockerd)이 동작하고 있는 시스템
    컨테이너를 실행할 수 있음
  • 도커 클라이언트?
    도커 클라이언트 커맨드를 통해 도커 데몬에게 요청
  • 도커 허브
    컨테이너 이미지들이 저장되어있는 저장소
    docker.com에서 기본 제공하는 것도 있으나, 기업에서는 보통 도커 허브를 자체 운영 (외부 노출 X)

Container / Container image

  • 컨테이너는 하나의 application 프로세스
  • 컨테이너 간에는 완전히 독립적임 (cpu, memory, network, disk 같은 HW 자원도)
  • Container image : base image layer - source image layer - 앱 실행 방법을 모아둔 것
    base image layer : 실행에 필요한 환경
    source image layer : 실행할 대상
    앱 실행 방법 : 어떻게 실행할지 명령어 같은 거
  • Container : 도커 호스트 위에서 container image대로 동작중인 프로세스

저장되어있는 것은 container image (read only)
실행중인 프로세스가 container (r,w 가능)


Container 동작 방식

  • docker hub에 수많은 컨테이너 이미지가 있음
  • search 명령어로 찾아서, pull 명령어로 해당 이미지를 도커 호스트로 가져옴
  • run / create / start 등의 명령어로 실행함

Container 만들기

  • Dockerfile로 컨테이너를 빌드함
  • Dockerfile은 top-down으로 실행됨
  • Dockerfile 생성 후, docker build 명령어로 이미지 만들기
  • docker push 명령어로 이미지 배포 가능
  • 명령어들은 필요할 때 찾아보기 (hub.docker.com에 있는 도커파일 보면 좋음)

Container 사용법

  • search, pull 등의 명령어로 이미지를 다운받기
  • create : 이미지를 컨테이너화함 (컨테이너 생성만)
  • start : 컨테이너를 실행함
  • ps : 현재 컨테이너들의 상태를 확인 (목록)
  • inspect : 실행 중인 컨테이너를 자세히 봄 (이미지에도 사용할 수 있음)
  • run : pull -> create -> start 한번에 함
  • stop : 컨테이너 중지
  • rm : 컨테이너 삭제

Container 관리

  • 기본적으로 컨테이너는 호스트 HW 리소스 사용 제한 받지 않음
  • 컨테이너가 필요로 하는 만큼의 리소스만 할당해야함
  • Docker command를 통해 제한할 수 있는 리소스는 cpu, memory, disk i/o
  • docker run 명령어에 옵션을 줘서 리소스를 제한할 수 있음

0개의 댓글