도커(Docker)
컨테이너형 가상화 기술을 구현하기 위한 상주 애플리케이션 dockerd와
이 dockerd를 조작하기 위한 명령행 도구인 CLI로 구성된 프로덕트.
배포에 특화된 기술로 애플리케이션을 개발하고 운영하는 것을 컨테이너 단위로 할 수 있도록 돕습니다.
(ex. 애플리케이션 실행을 위해서 필요한 환경 구축에 큰 리소스를 들이지 않아도 됩니다.
도커만 설치되어있다면 구성파일(Dockerfile..)과 명령어로 다른 곳과 동일한 가상환경을 구축해낼 수 있기 때문)
도커의 사용 의의
도커를 사용하면 구축 환경 차이로 인한 문제를 미리 방지할 수 있습니다.
인프라를 새로 구축하거나 복제할 때 미들웨어가 다르다거나, 라이브러리 버전이 다르다거나 하여 생길 수 있는 문제를
도커를 통해 동일한 환경을 구축할 수 있게 됨으로써 방지할 수 있습니다.
이는 코드로 관리하는 인프라(Infrastructure as Code)와 불변 인프라(Immutable Infrastructure)개념이 도입되어있기 때문입니다.
"코드로 관리하는 인프라"란 어떻게 서버를 구성할지, 어떤 라이브러리를 사용할지 등을 모두 코드 기반으로 작성하는 것입니다.
따라서 관리나 변경을 코드 몇 줄로 더 쉽게 할 수 있습니다.
"불변 인프라"는 어떤 시점의 서버 상태(이미지)를 저장하여 복제 가능하도록 하는 개념입니다.
인프라를 변경하고 싶을 때 기존의 인프라를 건드리는 것이 아니라,
새로운 서버에 인프라를 원하는대로 구축하고 이것을 이미지로 저장 후 복제하여 변경함으로써 불변을 보장합니다.
또한 애플리케이션과 인프라를 함께 묶어 구축함으로써,
환경 차이에 대한 문제로 애플리케이션이 제대로 동작하지 않는 것을 미리 방지하고
도커가 설치된 곳이라면 어디든지 구축할 수 있어 이식성이 높다는 장점을 가지고 있습니다.
도커의 컨테이너형 가상화 기술
이러한 도커의 역할을 할 수 있도록 하는 배경 기술이 바로 "컨테이너형 가상화 기술"입니다.
호스트 운영체제형 가상화에서는 Host OS와 Guest OS를 이어주는 가상화 소프트웨어가 필요한데,
컨테이너형 가상화는 이러한 가상화 소프트웨어 없이도 Host OS의 리소스를 격리하여 가상 운영체제를 만들어 낼 수 있습니다.
(대신 Host OS의 커널을 공유하게되어 완전히 분리되어있는 것은 아닙니다.)
또한 호스트 운영체제형 가상화에 비해 컨테이너형 가상화는 application 단에서 가상화된 컨테이너가 돌아가기때문에,
시작과 종료가 빠르고 필요한 리소스도 더 적습니다.
Dockerfile
Dockerfile이나 애플리케이션 실행 파일을 통해서 도커의 컨테이너 원형이 되는 이미지를 만들 수 있으며,
이미지 생성 -> 빌드 -> 실행 단계를 거쳐 도커 컨테이너를 실행할 수 있습니다.
컨테이너 오케스트레이션(container orchestration)
운영에서는 보통 하나의 애플리케이션이 아닌 여러 개의 애플리케이션과 미들웨어로 시스템이 구성됩니다.
따라서 이러한 복잡한 시스템과 도커 컨테이너들을 정확하게 동작하고 관리하기 위한 도구가 필요한데,
이것이 도커 컴포즈(Docker Compose)입니다.
도커 컴포즈를 이용하면 yaml로 코드 작성된 설정파일 내에 있는 컨테이너 정보, 컨테이너간의 의존 관계 등의 정보를 기반으로 컨테이너 시작 순서와 시스템을 구성할 수 있습니다.
다만 대규모 트래픽과 같은 상황에는 하나의 서버가 아닌 여러 서버에 걸쳐 컨테이너들을 관리해야 하는데,
이를 위한 기법을 컨네이터 오케스트레이션이라고 합니다.
이를 위해서는 도커 스웜(Docker Swarm)이나 쿠버네티스(Kubernetes)같은 오케스트레이션 도구가 필요하며,
사실상 현재는 쿠버네티스를 표준으로 사용하고 있습니다.
이러한 도구를 통해 컨테이너를 서버에 효율적으로 배치한다거나, 배포 시의 롤링 업데이트, 로드 밸런싱 등의 기능을 사용하여 여러 서버에 걸쳐져있는 컨테이너를 관리할 수 있습니다.
도커 이미지와 컨테이너의 관계
도커 이미지는 도커 컨테이너를 구성하는 파일 시스템 + 실행할 애플리케이션 설정으로 이루어져있으며,
컨테이너를 생성하기 위한 내용을 담은 템플릿이라고 할 수 있습니다.
도커 컨테이너는 이러한 정보를 기반으로 파일 시스템과 애플리케이션이 구체화되어 실행되는 상태를 의미합니다.
도커 컨테이너 하나가 포함하는 시스템의 범위는 하나의 관심사, 즉 하나의 역할과 문제 영역으로 생각하는 것이 좋습니다.
도커 이미지는 내가 직접 개발할 수도 있지만, Docker Hub와 같은 이미지 저장소에서 다운받아 사용할 수도 있습니다.
만약 내가 만들고자 하는 도커 컨테이너에서 필요한 운영체제나 미들웨어 등이 있다면,
저장소에서 알맞은 이미지를 찾아 pull하여 사용하면 됩니다.
'클라우드' 카테고리의 다른 글
[쿠버네티스] 쿠버네티스에서 yaml config 파일 작성하는 방법과 pod 만들어보기 (1) | 2023.11.23 |
---|---|
[쿠버네티스] 쿠버네티스의 기본 구성요소 (1) | 2023.11.20 |
클라우드란? 클라우드 개념 쉽고 간단하게 이해하기 (0) | 2023.11.10 |
개발자를 위한 도커(Docker)의 기본 개념 (2) - 쿠버네티스편 (0) | 2022.09.25 |