Docker 원리와 이해
Docker
컨테이너
- 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포와 관리를 단순하게 해준다.
- 이미지를 실행한 상태, 동적인 값이 컨테이너에 저장된다
- 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다.
기존의 가상화, 가상머신
- 컨테이너는 가상화 기술을 사용하고 기존의 방식과는 차이 있다.
- 기존에는 호스트 OS(Operating System) 위의 게스트 OS 전체를 가상화하였다.
- 전체 게스트 OS를 가상화하기 때문에 사용하는 컴퓨터의 리소스가 분할 사용되어 성능 이슈와 무겁다는 단점이 있었다,
- EX) VMware나 VirtualBox 같은 가상머신
도커 엔진(Docker Engine)
- 도커 엔진은 Docker Components와 서비스를 제공하는 컨테이너를 구축하고 실행하는 기본 핵심 소프트웨어입니다.
리눅스 컨테이너
- 리눅스에서 운영체제 커널을 제외한 프로세스를 격리하여 사용하는 방식을 의미한다.
- 운영체제 커널 : 운영체제의 핵심 부분, 하드웨어와 응용프로그램 사이에서 인터페이스를 제공, 자원을 관리하는 역할
- 프로세스를 격리시키기 때문에 가볍고 빠르다
- CPU, 메모리도 필요한 만큼 사용할 수 있어 성능적으로 거의 손실이 없다.
도커 컨테이너
- 위의 리눅스 컨테이너를 쉽게 사용할 수 있게 기능을 좀 더 추가한 것이 도커 컨테이너이다.
- 도커 컨테이너도 호스트 OS 위에서 동작하는 프로세스입니다.
도커 이미지
- 컨테이너 실행에 필요한 파일과 설정값을 가지고 있는 것입니다.
- 상태값을 가지지 않고 불변합니다.
- 유니언 마운트를 이용해 레이어를 겹겹이 쌓아 올리는 방식으로 만들어 진다.
- 유니언 마운트 : 하나의 디렉토리 지점에 여러 개의 디렉터리를 겹겹이 추가하는 것
- 이미지를 실행시켜 컨테이너를 생성할 때도 읽기/쓰기 레이어를 추가하여 실행한다.
- 가상화 특성상 이미지 용량이 크고 여러 대에 배포하는 것을 감안하면 단순하지만 영리한 설계 구조이다.
도커 이미지 경로
- 이미지는 url 방식으로 관리되고 태그를 붙일 수 있다.
- EX) ubuntu 14.04 이미지 :
docker.io/library/ubuntu:14.04
or docker.io/library/ubuntu:trusty
- docker.io/library은 생략 가능, ubuntu:14.04 로 사용가능
도커 이미지와 컨테이너
- 이미지는 프로그램(정적인 코드 덩어리 같은 느낌), 컨테이너는 이미지를 실행시킨 프로세스이다..
- 컨테이너로 무엇을 하든 이미지에는 변화가 없고 서로 독립적인 존재이다..
- 컨테이너에 새로운 파일을 더해 새로운 이미지로 만들 수 있다.
- 컨테이너는 레이어 구조로 되어있고 추가 변경사항들은 최상단 레이어에 쓰여진다.
- 컨테이너가 삭제되면 모두 사라지게 된다.
도커 허브
추가 공부할 사항
- 쿠버네티스 : 여러 개의 컨테이너를 서비스 단위로 관리하고 실행하는 툴
Reference: