(도커) 이미지와 컨테이너
개발자를 위한 쉬운 도커 (데브위키)
이미지와 컨테이너
이미지란?
- 제작 단계에서부터 소프트웨어와 소프트웨어를 실행하기 위해서 필요한 모든 요소들을 미리 준비해서 압축한 파일
- 애플리케이션 서버와 이미지
- 도커를 사용하는 목적은 컨테이너 내에서 웹서버나 웹 애플리케이션 같은 소프트웨어를 운영하는 것이다.
- 이미지를 컨테이너로 실행시키면 호스트 OS안에서 완전히 격리된 공간인 컨테이너가 생성되고, 컨테이너 안에서 소프트웨어가 실행 됨
- 이미지는 누구나 만들 수 있고 사용할 수 있음
이미지와 컨테이너의 관계
- 이미지는 프로그램이 실행되기 위한 환경이 모두 포함되어 있는 파일 시스템, 호스트 머신의 특정 경로에 압축 파일로 위치
- 컨테이너는 이미지를 격리된 공간으로 실행한 것, 컨테이너를 실행하기 위해 이미지가 필요, 하나의 이미지로 여러 컨테이너 실행 가능
- 프로그램과 프로세스의 관계와 같음
이미지의 메타데이터
- 이미지에 대한 정보를 기술한 데이터
- 이미지는 압축파일과 메타데이터로 구성
- 아이디, 이름, 사이즈, env(소프트웨어가 실행 시 참조할 설정 정보), cmd(컨테이너 실행 시 프로세스 실행 명령어 지정) 등의 정보
- 메타데이터를 통해 격리된 공간인 컨테이너가 생성됨
- 메타데이터를 수정하여 다른 역할을 수행할 수 있는 컨테이너로 만들 수 있음
컨테이너의 라이프사이클
- 컨테이너가 이미지로부터 시작
- 생성(Created) - 컨테이너를 실행하기 위한 격리된 공간이 만들어지는 상태
- 컴퓨터 자원을 사용하고 있지 않음
- 실행(Running) - 이미지의 메타데이터를 통해 컨테이너 내에서 정상적으로 프로세스가 실행됨
- 컴퓨터 자원을 사용
docker run
명령어를 통해 한번에 컨테이너가 생성 및 실행 됨- `restart’를 통해 10초 뒤 재실행할 수 있음
- 일시정지(Paused) - 컨테이너에서 실행 중인 모든 프로세스가 일시 중지된 상태
- 현재 상태를 모두 메모리에 저장
- CPU 사용 X, 메모리 사용 O
- 종료(Stopped) - 컨테이너에서 실행 중인 프로세스를 완전히 중단
- 메모리, CPU 사용을 중단
- 삭제(Deleted) - 컨테이너를 삭제
이미지 레지스트리
이미지 레지스트리
- 도커와 이미지를 저장하기 위한 저장소
- 이미지 레지스트리를 통해 개인이나 팀이 이미지를 다른 사람과 공유하거나 필요한 이미지를 다운 받을 수 있다.
- 예) dockerhub
- 이미지 실행 과정
docker run 이미지이름
을 통해 이미지를 실행하려고 하면 먼저, 로컬 스토리지(호스트 OS의 특정 폴더)의 이미지를 검색한다.- 로컬 스토리지에 이미지가 있으면 바로 이미지를 실행한다.
- 로컬 스토리지에 이미지가 없으면 호스트 외부의 온라인 레지스트리에서 이미지를 로컬 스토리지에 다운로드하고, 다운받은 이미지를 가지고 컨테이너를 실행한다.
- 프라이빗 레지스트리 - 특정 네트워크에서만 접근이 가능한 레지스트리
- 퍼블릭 레지스트리 - 모든 네트워크에서 접근이 가능한 레지스트
이미지 네이밍 규칙
- 레지스트리주소는 생략 가능, 생략하면 docker.io로 인식
- 프로젝트명은
DOCKER OFFICIAL IMAGE
인 경우 생략 가능 - 이미지 태그는 이미지의 버전을 의미
이미지 레지스트리 명령문
- 이미지 다운로드
docker pull 이미지명
- 로컬스토리지의 이미지명 추가
docker tag 기존이미지명 추가할이미지명
- 이미지 레지스트리에 이미지 업로드
docker push 이미지명
-
- pull 명령어를 통해 로컬 스토리지로 이미지를 다운로드 한다.
- tag 명령어로 로컬 스토리지의 이미지명을 추가한다. 이때, 기존이미지명과 추가한 이미지 명이 함께 존재한다.
- push 명령어를 통해 추가한 이미지 명을 통해 내 프로젝트로 이미지를 푸시할 수 있다. push 명령어를 사용하기 위해선 도커에 로그인이 되어있어야 한다.
- 이미지 레지스트리 인증 정보 생성
docker login
- 이미지 레지스트리 인증 정보 삭제
docker logout
- 로컬 스토리지의 이미지 삭제
docker image rm 이미지명
이미지 이름만 알면 여러 사람이 하나의 이미지를 사용하여 도커를 통해 완벽하게 일치하는 서버를 구성할 수 있다. 서버 구성을 이미지에 실행 가능한 형태로 저장해서 공유하면 서버를 운영하는 비용을 줄이고 새로운 서버를 구성하는 시간을 크게 단축시킬 수 있다.