Docker란
도커 역시 몰입교육에서 배워서 실습할때 사용해 봤다 몇 주 전이지만 도커 이론에 대해서 가물가물해서 글로 적어서 기억하려고 한다
도커란?
컨테이너 기반 가상화도구이다 그렇다면 컨테이너, 가상화란 무엇인가?
도커는 컨테이너 기술에 여러 기능을 추가한 오픈소스 프로젝트
가상화
하나의 서버에서 프로젝트 1개를 돌리는 경우 남는 리소스가 많을 수 있다 이 경우는 리소스 낭비이므로 하나의 프로젝트를 더 돌릴려고 할 때 이전 프로젝트와 기존 프로젝트이 충돌로 동시 사용이 불가능한 경우가 있다
이 경우 가상화를 이용해서 해결할 수 있는데 가상화란 한개의 컴퓨터를 여러개의 컴퓨터처럼 사용할 수 있게 하는 것을 말한다
서버의 성능을 나눠서 사용해서 각기 다른 프로젝트를 실행할 수 있게 되었다
가상화 종류
서버 가상화
하나의 물리적 서버 호스트에서 여러개의 서버 운영 체제를 게스트(게스트 운영체제)로 실행할 수 있게 해주는 소프트웨어 아키텍처 하이퍼 바이저를 통해서 가능하다
하이퍼 바이저는 guest os들에게 자원을 나누어주며 조율하고 os의 커널을 번역해서 하드웨어에 전달한다
하지만 시스템 자원을 가상화하고 자원을 조율하는 것이 하이퍼바이저를 반드시 거치기 때문에 성능 손실이 일어나고 게스트 운영체제를 사용하기 위한 커널, 라이브러리등을 모두 포함하기 때문에 이미지의 크기가 매우 커진다
완벽한 가상 운영체제를 생성할 수는 있짐만 성능이나 용량상 문제가 있다
컨테이너 기반 가상화
단순히 프로젝트 하나 구동시키는데 os까지 새로 구성하는 것은 낭비이기 때문에 프로세스 단위의 가상화를 이용
컨테이너를 생성하기위해 리눅스 자체기능인 chroot, name space, cgroup를 사용한다 컨테이너에는 application을 구동하기 위한 라이브러리 및 실행 파일만 존재 또한 서버 가상화에 비해 성능 손실도 거의 없음
컨테이너
이미지의 목적에 따라 생성되는 프로세스 단위의 격리 환경을 제공하고 프로세스의 생명 주기를 관리한다 또한 Host os와 격리를 통해서 독립된 개발 환경을 보장한다
컨테이너 관리는 어떻게 하는가?
컨테이너 바로 아래에 있는 도커엔진이 컨테이너를 관리한다
도커 엔진
유저가 컨테이너를 쉽게 관리할 수 있도록 도와준다 라이프사이클 관리, 이미지 관리, 볼륨 관리, 네트워크 관리등을 할 수 있다
도커 엔진의 도커 명령어 수행
도커 데몬(컨테이너 생성 실행 및 관리 주체)은 명령어 작업을 수행하며 사용자에게 결과를 출력한다
도커엔진 > 도커 데몬 > 컨테이너 > 프로세스 형태이고 프로세스는 컨테이너가 관리, 컨테이너는 도커 엔진(데몬)이 관리한다
도커 스웜
이렇게 사용하는 서버에서 자원이 부족하게 된다면 서버를 새로 구매(Scale Up)하거나 비슷한 서버를 추가로 구매해 클러스터(Scale Out)를 구성할 수 있다 전자의 방법은 비용이 매우 크게 들어가서 후자 방법(클러스터)을 사용한다 도커에서는 클러스터의 기능을 내장하고 있는데 이를 도커 스웜이라고 한다
- 자체적으로 컨테이너 수 조절 기능
- 로두 밸런싱 기능을 지원
스웜 모드 구조
매니저 노드(워커 노드 관리)와 워커 노드들로 구성 되어있다 매니저 노드는 docker swarm init으로 통해 설정 워커 노드는 docker swarm join을 통해서 하나의 클러스터가 된다
도커 스웜에서 제어 단위는 서비스(같은 이미지에서 생성된 컨테이너 집합)
도커 컴포즈
여러개의 컨테이너를 하나의 서비스로 정의 스웜 모드와 비슷하다
도커에 내장되어 있지 않고 따로 설치를 해줘야 한다
도커 컴포즈는 yml 파일을 읽어 도커의 컨테이너를 실행한다 yml파일에는 컨테이너의 설정이 되어있다
YAML 파일은 크게 버전 정의, 서비스 정의, 볼륨 정의, 네트워크 정의의 4가지 항목으로 구성
참고 우아한테크 검프의 Docker 이론편 유튜브 영상을 보고 글을 작성했습니다