도커란?
- 컨테이너 기반의 가상화 플랫폼
- 컨테이너 : 호스트OS 격리된 공간에서 프로세스가 동작
- 가상화 : 하나의 물리적 리소스 위에서 여러 OS를 동시에 실행할 수 있도록 함
- 리눅스 컨테이너에 여러 기능을 추가해 애플리케이션을 컨테이너로 좀 더 쉽게 사용할 수 있게 만들어진 Go언어 오픈소스
- Docker Engine : 컨테이너를 생성하고 관리하는 주체 (도커의 주 프로젝트)
- 관련 프로젝트 (도커 엔진을 효율적으로 사용하기 위한 것)
- Docker Compse, Private Registry, Docker Hub, Docker for Desktop, ....
- 관련 프로젝트 (도커 엔진을 효율적으로 사용하기 위한 것)
가상 머신과 도커 컨테이너
- 기존의 가상화 기술
- 호스트 OS에서 여러 운영체제(가상머신)를 생성해 사용
- Guest OS : 하이퍼바이저에 의해 생성되고 관리되는 OS, 각각의 GuestOS는 독립된 공간과 시스템 자원을 할당받아 사용
- 하이퍼바이저 : 호스트 OS에서 여러 OS를 동시에 실행하기 위한 논리적 플랫폼
- 완벽한 OS를 생성할 수 있지만, 일반 호스트에 비해 성능이 떨어지고 용량이 큰 가상 머신 이미지를 배포하는데 시간이 오래 걸림
- 호스트 OS에서 여러 운영체제(가상머신)를 생성해 사용
- 도커 컨테이너
- 가상화된 공간을 생성하기 위해 리눅스의 자체 기능인 chroot, namespace, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없다
- 컨테이너에 필요한 커널은 호스트의 커널과 공유해서 사용
- 컨테이너 안에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 용량이 대폭 줄어든다.
- 이미지 생성/배포 시간이 가상 머신에 비해 빠르며 가상화된 공간을 사용할 때 성능 손실이 거의 없다
도커를 시작해야 하는 이유
- 개발과 배포가 편해진다
- 컨테이너 내부 작업이 호스트 OS에 영향을 끼치지 않는다
- 컨테이너를 '도커 이미지'라는 일종의 패키지로 만들어 운영 서버에 전달하면 개발 서버와 똑같은 환경을 복제할 수 있다.
- 도커는 이미지 내용을 레이어 단위로 구성하며, 중복되는 레이어를 재사용할 수 있어서 애플리케이션 배포 속도가 빨라진다
- 여러 애플리케이션의 독립성과 확장성이 높아진다
- 마이크로 서비스
- 여러 모듈을 독립된 형태로 구성하기 때문에 언어에 종속되지 않고 변화에 빠르게 대응 가능하고 관리가 쉬워짐
- ex) 웹 서비스를 DB 컨테이너/웹서버 컨테이너로 분리하면 웹 서비스에 부하 발생 시 웹 서버 컨테이너만을 동적으로 늘려서 부하를 분산할 수 있다. 그리고 웹 서버와 DB의 이미지 버전을 독립적으로 관리하기 때문에 유지보수 용이하다
- 마이크로 서비스
도커 이미지와 컨테이너
- 도커 엔진에서 사용하는 기본 단위는 이미지와 컨테이너이며, 이 두 가지가 도커 엔진의 핵심이다
- 도커 이미지
- 컨테이너를 생성할 때 필요한 요소
- 여러 개의 계층으로 된 바이너리 파일로 존재하고, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용된다
- 이미지 이름 구성 : {저장소 이름}/{이미지 이름}:{태그}
- 저장소
- 이미지가 저장된 장소
- 명시되지 않은 경우 Docker Hub의 공식 이미지를 뜻한다
- 생략하는 경우도 있음
- 이미지 이름
- 해당 이미지가 어떤 역할을 하는지
- 반드시 설정해야 함
- 태그
- 이미지의 버전 관리, Revision관리
- 생략하면 도커 엔진은 이미지의 태그를 latest로 인식
- 저장소
- 도커 컨테이너
- 도커 이미지의 환경 위에서 실행된 특별한 격리된 프로세스
- 생성된 컨테이너는 독립된 파일시스템을 제공받으며 호스트와 분리되어 있다
- 이미지를 읽기 전용으로 사용하되 이미지에서 변경된 사항만 컨테이너 계층에 저장하므로 컨테이너에서 무엇을 하든 이미지는 영향을 받지 않는다
'docker' 카테고리의 다른 글
Docker-Compose란? (0) | 2022.01.08 |
---|