[Docker] 1.도커의 기초 - 도커를 사용하는 의의
책 ‘도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문’을 기반으로 공부 한 내용을 정리
- 사용 의의
- 변화하지 않는 실행 환경으로 멱등성 확보
- 환경 차이로 인한 문제 방지
- 코드로 관리하는 인프라(Infrastructure as Code)와 불변 인프라(Immutable Infrastructure) 개념 제안
- 코드로 관리하는 인프라(Infrastructure as Code)
- 코드 기반으로 인프라를 정의
- 서버 구성과 라이브러리 및 도구 설치를 코드로 정의 후 셰프(Chef)나 앤서블(Ansible) 같은 프로비저닝 도구로 서버를 구축
- 코드 중심으로 바꿈으로써 쉽게 같은 구성의 서버 여러대 복제 가능
그러나, 코드 기반으로 인프라 구축을 관리해도 멱등성 보장을 위해 항구적 코드를 계속 작성하는 것은 효율성이 낮기 때문에 불변 인프라 개념을 도입
- 불변 인프라(Immutable Infrastructure) 개념
- 어떤 시점의 서버 상태를 저장해 복제할 수 있게 하자는 개념
- 제대로 설정된 상태의 서버를 항상 사용 할 수 있다는 장점 보유
- 코드를 통한 실행 환경 구축 및 애플리케이션 구성
- 애플리케이션 구성 관리의 용이성
- 필요한 컨테이너를 각각 실행하는 방법으로 시스템을 구성
- 도커 컨테이너 오케스트레이션 시스템
- 여러 서버에 걸쳐 있는 여러 컨테이너를 관리하는 기법
- 도커 컴포즈(Docker Compose)
- 여러 컨테이너를 사용하는 애플리케이션을 쉽게 관리하도록 해줌.
- yaml 포맷으로 작성된 설정 파일로 컨테이너를 정의하거나 컨테이너 간의 의존 관계를 정의해 시작 순서 제어 가능
version: "3" services: web: image: gihyodocker/web ports: - "3000:3000" environment: REDIS_TARGET: redis depends_on: - redis redis: image: "redis:alpine"
- 도커 스웜(Docker Swarm)
- 도커 컴포즈가 단일 서버를 넘어 여러 서버에 걸쳐 있는 여러 컨테이너를 관리할 수 있도록 한 도구
- 컨테이너 증가 혹은 감소는 물론이고 노드의 리소스를 효율적으로 활용하기 위한 컨테이너 배치 및 로드 밸런싱 기능 등 더욱 실용적인 기능 갖췄고, 롤링 업데이트(오래된 컨테이너와 새로운 컨테이너를 단계적으로 서비스에 교체 투입하는 것) 가능
- 실행 환경과 애플리케이션의 일체화로 이식성 향상
- 시스템을 구성하는 애플리케이션 및 미들웨어의 관리 용이성
- 변화하지 않는 실행 환경으로 멱등성 확보