Docker
Docker는 리눅스 컨테이너에서 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트이다.
Docker를 배우기 앞서 Docker와 자주 비교되는 가상머신과 함께 비교해보자.
가상 머신과 Docker container
기존의 가상화 기술은 하이퍼바이저를 이용하여 여러 가상 머신을 만들어 여러가지 운영체제를 하나의 호스트에서 생성하여 사용하였다. 하나의 가상머신은 하나의 운영체제가 설치되어 있다. 하이퍼바이저에 의해 생성되고 관리되는 운영체제는 게스트 운영체제라고 하며 각 게스트 운영체제는 독립된 공간과 시스템 자원을 호스트에서 할당받아 사용한다.
그러나 각 시스템 자원을 가상화하여 독립적인 공간을 생성하는 작업은 하이퍼바이저를 반드시 거쳐야 하는데 여기서 성능 손실이 발생한다. 또한 가상머신은 운영체제를 포함하여 운영체제를 사용하기 위한 라이브러리와 커널 등을 포함하기 때문에 가상머신을 배포하기 위한 이미지 크기가 커진다. 성능 손실과 이미지 크기가 큰 단점 때문에 가상머신 이미지를 통해 애플리케이션을 배포하는 것은 부담이된다.
하지만 도커 컨테이너는 가상화된 공간을 생성하기 위해 리눅스 자체 기능인 chroot, namespace, cgroup을 사용함으로써 프로세스 단위 격리 환경을 만들기 때문에 성능 손실이 거의 없다. 컨테이너에서 사용하는 커널은 호스트 커널을 공유해 사용하고, 컨테이너 내부에는 애플리케이션을 구동하기 위해 필요한 라이브러리 및 실행 파일만 있기 때문에 컨테이너 이미지 용량이 가상머신 이미지보다 더 적다는 장점이 있다. 따라서 컨테이너를 통해 애플리케이션을 배포하는 것은 부담이 아주 적어진다.
도커 장점
도커를 사용한다면 여러가지 장점이 있다.
- 애플리케이션 개발과 배포가 쉬워진다는 장점이 있다. 도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간이다. 따라서 컨테이너 자체에 권한을 주지 않는 한 컨테이너에서 소프트웨어를 설치하거나 파일을 변경해도 호스트 OS에는 영향을 끼치지 않는다. 즉 도커는 독립된 개발환경을 보장받을 수 있다.
- 애플리케이션을 도커 이미지로 만들어 애플리케이션을 패키징할 수 있다. 그래서 애플리케이션을 배포하려고 한다면 도커 이미지를 운영환경에 전달하기만 하면 된다. 이 이미지는 도커 엔진이 있는 모든 환경에서 문제없이 작동될 것이다.
- 도커 이미지는 가상머신과 달리 커널을 포함하지 않아서 이미지 크기가 크지 않고, 이미지 내용을 레이어 단위로 구성하여 중복되는 레이어를 재사용할 수 있어서 애플리케이션 배포 속도가 빠르다는 장점이 있다.
- 애플리케이션 간의 독립성과 확장성이 높아진다. 컨테이너는 빠르게 애플리케이션을 배포하여 실행시킬 수 있을 뿐 아니라 여러 모듈에게 독립된 환경을 제공할 수 있기 때문에 MSA 환경에서 많이 사용된다.
도커 설치
설치사이트 에 가서 자신이 사용하고 있는 운영체제의 도커를 설치하면 된다. 도커의 버전을 알고 싶으면 다음 명령어로 확인 가능하다.
$ docker --version
Docker version 20.10.6, build 370c289
Docker Engine
도커를 설치하였다면 도커 엔진에 대해 알아보자. 먼저 도커 엔진에서 사용하는 기본 단위는 이미지와 컨테이너이다. 이 두 가지가 도커 엔진의 핵심이다.
Docker Image
이미지는 컨테이너를 생성할 때 필요한 요소이며 이는 여러 개의 계층으로 된 바이너리 파일로 존재하고, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용된다.
도커 이미지의 이름은 기본적으로 {repository-name}/{image-name}:{tag}
로 구성된다. 여기서 repository-name
이 명시되지 않은 이미지는 도커에서 기본적으로 제공하는 이미지 저장소인 도커 허브의 공식 이미지를 의미한다. tag
는 간단히 도커 이미지의 버전으로 생각하면 된다.
Docker Container
도커 이미지에는 운영체제부터 시작해서 여러가지 애플리케이션까지 여러가지 종류가 있는데, 이미지로 컨테이너를 실행하면 해당 이미지의 목적에 맞는 파일들이 들어있는 파일 시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 도커 컨테이너라는 독립된 공간이 생성된다.
컨테이너는 이미지를 읽기 전용으로 사용하지만 이미지에서 변경된 사항만 컨테이너 계층에 저장하므로 컨테이너에서 변경사항이 발생해도 원본 이미지에는 변함이 없다. 그리고 컨테이너에서 애플리케이션을 설치하거나 특정 파일을 삭제해도 다른 컨테이너와 호스트에게는 변경사항이 발생하지 않는다.
'DevOps > Docker' 카테고리의 다른 글
6. Dockerfile (0) | 2022.05.14 |
---|---|
5. Docker Image (0) | 2022.05.14 |
4. Docker Network (0) | 2022.05.14 |
3. Docker Volume (0) | 2022.04.24 |
2. Docker Container (0) | 2022.04.24 |
댓글