본문 바로가기
Docker (도커 교과서)

0. Docker Intro

by programmer-ds 2024. 12. 15.

1. 도커 공부하기

도커는 컨테이너 기반의 가상화 도구이다. 요즘은 도커를 모르면 SW 개발자로써 경쟁력이 없다는 얘기가 있을 정도로 도커는 중요한 기술이다.

그래서 나도 도커를 공부하기로 마음 먹었다. 좋은 개발자가 되기 위해!

교재는 도커교과서를 참고

 

 

2. 도커 정의 (Wikipedia)

더보기

도커(Docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.

 

도커 웹 페이지의 기능을 인용하면 다음과 같다:

도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다. 이는 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증한다.

 

도커는 리눅스에서 운영체제 수준 가상화의 추상화 및 자동화 계층을 추가적으로 제공한다.도커는 cgroups와 커널 이름공간과 같은 리눅스 커널의 기능들과 OverlayFS, aufs와 같은 유니언 가능 파일 시스템의 리소스 격리 기능을 사용하며, 이를 통해 독립적인 "컨테이너"가 하나의 리눅스 인스턴스 안에서 실행할 수 있게 함으로써 가상 머신을 시작하여 유지보수해야 하는 부담을 없애준다.

..

 

대충 이런 내용이고, 도커 학습을 결심했다면 대략적인 도커가 무엇인지 안다는 가정하에 넘어감

 

3. 도커 이미지와 컨테이너

도커의 이미지와 컨테이너는 도커에서 사용하는 가장 기본적인 단위이다. 

이미지를 프로그램으로 본다면 컨테이너는 프로세스로 볼 수 있다.

이미지와 컨테이너는 1:N 관례를 가진다.

  • 이미지 (Image)
    • 이미지는 컨테이너를 생성할 때 필요한 요소
    • 컨테이너의 목적에 맞는 바이너리와 의존성이 설치되어 있음
    • 여러 개의 계층으로 된 바이너리 파일로 존재
  • 컨테이너 (Container)
    • 호스트와 다른 컨테이너로부터 격리된 시스템 자원과 네트워크를 사용하는 프로세스
    • 이미지는 읽기 전용으로 사용하여 변경사항은 컨테이너 계층에 저장 (컨테이너에서 어떤 작업을 해도 이미지는 영향 받지 않음)

 

4. 도커 아키텍쳐

Docker 공식 홈페이지에 있는 Docker의 Architecture

  • Docker daemon
    • Docker Daemon(dockerd)은 도커 API 요청을 받고 이미지, 컨테이너, 네트워크, 볼륨과 같은 Docker 객체를 관리
    • Daemon은 다른 Daemon과 통신하여 Docker 서비스를 관리
  • Docker client
    • Docker Client는 Docker 사용자가 Docker와 상호작용할 수 있는 기능 제공
    • Docker 실행과 같은 명령어를 사용할 때, Docker Client는 이러한 명령어를 Docker Daemon으로 보냄
    • Docker 명령어는 Docker API를 사용
    • Docker Client는 여러 Daemon과 통신할 수 있음
  • Docker registries
    • 도커 레지스트리는 도커 이미지를 저장
    • 도커 허브는 누구나 사용할 수 있는 공용 레지스트리이며, 도커는 기본적으로 도커 허브에서 이미지를 찾음
    • 개인 레지스트리를 만들 수도 있음
    • Docker의 pull이나 run 명령 시, 도커는 구성된 레지스트리에서 필요한 이미지를 레지스트리에서 가져옴
    • Docker Push 명령을 사용하면 도커는 이미지를 구성된 레지스트리로 푸시함
  • Docker Desktop
    • Docker Desktop은 Mac, Windows, Linux 환경에 설치하기 쉬운 애플리케이션으로, 도커 데몬, 도커 클라이언트, 도커 컴포즈, 도커 콘텐츠 트러스트, 쿠버네티스 등이 포함

 

 

5. 도커의 장점

1. 일관성있는 개발 환경

  • 개발, 테스트, 운영 환경 간에 동일한 컨테이너 이미지를 사용하므로 환경 불일치를 제거
  • "따라서 내 환경에서는 잘 되는데 그 환경에선 왜 안 돼? 뭐가 다르지?"와 같은 문제를 방지

2. 신속한 개발 및 배포

  • CI/CD 파이프라인에 쉽게 통합되어, 코드 변경 사항을 신속하게 배포할 수 있음
  • 즉 최신 상태의 소프트웨어를 유지하기 쉽다

3. 리소스 효율성

  • 가상머신(VM)보다 가볍고, 필요한 리소스만 사용
  • 동일한 서버에서 더 많은 애플리케이션을 실행할 수 있음 

4. 모듈화 및 재사용

  • 각 서비스가 독립적으로 컨테이너화되므로 마이크로서비스 아키텍처에 적합

5. 복제 및 확장성

  • 동일한 컨테이너 이미지를 사용하여 여러 서버에서 쉽게 확장이 가능

6. 오픈소스 및 생태계 지원

  • Docker는 오픈소스이며, 커뮤니티와 다양한 도구(Compose, Swarm, Kubernetes 등)로 지원됨

 

6. 도커의 단점

1. 학습..

  • 도커 및 쿠버네티스까지 학습하는 것이 쉽지 않음..ㅠ.ㅠ

2. 운영 복잡성 증가

  • 컨테이너 오케스트레이션(쿠버네티스 등)이나 네트워크 설정 등으로 관리 복잡성이 증가한다

3. 성능 오버헤드

  • VM 보다는 성능 손실이 적긴 하지만 그래도 여전히 일부 성능 손실이 발생할 수 있음
  • 그래서 호스트 OS에서 직접 실행하는 네이티브 애플리케이션에 비해 약간의 성능 차이가 발생할 수 있음

4. 운영체제 의존성

  • 도커는 리눅스 기반으로 만들어진 것으로 리눅스용 소프트웨어만 지원하고, 윈도우나 맥에 최적화 되어있지 않음
  • 그래서 윈도우나 맥에서는 Docker의 성능이 리눅스보다 약간 떨어질 수 있음

5. 이미지 관리

  • 이미지 크기가 커질수록 빌드 및 배포 속도가 느려질 수 있음

6. 컨테이너 하나만 사용하면 장점이 없음

  • 도커는 컨테이너를 여러 개 사용하는 형태를 가정하고 그 형태에서 장점을 누릴 수 있도록 만들어짐
  • 컨테이너가 하나면 단순 오버헤드일 뿐..

 

'Docker (도커 교과서)' 카테고리의 다른 글

3. 도커 이미지 만들기  (0) 2024.12.15
2. 도커의 기본적인 사용법  (1) 2024.12.15
1. Docker 설치하기  (0) 2024.12.15