[Docker] 3. Docker Container
도커 컨테이너 (Docker Container) : 도커에서 제공하는 컨테이너 기술
해당 부분에서 이어지는 내용입니다. 이전 내용에서는 가상화의 한 종류인 컨테이너 기술에 대해 서술하였다면, 이번에는 도커를 중심으로 하여 컨테이너에 대해 다뤄보겠습니다.
도커 컨테이너는 도커가 관리하는 독립적인 가상 리소스를 가진다.
- 컨테이너 안에는 어플리케이션과 그 어플리케이션의 실행 환경 (호스트명,
IP주소, 디스크 드라이브 등)이 들어있음- 각 컨테이너는 독립적인 환경을 가지되, 실행되는 컴퓨터의
CPU, 메모리, 운영체제를 공유함- 격리 (
isolation)와 밀집 (density)의 조건을 동시에 충족 - 빌드 - 공유 - 실행의
workflow으로 소프트웨어 배포를 단순화하기에 적합
- 격리 (
- 각 컨테이너는 독립적인 환경을 가지되, 실행되는 컴퓨터의
- 컨테이너 내부 어플리케이션이 실행중이여야 컨테이너의 상태도 실행 중이 된다.
- 컨테이너가
Existed인 상태에서는CPU자원이나 메모리를 사용하지 않는다.
- 컨테이너가
- 컨테이너가 종료되어도, 컨테이너는 사라지지 않고 그대로 남아있다.
- 나중에 다시 컨테이너를 실행하거나, 내부 파일이나 로그를 확인해볼 수 있다.
- 컨테이너를 백그라운드에서 계속 동작하도록 하려면,
-d(--detach)
- 컨테이너는 기본적으로 외부 환경에 노출되지 않는다.
- 도커는 호스트 컴퓨터의 네트워크 계층에 끼어들어 네트워크 트래픽 중 필요한 것을 컨테이너에 전달
- 컨테이너의 포트를 호스트 컴퓨터에 공개하려면,
--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)는 네 개의 요소로 구성- 이미지가 저장된 레지스트리 도메인 (기본값은 도커 허브)
- 이미지 작성자 계정
ID - 이미지 레포지토리
ID - 이미지 태그 (기본값은
latest)
docker.io/diamol/golang:latest
- 이미지에 새로운 이미지 참조를 부여하여, 한 이미지에 여러 개의 참조를 갖게 할 수도 있음
docker image tag new-tag pocj8ur4in/vw-api:latest
사설 도커 레지스트리 (Private Docker Registry) : 로컬 혹은 원격 환경에 레지스트리를 구축
- 도커 코어 레지스트리 서버는
docker/distribution에서 개발이 진행되고 있음- 도커 허브와 동일한 레이어 캐시 시스템을 통해 이미지를 내려받고 푸시하는 기능 제공
- 웹 기반
UI관련 기능은 빠져 있음