이미지와 컨테이너

이미지란?

  • 제작 단계에서부터 소프트웨어와 소프트웨어를 실행하기 위해서 필요한 모든 요소들을 미리 준비해서 압축한 파일
  • 애플리케이션 서버와 이미지
    • image

    • 도커를 사용하는 목적은 컨테이너 내에서 웹서버나 웹 애플리케이션 같은 소프트웨어를 운영하는 것이다.
    • 이미지를 컨테이너로 실행시키면 호스트 OS안에서 완전히 격리된 공간인 컨테이너가 생성되고, 컨테이너 안에서 소프트웨어가 실행 됨
    • 이미지는 누구나 만들 수 있고 사용할 수 있음

이미지와 컨테이너의 관계

  • 이미지는 프로그램이 실행되기 위한 환경이 모두 포함되어 있는 파일 시스템, 호스트 머신의 특정 경로에 압축 파일로 위치
  • 컨테이너는 이미지를 격리된 공간으로 실행한 것, 컨테이너를 실행하기 위해 이미지가 필요, 하나의 이미지로 여러 컨테이너 실행 가능
  • 프로그램과 프로세스의 관계와 같음

이미지의 메타데이터

  • 이미지에 대한 정보를 기술한 데이터
  • 이미지는 압축파일과 메타데이터로 구성
  • 아이디, 이름, 사이즈, env(소프트웨어가 실행 시 참조할 설정 정보), cmd(컨테이너 실행 시 프로세스 실행 명령어 지정) 등의 정보
  • 메타데이터를 통해 격리된 공간인 컨테이너가 생성됨
  • 메타데이터를 수정하여 다른 역할을 수행할 수 있는 컨테이너로 만들 수 있음

컨테이너의 라이프사이클

  • image

  • 컨테이너가 이미지로부터 시작
  • 생성(Created) - 컨테이너를 실행하기 위한 격리된 공간이 만들어지는 상태
    • 컴퓨터 자원을 사용하고 있지 않음
  • 실행(Running) - 이미지의 메타데이터를 통해 컨테이너 내에서 정상적으로 프로세스가 실행됨
    • 컴퓨터 자원을 사용
    • docker run명령어를 통해 한번에 컨테이너가 생성 및 실행 됨
    • `restart’를 통해 10초 뒤 재실행할 수 있음
  • 일시정지(Paused) - 컨테이너에서 실행 중인 모든 프로세스가 일시 중지된 상태
    • 현재 상태를 모두 메모리에 저장
    • CPU 사용 X, 메모리 사용 O
  • 종료(Stopped) - 컨테이너에서 실행 중인 프로세스를 완전히 중단
    • 메모리, CPU 사용을 중단
  • 삭제(Deleted) - 컨테이너를 삭제

이미지 레지스트리

이미지 레지스트리

  • 도커와 이미지를 저장하기 위한 저장소
  • 이미지 레지스트리를 통해 개인이나 팀이 이미지를 다른 사람과 공유하거나 필요한 이미지를 다운 받을 수 있다.
  • 예) dockerhub
    • image
  • 이미지 실행 과정
    • image
    • docker run 이미지이름을 통해 이미지를 실행하려고 하면 먼저, 로컬 스토리지(호스트 OS의 특정 폴더)의 이미지를 검색한다.
    • 로컬 스토리지에 이미지가 있으면 바로 이미지를 실행한다.
    • 로컬 스토리지에 이미지가 없으면 호스트 외부의 온라인 레지스트리에서 이미지를 로컬 스토리지에 다운로드하고, 다운받은 이미지를 가지고 컨테이너를 실행한다.
    • 프라이빗 레지스트리 - 특정 네트워크에서만 접근이 가능한 레지스트리
    • 퍼블릭 레지스트리 - 모든 네트워크에서 접근이 가능한 레지스트

이미지 네이밍 규칙

  • image

  • 레지스트리주소는 생략 가능, 생략하면 docker.io로 인식
  • 프로젝트명은 DOCKER OFFICIAL IMAGE인 경우 생략 가능
  • 이미지 태그는 이미지의 버전을 의미

이미지 레지스트리 명령문

  • 이미지 다운로드 docker pull 이미지명
  • 로컬스토리지의 이미지명 추가 docker tag 기존이미지명 추가할이미지명
  • 이미지 레지스트리에 이미지 업로드 docker push 이미지명
  • image
    • pull 명령어를 통해 로컬 스토리지로 이미지를 다운로드 한다.
    • tag 명령어로 로컬 스토리지의 이미지명을 추가한다. 이때, 기존이미지명과 추가한 이미지 명이 함께 존재한다.
    • push 명령어를 통해 추가한 이미지 명을 통해 내 프로젝트로 이미지를 푸시할 수 있다. push 명령어를 사용하기 위해선 도커에 로그인이 되어있어야 한다.
  • 이미지 레지스트리 인증 정보 생성 docker login
  • 이미지 레지스트리 인증 정보 삭제 docker logout
  • 로컬 스토리지의 이미지 삭제 docker image rm 이미지명

이미지 이름만 알면 여러 사람이 하나의 이미지를 사용하여 도커를 통해 완벽하게 일치하는 서버를 구성할 수 있다. 서버 구성을 이미지에 실행 가능한 형태로 저장해서 공유하면 서버를 운영하는 비용을 줄이고 새로운 서버를 구성하는 시간을 크게 단축시킬 수 있다.