도커(Docker)는 Immutable Infrastructure Paradigm 이라는 개념을 기반으로 하기 때문에,
서비스 환경(서비스 인프라) 부분을 이미지화(실행파일화)하여
배포한 뒤 가급적 변경하지 않고 사용한다고 이전 포스팅에서 말했었습니다.
이번에는 그것을 가능하게 하는 이미지(Image)와 컨테이너에 대해 정리해보겠습니다.
Docker Image(이미지)
도커에서 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 Docker Image라 한다. 다시 말해, 특정 프로세스를 실행하기 위한(즉, 컨테이너 생성(실행)에 필요한) 모든 파일과 설정값(환경)을 지닌 것으로, 더 이상의 의존성 파일을 컴파일하거나 이것저것 실치 할 필요 없는 상태의 파일을 의미한다. 예를 들어 Ubuntu이미지는 Ubuntu를 실행하기 위한 모-든 파일을 가지고 있으며, Oracle이미지는 Oracle을 실행하는데 필요한 파일과 실행명령어, port정보 등을 모-두 가지고 있다.
1) 따라서 도커 이미지의 용량은 보통 수백MB ~ 수GB가 넘는다. 하지만 가상머신의 이미지에 비하면 굉장히 적은 용량이다.
2) 이미지는 상태 값을 가지지 않고 변하지 않는다(Immutable).
3) 하나의 이미지는 여러 컨테이너를 생성할 수 있고, 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아 있음.
4) 도커 이미지들은 github와 유사한 서비스인 DockerHub를 통해 버전 관리 및 배포(push&pull)가 가능하다.
5) 다양한 API가 제공되어 원하는 만큼 자동화가 가능하다.
6) 도커는 Dockerfile이라는 파일로 이미지를 만든다. Dockerfile에는 소스와 함께 의존성 패키지 등 사용했던 설정 파일을 버전 관리하기 쉽도록 명시되어진다.(그래서 누구나 이미지 생성과정을 확인할 수 있으며 수정도 할 수 있다)
이미지와 레이어(Layer)
레이어란 기존 이미지에 추가적인 파일이 필요할 때 다시 다운로드받는 방법이 아닌 해당 파일을 추가하기 위한 개념이다. 이미지는 여러 개의 읽기 전용(read only) layer로 구성되고, 파일이 추가되면 새로운 Layer가 생성됨. 그리고 도커는 여러 개의 Layer를 묶어서 하나의 파일시스템으로 사용할 수 있게 해준다. 그래서 이미지와 레이어는 같은 의미로도 사용된다. 추가적으로 DockerHub 및 개인 저장소에서 이미지를 공유할 때는 바뀐 부분(Layer = image)만 주고받기 가능하다.
도커 컨테이너(Docker Container)
이미지(Image)를 실행한 상태로, 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 or 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술이다.
1) 컨테이너는 이미지 Layer에 읽기/쓰기(read-write) Layer를 추가하는 것으로 생성/실행된다. 따라서 여러 개의 컨테이너를 생성해도 최소한의 용량만 사용되며, 바뀐 부분을 읽기/쓰기 Layer에 적음
2) 컨테이너는 종료되었다고 메모리에서 삭제되지않고 남아있다. 삭제하려면 명시적으로 삭제해야 함. 즉, 종료가 되어도 컨테이너 & 읽기/쓰기 Layer 또한 그대로 존재하기 때문에 다시 시작할 수 있음.
3) 컨테이너를 삭제했다는 것은 컨테이너에서 생성한 파일이 사라진다는 것.
예) DB라면 그동안 쌓였던 데이터가 모두 사라진다는 뜻과 동일.
4) 한 서버는 여러 개의 컨테이너를 가져도 당연히 상관없으며, 컨테이너는 각각 독립적으로 실행된다.
5) 컨테이너는 커널 공간과 호스트OS 자원(시스템 콜)을 공유한다.
'Docker & VM' 카테고리의 다른 글
도커(Docker)와 가상머신(Virtual Machine) 비교 (2) | 2020.10.02 |
---|---|
도커(Docker)를 이용한 오라클 설치 및 실행 (0) | 2020.03.09 |
VirtualBox로 Linux(CentOS)설치 & 환경 설정하기 (0) | 2019.09.01 |