[Container] 1. Docker
# Docker
(출처 : https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html)
1. 개념
1-1. Docker
- 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼
- 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줌
- 리눅스 커널에서 제공하는 컨테이너 기술(LXC)를 이용
- 컨테이너들을 생성하고 관리해주는 것이 컨테이너 엔진
1-2. Container
- 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술
- 가상화 기술의 하나
- 기존의 전가상화, 반가상화는 추가적인 OS를 설치하여 가상화하는 방법이므로 성능에 문제가 있었고, 이를 개선하기 위해 프로세스를 격리 하는 방식이 등장
- 하나의 서버에 여러 개의 컨테이너를 실행해도 서로 영향을 미치지 않고 독립적으로 실행
Why?
- 가상머신과 컨테이너의 차이점
- 효율성 : OS 커널을 공유하기 때문에 자원을 필요한 만큼 효율적으로 사용 가능
- 신속성 : Guest OS가 없어 MB 단위의 크기를 가지기 때문에 배포에 소요되는 시간이 수 초에 불과
- 라이센스 비용 절감 : Host OS 1대의 라이센스 비용만 발생
- 안정성 : OS 커널을 공유하기 때문에, 하나의 컨테이너가 무리하게 자원 사용할 수 있음. 이러한 문제는 쿠버네티스로 해결 가능
- 개발 환경 이전 솔루션
- 컨테이너에 애플리케이션과 애플리케이션을 구동하는 환경을 그대로 담아서 이잔하면, 장애 걱정 없이 신속하고 안정적으로 환경 이전 가능
- 마이크로 서비스화 솔루션
- 마이크로 서비스를 컨테이너로 구성하면 애플리케이션을 기능 혹은 서비스 단위로 신속하게 배포 가능
- 컨테이너는 독립적인 구조이기 때문에, 하나의 변경 사항이 다른 기능들에 영향을 미치지 않음
1-3. Image
- 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것
- 상태를 가지지 않고 변하지 않음(Immutable)
- 컨테이너는 이미지를 실행한 상태라고 볼 수 있고, 추가되거나 변하는 값은 컨테이너에 저장
- 이미지는 Docker hub에 등록하거나 Docker Registry 저장소를 직접 만들어 관리 가능
1-4. 레이어 저장 방식
- 레이어(Layer)라는 개념을 사용하고 유니온 파일 시스템을 이용하여 여러 개의 레이어를 하나의 파일 시스템으로 사용할 수 있게 해줌
- 이미지는 여러 개의 읽기 전용 레이어로 구성되고, 파일이 추가되거나 수정되면 새로운 레이어가 생성
- 컨테이너를 생성할 때도 레이어 방식을 사용하며, 기존의 이미지 레이어 위에 읽기/쓰기 레이어를 추가
- 이미지 레이어를 그대로 사용하면서 컨테이너가 실행중에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장 => 여러 개의 컨테이너를 생성해도 최소한의 용량만 사용
1-5. 이미지 경로
- URL 방식으로 관리하며, 태그를 붙일 수 있음
1-6. Dockerfile
- 도커는 이미지를 만들기 위해 Dockerfile 이라는 파일에 자체 DSL(Domain-specific language) 언어를 이용하여 이미지 생성 과정을 적음
1-7. Docker Hub
- 공개 이미지를 무료로 서버에 저장하고 관리