[도커] 기본 개념

백현균·2023년 6월 3일

도커 등장 이전 서버관리

문서화 관리

  • 각각의 개발환경에 대한 구축 및 운영방법에 대한 내용 정리하여 관리
  • 시간이 지나면서 문서의 정확성, 업데이트 이력관리가 어려움

자동화 관리 도구

  • puppet, Chef,Ansible과 같은 설정 관리 도구를 통해 자동화 관리
  • 사용자가 서버에 직접 명령어를 내리지 않고, 관리 도구가 명령을 대신하는 방식
  • 관리자는 설정파일을 통해 도구 사용에 필요한 설정을 미리 정의
  • 문제점
    • 관리 도구에 대한 학습 필요
    • 설정이 복잡할수록, 관리도구의 사용 또한 복잡해짐
    • 예시로 어플리케이션 간 버전이 다를 경우 별도의 경로 설정이 필요함

가상머신

  • 서버 하나에 개발환경 별 가상머신을 여러개 띄워 사용
  • 하나의 APP 사용만을 위한 가상머신일 경우 충돌 위험이 사라짐
    • 하나의 가상머신에 여러개의 APP을 사용할 경우 충돌 위험이 생김
  • 클라우드환경과 맞지 않는 이슈 발생
    • 특정 벤더에 종속
      • VirtualBox, VMWARE 등
    • 멀티 클라우드를 사용하게 될 경우 사용이 어려움
  • 속도가 느림

도커

  • 컨테이너를 기반으로한 오픈소스 가상화 플랫폼
  • 인프라에서 어플리케이션을 분리하여 컨테이너로 추상화하여 소프트웨어를 빠르게 제공 할 수 있음
  • 단일 서버환경에서 여러 컨테이너를 동시에 실행 할 수 있음
  • 도커는 컨테이너의 라이프 사이클을 관리
    • 컨테이너 create -> destory까지를 라이프사이클이라고 표현

특징

  • 확장성
    • 다른 서버에서 만든 컨테이너를 실행할 수 있음
    • 특정 서비스에 종속적이지 않음
    • 운영 및 개발서버를 쉽게 만들 수 있음
  • 표준성
    • 개발 언어가 달라도 배포방식이나 과정은 항상 동일함
  • 이미지
    • 이미지란 컨테이너 생성 및 실행을 위한 압축 파일
      • 즉, 배포할 어플리케이션을 이미지로 만들고, 이를 도커에서 불러와 컨테이너를 생성하여 실행하는 형태
    • 도커파일 스크립트를 이용하여 이미지를 생성
    • 빌드서버에서 이미지를 생성하면 이미지저장소에 저장하고 운영서버에서 이미지를 불러와 컨테이너를 실행
  • 설정관리
    - 설정은 환경변수형태로 관리
    • MYSQL패스워드와 같이 컨테이너를 띄울 때 환경변수를 같이 지정
    • 하나의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 해야함
  • 자원관리
    • 컨테이너 삭제 후 새로만들경우 데이터가 초기화됨
    • 업로드파일을 S3와 같은 별도의 저장소가 필요
    • 세션이나 캐시를 memcached 혹은 redis로 관리해야함

컨테이너

  • 어플리케이션 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록하는 기술
  • 다른 실행환경과의 간섭을 막고 실행의 독립성을 확보해주는 운영체계 수준의 격리 기술

컨테이너 vs 가상머신

  • 가상머신
    • 확장성이 떨어짐
      • 독립적인 플랫폼이 증가할 때 마다 불필요한 OS 생성 작업을 해야함
      • HyperVisor: 컴퓨터가 가지고 있는 인프라 리소스를 VM별로 배분하는 역할
    • 메모리와 같은 리소스 자원 관리가 유동적으로 관리되는 것이 아니라 VM생성 시 정해지기 때문에 비효율적
  • 컨테이너
    • 하나의 OS에 마치 각각의 독립적인 프로그램처럼 관리되고 실행
    • 불필요한 OS생성 작업 및 인프라를 독립적으로 나눌 필요가 없어, 확장성이 좋고 빠름

컨테이너의 특징

  • 가상 머신과 비교하여 컨테이너 생성이 쉽고 리소스(CPU, Memory) 사용이 효율적
  • 컨테이너 이미지를 이용한 배포와 롤백이 간단
  • 언어나 프레임워크에 상관 없이 어플리케이션을 동일한 방식으로 관리
  • 개발, 테스팅, 운영 환경은 물론 로컬 PC, 클라우드까지 거의 동일한 환경을 구축
  • 특정 클라우드 벤더에 종속적이지 않음

컨테이너화

  • 기존 복잡하게 설치해서 사용하던 것들을 도커에 컨테이너를 올리기하면 사용할 수 있게됨
    • 예시) MySql, Wordpress, Redis 등
  • 컨테이너 사용에 적응될 경우 모든 것을 컨테이너화 하고 싶어짐

도커로 인한 확립된 개발 프로세스

  • Code: 개발자가 코드를 작성
  • Build: 작성한 코드를 바탕으로 도커 이미지 생성
  • Ship : 생성된 도커이미지를 이미지 저장소에 저장
    • Docker Hub, AWS ECR, GCP GCR 등)
  • Run : 이미지 저장소에서 받은 이미지를 컨테이너로 실행

도커 컨테이너 사용의 증가

  • 언어, 프레임워크 상관없이 생성된 도커 이미지만 있으면 동일하게 동작 가능
  • 모든 어플리케이션을 컨테이너화하기 시작
  • 점차 관리해야될 컨테이너 증가
  • 관리해야될 포인트가 지속적으로 늘어남

아키텍쳐

참고문서
컨테이너 오케스트라
도커 및 컨테이너 정리

0개의 댓글