Docker 에 대해 알아보기

twonezero·2024년 8월 12일
0

Docker

목록 보기
1/1
post-thumbnail

가상머신

Docker 라는 개념이 나오기 전에 가상머신(VM) 이 개발 시 서로 다른 환경에서 App 을 실행하기 위한 Solution으로 사용되어 왔다. VM 은 Hypervisor 라는 소프트웨어를 통해 물리적 하드웨어 위에 여러 운영체제를 구동할 수 있게 해준다. 각 VM 은 완전한 운영체제를 포함하며, 해당 운영체제 위에 App이 설치되어 실행된다.

가상 머신의 문제점

  • 무거운 리소스 소비: 각 VM은 독립적인 운영 체제를 포함하기 때문에 상당한 양의 메모리와 디스크 공간을 소비한다. 이는 여러 VM을 실행할 때 리소스 낭비로 이어진다.

  • 느린 속도: VM은 하드웨어 리소스에 직접 접근하지 않고 하이퍼바이저를 거쳐야 하므로, 애플리케이션 실행 속도가 느려질 수 있다. 특히, 하드웨어 성능이 중요시되는 애플리케이션에서는 이 속도 저하가 큰 문제가 될 수 있다.

  • 복잡한 관리: VM 환경은 운영 체제의 설치, 설정, 업데이트 등이 필요한 복잡한 관리 작업을 수반한다. 이는 개발자와 운영팀 모두에게 추가적인 부담을 준다.

위와 같은 문제점과, 기술의 발전( 기술 스택의 다양성, 다양한 도메인 등) 을 어느 정도 해소하기 위해 Docker 의 필요성이 대두됐다.

Docker

  • 어플리케이션을 컨테이너라는 가볍고 이식성 있는 패키지로 실행할 수 있다
  • Docker Image는 App 을 실행하는데 필요한 모든 것(코드, 런타임, 시스템 도구, 시스템 라이브러리 등)을 포함한다.

주요 특징 및 장점

  • 컨테이너화 : App 에 필요한 모든 것을 하나로 묶어 실행
  • 경량 : 운영 체제의 커널을 공유하므로, 기존의 가상 머신보다 훨씬 가볍고 빠르게 실행됨
  • 이식성 : 컨테이너화를 기반으로 어떤 환경에서든 동일하게 실행할 수 있음
  • 확장성 : 여러 컨테이너를 독립적이고 확장성있게 관리 가능

용어 정리

Docker 를 시작하면 많은 내용을 새로운 용어들과 학습해야 하므로 우선 용어를 정리해보자.

Image

  • 이미지는 App과 그 실행에 필요한 모든 것을 포함하는 읽기 전용 템플릿. 코드, 런타임, 라이브러리, 환경 변수, 구성 파일 등이 포함.
  • 컨테이너를 생성하기 위한 청사진 역할

Container

  • 컨테이너는 Docker 이미지를 실행한 상태
    • Image : 정적인 템플릿
    • Container : 실제로 애플리케이션이 실행되는 동적인 환경
  • 격리된 공간에서 애플리케이션을 실행하며 필요한 모든 의존성을 포함
  • 하나의 시스템에서 여러 개의 컨테이너를 독립적 실행

Dockerfile

  • Docker 이미지를 생성하기 위한 스크립트
    • 이미지를 빌드하는 데 필요한 명령어 파일.
  • 이미지 생성 과정을 자동화하고 일관되게 생성

Docker Hub

  • Docker Hub는 Docker 이미지를 공유하고 저장하는 중앙 저장소
  • 사용자는 Docker Hub에서 다양한 공개 이미지를 다운로드(PULL)하거나 자신만의 이미지를 업로드(PUSH) 할 수 있다.

VOLUME

  • 컨테이너의 데이터를 지속적으로 저장할 수 있는 메커니즘
    • 컨테이너가 삭제되더라도 볼륨에 저장된 데이터는 유지
  • Volume을 사용하면 데이터를 컨테이너와 독립적으로 관리 가능

Network

  • 컨테이너 간의 통신을 관리하는 방식
  • 여러 가지 네트워크 드라이버를 지원을 통해 다양한 네트워크 설정 가능
  • 기본적으로 모든 컨테이너는 브리지 네트워크를 통해 통신

Docker Network 종류

Bridge Network (브리지 네트워크)

  • 기본적으로 Docker가 컨테이너를 실행할 때 사용하는 네트워크
  • 일반적으로 단일 호스트에서 여러 컨테이너를 연결할 때 사용
docker network create my-bridge-network
docker run -d --name container1 --network my-bridge-network nginx
docker run -d --name container2 --network my-bridge-network nginx

Host Network (호스트 네트워크)

  • 컨테이너가 호스트의 네트워크 스택을 직접 사용
  • 네트워크 격리가 없기 때문에 성능상 이점이 있지만, 보안 및 네트워크 충돌 위험이 있다.
  • 일반적으로 성능이 중요한 애플리케이션에 사용됨.
docker run -d --network host nginx

Overlay Network (오버레이 네트워크)

  • 여러 Docker 호스트에 걸쳐 있는 컨테이너를 연결할 때 사용
  • Swarm 모드나 Kubernetes 같은 오케스트레이션 도구와 함께 사용됨.
    • Swarm : Docker 컨테이너의 오케스트레이션과 클러스터링을 지원하여 여러 호스트에서 컨테이너를 관리하고 배포할 수 있는 기능
  • 데이터 센터 또는 클라우드 환경에서 분산 시스템을 구축할 때 유용함.

이번 글에서는 기존 가상머신과 비교하여 Docker 의 필요성과 장점에 대해 설명하고 용어에 대해 정리했다. 다음 글에서는 Docker 를 Spring Boot 와 함께 사용하는 것을 정리해보자.

profile
소소한 행복을 즐기는 백엔드 개발자입니다😉

0개의 댓글