Infra/Docker
[Docker] Docker란
yejiji
2021. 5. 23. 22:56
Docker란 ?
컨테이너 기반의 오픈소스 가상화 플랫폼으로 각 요소들이 설치된 모습을 '이미지' 형태로 박제해서 저장한다.
각 제품마다 공식적으로 제공되는 이미지도 있고 원하는대로 만들 수 있고 가상 컴퓨팅과는 다른 개념으로 도커는 실행 환경만 독립적으로 돌리는 것이다.
도커는 LXC(Linux Container) 기반으로 시작하여 0.9 version에서는 자체 libcontainer 기술을 사용하였고, 추후 runC기술에 합쳐졌다.
- 컴퓨터에 직접 요소들을 설치한거랑 별 차이 없는 성능을 낼 수 있음
- 가상 컴퓨팅보다 훨씬 가볍고 빠르게 각각 설치하고 실행하고 켜고 끄고 서로 연동할 수 있음
- 서버에 뭐가 잘못돼서 고쳐야 하거나 일부를 업그레이드해야 할 때는 일일이 요소들을 정지하고 새로 깔거나 할 거 없이 그냥 컨테이너들을 통째로 교체해서 새로 실행해버리면 됨
[ 컨테이너란?]
격리된 공간에서 프로세스가 동작하는 기술이다.
컨테이너의 주목적은 배포(deploy) 이다.
[ VM vs Container ]
Hypervisor 기반 가상화
▪ 기존의 가상화 방식은 주로 OS를 가상화하였다.
▪ VMware나 VirtualBox 같은 가상머신은 호스트 OS 위에 게스트 OS 전체를 가상화하여 사용하는 방식이다.
▪ 이와 같이 추가적인 OS를 설치하여 가상화하는 방법은 오버헤드가 발생하였고, 이를 개선하기 위해 프로세스를 격리하는 방식이 등장했다.
* Hypervisor 란?
호스트 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼을 말한다. 가상화 머신 모니터 또는 가상화 머신 매니저 라고도 부른다.
Container 기반 가상화
▪ 단순 프로세스를 격리시키기 때문에 가볍고 빠르게 동작한다.
▪ CPU, Memory는 프로세스가 필요한 만큼만 사용하므로 성능상의 이슈가 거의 없다.
▪ 컨테이너를 사용하면 가벼운 VM의 느낌을 준다.
[ 구조 ]
- Client : user가 명령어를 입력하면 이를 Server쪽에 전송하고, Docker daemon이 수행한다.
- Docker daemon : docker api 요청을 수신하고 image, container, network, volume과 같은 docker object를 관리한다. 다른 도커 데몬과의 통신을 통해 서비스를 관리할 수 있다.
- Docker Registry : Docker 이미지 저장소이다.
- Image : 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있다. 공식 이미지의 경우 해당 이미지를 실행하기 위한 모든 것이 세팅되어 있다.
[ 특징 ]
- 레이어 저장방식
- 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 용량이 크다. 기존 이미지에 파일 하나 추가했다고 용량이 큰 해당 파일을 다시 받는건 비효율적이다.
- 도커는 이러한 문제를 해결하기 위해서 Layer라는 개념을 사용하고 유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일 시스템으로 사용할 수 있게 해준다.
- 컨테이너를 생성할 때도 레이어 방식을 사용하여 기존의 이미지 레이어 위에 읽기/쓰기 레이어를 추가한다.
- Dockerfile
- 이미지를 만들기 위해 자체 DSL언어를 이용하여 이미지 생성 과정을 적는 파일이다.
- Application 실행에 필요한 과정들을 Dockerfile로 작성하여 관리할 수 있으며, 해당 파일을 보면서 이미지 생성 과정을 알 수 있으므로 수정하기도 용이하다.
- Docker Hub
- 컨테이너 이미지 관리를 위한 웹으로 도커 허브를 통해 이미지를 쉽게 공유할 수 있다.
공식 사이트
참조