본문 바로가기

리눅스 인프라/Docker, Jenkins, Kubernates

docker, compose, swarm에 대한 이해

docker

docker의 개념

도커란 리눅스의 컨테이너 기술에 여러가지 기능을 추가한 오픈 소스 프로젝트이다. 도커 말고도 존재하는 컨테이너 기술은 OpenVZ, Warden 등이 있다.

리눅스 컨테이너 기술이란 프로세스가 실행하기 위한 독립적 실행 공간을 제공하는 것이다. 독립적 공간에서 동작하기 때문에 다른 버전의 라이브러리를 사용하는 프로세스에 영향 없이 하나의 서버에서 같이 실행할 수 있다. 컨테이너 내부에 실행 파일과 라이브러리를 포함하고 있어, 버전 관리도 간편하다.

컨테이너 가상화 기술과 다르게 각 독립된 환경마다 게스트 운영체제까지 할당하는 서버 가상화기술이 있다. 대표적인 소프트웨어로는 VirtualBox가 있다. 프로세스를 실행시키기 위한 독립된 공간에 운영체제까지 포함되기 때문에 이미지 자체가 크고 관리에 자원이 많이 든다. 반면에 컨테이너 기술은 운영체제 자원을 공유해서 사용하기 때문에 효율적인 실행 환경을 제공한다.

docker의 구조

  • 도커 엔진

도커 엔진은 프로세스가 담겨있는 컨테이너 실행 중지 등 라이프 사이클을 관리한다.

도커 엔진 인터페이스를 통해 유저가 컨테이너를 쉽게 사용 관리할 수 있게 해준다.

도커 엔진을 통해 컨테이너 관리, 이미지 관리, 볼륨 관리, 네트워크 관리를 할 수 있다.

  • 이미지

프로세스 운영에 필요한 라이브러리, 소스 코드 파일을 묶은 형태이다. 컨테이너 실행에 필요한 모든 자원을 저장한다. 운영체제를 포함하지 않기 때문에 가상 머신의 이미지에 비해 적은 용량으로 상태를 저장할 수 있다. 하나의 이미지로 여러 컨테이너를 생성할 수 있다.

  • 컨테이너

프로세스가 실제 실행되는 독립 공간이다. 도커 엔진에서 이미지 파일에 저장 공간, 네트워크 정보 등을 할당받아서 실행된다.

docker compose

docker compose의 역할은 여러 컨테이너 생성을 편리하게 도와주는 것이다.

docker compose는 여러 개의 서비스, 네트워크, 볼륨을 정의하는 하나의 yaml 파일로 관리될 수 있다.그래서 단일 명령으로 다중 컨테이너를 실행하거나 모든 것을 되돌리거나 해체할 수 있다.

docker swarm

swarm은 도커 엔진에 포함된 기술이다. swarm을 사용하여 원하는 여러 개의 컨테이너 상태를 관리할 수 있다. 서비스를 만들 때 원하는 상태(복제본 수, 사용 가능한 네트워크 및 스토리지 리소스, 외부에 노출하는 포트)를 정의하고 원하는 상태를 유지하기 위해 작동한다. 예를 들어 컨테이너의 복제본 10개를 실행하도록 서비스를 설정하고 이러한 복제본 중 두 개를 호스팅하는 작업자 시스템이 충돌하는 경우 관리자는 충돌한 복제본을 대체할 두 개의 새 복제본을 생성한다.

Docker Swarm 구성 요소로는:

  • Nodes

노드는 Swarm 관리에 참여하는 docker 엔진의 인스턴스이다. 노드는 관리자 노드와 작업자 노드로 이루어진다.

스웜 모드를 실행하려면 먼저 관리자 노드를 적용해야 한다. 괸라자 노드는 워커 노드에서 실행할 태스크를 배포하거나, 원하는 swarn 상태를 유지하기 위해 오케스트레이션 및 클러스터 관리 기능을 수행한다. 관리자 노드도 서비스를 실행하는 역할을 맡을 수 있다.

작업자 노드는 관리자 노드에서 발송된 작업을 수신하고 실행한다. 작업자 노드는 작업을 수행하면 그 결과를 관리자 노드에서 보고 한다. 해당 보고를 받아 swarm의 상태 관리가 이루어진다.

  • Services

서비스는 괸리자 또는 작업자 노드에서 실행할 작업이다. 서비스를 만들 때 사용할 이미지와 명령을 지정한다.

사용자가 원하는 서비스 규모에 따라서 스웜 관리자는 서비스가 포함된 노드의 복제 작업을 실행한다.

  • Load balancing

Swarm은 인그레스 로드 밸런싱을 사용하여 서비스를 외부에 노출한다.

Swarm 모드에는 각 서비스에 DNS 항목을 자동으로 할당하는 내부 DNS가 있어서 DNS 이름 기반으로 서비스로 오는 요청을 로드 밸런싱을 통해 분산한다.


Reference

https://www.youtube.com/watch?v=hWPv9LMlme8

https://www.youtube.com/watch?v=IiNI6XAYtrs

https://docs.docker.com/engine/swarm/

https://docs.docker.com/get-started/08_using_compose/

https://devzzi.tistory.com/70