본문 바로가기
docker & kubernetes

도커 동작 원리 | Docker&Kubernetes 학습 3

by 그갸거겨 2024. 11. 5.
728x90
반응형

도커 동작

  • OS 위에 도커 엔진이 동작 → 도커 엔진 위에서 컨테이너 동작 → 컨테이너 안에서 OS와 비슷한 것이 동작
  • 기본적으로, 리눅스에서 동작을 전제로 한다.
  • 가상 머신을 통해 리눅스를 컨테이너에 설치하여, windows나 macOS용 SW도 컨테이너 안에서 동작 가능

cf. OS( Operating System ): SW나 프로그램의 명령을 HW에 전달하는 역할

cf. 리눅스( Linux ): 서버용 OS의 일종, RedHat, CentOS, Ubuntu 등

cf. 가상 머신( Virtual Machine ): SW로 OS를 구축하는 SW, windosw에서 linux를 사용하는 등의 상황에서 사용, VirtualBox, VMware 등


도커 허브: 인터넷 상에 도커 이미지를 모아놓은 곳( https://hub.docker.com )

  • 무료 컨테이너 이미지가 모여있는 곳
  • 운영체제(비슷한 것)만 들어있는 이미지부터, 여러 SW가 포함된 것까지 다양함
  • 하지만, 누구나 이미지를 등록할 수 있기에, 안전한 이미지를 선택하는 게 중요
    1. 공식 이미지 사용: 도커에서 제공 or sw를 개발 및 관리하는 조직이나 기업에서 제공
    2. 이미지를 직접 만들어 사용
    3. 경험이 쌓이기 전까진 신중하게 이미지 선택

이미지: 컨테이너를 만드는 '빵틀' 같은 것으로, 컨테이너의 설계도 역할

  • OOP의 class라고 생각해도 될 거 같다

이미지와 컨테이너

  • 컨테이너를 생성하려면, 이미지를 만들어야 한다.
  • 이미지가 있다면, 똑같은 컨테이너 생성 가능
  • 생성한 컨테이너를 필요에 맞게 수정 후, 해당 컨테이너로 이미지를 만드는 것도 가능
    • e.g. 인터넷에서 가져온 이미지로 컨테이너 생성 → 프로젝트나 회사에서 필요에 맞게 컨테이너 수정 → 이미지 생성 →반복 작업 수 감소
  • 1개의 컨테이너에는 1개의 프로그램만!
    • 데이터 관리, 보안, 유지보수에 용이
    • 맛보기 프로그램을 고객에게 제공하는 등의 상황에선, 1개의 컨테이너에 여러 프로그램을 포함시키기도 함

컨테이너의 생애주기(수명)

  • 한 번 쓰고 버리는 일회용품 같은 것
  • 컨테이너 1개를 업데이트하면서 사용하는 게 아닌, 업데이트 된 SW를 포함한 컨테이너 사용이 올바름
  • 실제로는, 여러 컨테이너가 가동되고 있으므로, 여러 컨테이너를 하나하나 업데이트 하는 것은 비용이 큼
  • 생애주기: 컨테이너 생성 → 실행 → 종료 → 폐기 → 생성

컨테이너에서의 데이터 관리

  • 컨테이너 폐기 시, 컨테이너 내에서 편집한 데이터는 사라짐
  • 따라서, 도커가 설치된 물리적 서버(e.g PC)의 디스크를 마운트하여, 디스크에 데이터 저장( 컨테이너 폐기 전에)
    • 마운트: 디스크를 연결해 데이터를 기록할 수 있도록 한 상태
    • 도커 엔진이 고장나더라도, 데이터는 그대로 보존됨
  • 이렇게 외부( 디스크 )에 데이터를 저장하면, 다른 컨테이너와의 데이터 공유 용이( config 파일 등 )
  • 다른 관점으론, 중요 데이터가 디스크가 아닌 컨테이너 내부에 저장되지 않도록 주의 필요

도커의 장점

  • 1대의 물리 서버에, 여러 대의 서버( 컨테이너에 담긴 )를 가동시킬 수 있음
  • 컨테이너를 이용하면, 각 SW를 독립된 환경에 격리한다.
    • 다른 SW에 영향 없음
    • 업데이트 간단
  • 물리 서버의 OS에 의존하므로, 컨테이너에는 커널( OS의 핵심 )이 포함되지 않아 가볍다.
  • 이미지를 만들 수 있어, 반복 작업이 줄고, 교체와 업데이트가 쉽다.
    • 이로 인해, 환경 이동과 개발환경 구축하기 쉽다.
    • 또한, 컨테이너로 이미지 생성이 되어, 원하는 컨테이너 대량 생산 가능
  • 터미널에 명령을 직접 입력해야 한다는 것 이외에는, 다루기 쉽다.

도커의 단점

  • 리눅스용 SW만 지원하여, 유닉스나 windows 등 다른 OS용 SW를 사용하려면 가상머신을 이용해야 한다.
  • 1대의 물리 서버에 여러 컨테이너를 동작시키므로, 물리 서버에 문제가 생기면 그 위에 있는 모든 서버로 전이됨
    • 물리 서버의 이상적인 동작을 위한 대책 필수
  • 컨테이너 하나를 장기간에 걸쳐 사용 시, 도커를 사용해야 하는 합리적 이유를 찾기 어려움

도커의 주 용도

  • 팀원 모두에게 동일한 개발환경 제공
  • 격리된 컨테이너 안에서, 새로운 버전의 테스트( e.g. 알고리즘 변경, library 업데이트 및 변경 )
  • 동일한 서버가 여러 대 필요한 경우, 명령 한줄로 가능
728x90