Docker 탄생 배경
LXC가 격리된 환경을 제공하였으나, 서비스를 운영하기 위한 기능들이 부족하여 Docker가 탄생
- 문서 관리 : 이력 관리가 힘들어 지면서 상태관리 도구가 등장
- 상태관리 도구
- 프로그램을 실행할 때, 참조하는 설정 파일을 코드로 작성해 협업 및 버전 관리가 가능하였음
- 하지만, 한 서버에서 여러 버전을 관리하기가 어려움
- 가상 머신(VM)
- 한 서버에 여러개 설치가 쉽고 현재 상태를 저장할 수 있었음
- 셋팅 방법 및 이미지 공유가 어렵고, 너무 느림
- 자원격리
- LXC를 사용해 프로세스, 파일, 디렉토리 등을 분리하여 사용
- 빠르고 효율적이나 기술이 너무나 어렵고 불편하여 사용 빈도가 낮음
위의 시행착오를 겪으면서 탄생한 것이 Docker(2013년도)
- 초기에는 LXC를 기반으로 구현하였으나, libcontainer를 거쳐 현재는 runC로 구현됨
- cgroup, namespace를 표준으로 정의한 OCI 런타임 스펙을 구현한 컨테이너 기술의 구현체
- runC에서 cgroup은 자원 할당 기능을 맡고, namespace는 시스템 리소스를 가상화(격리)하는 기능 제공
- 확장성 / 이식성 / 표준성 / 이미지 / 설정관리 / 자원관리 에 강점을 가지고 있음
도커 이미지 (Docker Image)
Container를 만드는데 사용되는 "Read-Only" 템플릿
서비스 운영에 필요한 서버 프로그램, 소스코드, 라이브러리, 컴파일된 실행 파일 등을 묶은 형태(cgroup)를 말함
- 특정 프로세스를 실행하기 위한 모든 파일과 설정값(환경)을 가진 파일
- 예를 들어, 특정 인공지능 모델을 학습하기 위해 필요한 Python, Pytorch Version 등의 정보를 모두 가지고 있음
위의 정보를 다 가지고 있어야 하기 때문에 보통 용량이 큼(수백 MB ~ GB)
- 하지만, VM에 비해서는 적은 용량
이미지는 변하지 않아 여러번 사용할 수 있음 - Container가 생성, 삭제 되더라도 변하지 않음
Dockerfile이라는 것으로 이미지를 생성함
Layer라는 개념을 가지고 있음
- 기존 이미지에 추가적인 파일이 필요할 때 해당 파일을 추가하는 개념 (Layer를 추가)
- DockerHub 나 개인 저장소에서 이미지를 공유할 때는 바뀐 부분만 주고받기가 가능
- SVN의 Update / Github의 pull 정도와 매칭이 됨
도커 컨테이너 (Docker Container)
도커 이미지를 실행한 상태를 말함
- 이미지의 목적에 맞는 파일이 들어있는 파일 시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 "독립된 공간" 이 생성
컨테이너를 생성한 상태에서 이미지를 변경하게 되어도 만들어진 컨테이너에는 영향을 주지 않음
cf. 도커(Docker)에 대해 이해를 하고 AWS ECS를 배우면 많은 도움이 됨
'CS 지식' 카테고리의 다른 글
[Container - 2] chroot, namespace, cgroup (0) | 2022.09.28 |
---|---|
[Container - 1] 컨테이너 역사 (0) | 2022.09.27 |
NoSQL (0) | 2021.07.05 |