목차
Docker란?
- Docker는 애플리케이션과 그 종속성을 하나의 패키지로 묶어 '컨테이너'로 배포할 수 있게 돕는 오픈소스 플랫폼입니다.
- 컨테이너화(Containerization): 애플리케이션과 필요한 라이브러리, 설정 파일 등을 하나의 컨테이너에 포함시켜 배포합니다.
- 이미지 관리: Docker Hub와 같은 레지스트리를 통해 다양한 이미지를 관리하고 배포할 수 있습니다.
- 환경 일관성: 다양한 환경에서 동일하게 작동하는 애플리케이션을 보장합니다.
Docker와 컨테이너의 관계
Docker
- 컨테이너를 생성, 관리, 실행하는 플랫폼입니다.
- Docker CLI와 Docker Daemon을 통해 컨테이너를 관리합니다.
컨테이너
- 애플리케이션과 그 종속성을 포함한 독립적인 실행 환경입니다.
- 경량화된 가상화 기술을 사용하여 자원을 효율적으로 관리합니다.
- 독립적인 파일 시스템, 네트워크, 프로세스 공간을 가집니다.
관계
- Docker는 컨테이너를 생성하고 관리하는 도구입니다.
- 컨테이너는 Docker를 통해 생성된 애플리케이션 실행 환경입니다.
- Docker 이미지는 컨테이너의 실행 템플릿으로 사용됩니다.
컨테이너와 가상 머신의 차이점
컨테이너 (Container)
- 운영체제 수준의 가상화 기술: 컨테이너는 호스트 운영체제의 커널을 공유하면서 애플리케이션과 그 종속성을 격리된 환경에서 실행합니다.
- 커널 공유: 여러 컨테이너가 동일한 커널을 사용하므로, 별도의 운영체제 인스턴스를 필요로 하지 않습니다.
- 가벼움: 컨테이너는 메가바이트(MB) 단위로 크기가 작아, 시스템 리소스를 적게 사용합니다.
- 빠른 실행 및 종료: 컨테이너는 시작과 종료가 매우 빠르며, 개발, 테스트, 배포 과정에서 빠른 반복을 가능하게 합니다.
- 효율적인 리소스 사용: 여러 애플리케이션을 동시에 실행할 수 있습니다.
가상 머신 (Virtual Machine, VM)
- 하드웨어 수준의 가상화 기술: 각 VM은 독립적인 운영체제와 애플리케이션을 실행할 수 있는 환경을 제공합니다.
- 자체 운영체제: 각 VM은 자체 운영체제를 포함하고 있으며, 하드웨어를 가상화하여 독립적으로 동작합니다.
- 하이퍼바이저 관리: 하이퍼바이저는 물리적 하드웨어 위에서 여러 VM을 관리합니다.
- 더 많은 리소스 소비: 각 VM은 자체 운영체제와 전체 애플리케이션 스택을 포함하므로, 리소스를 많이 소비합니다.
- 느린 부팅 시간: VM은 자체 운영체제를 부팅해야 하므로, 부팅 시간이 길어질 수 있습니다.
클라우드에서 컨테이너가 VM을 제치고 표준이 된 이유
- 경량성: 애플리케이션 코드, 런타임, 라이브러리, 환경 변수를 포함한 작은 패키지로 제공됩니다.
- 빠른 실행 및 종료: 거의 즉각적으로 애플리케이션을 실행 및 종료할 수 있습니다.
- 효율적인 리소스 사용: 시스템 리소스를 효율적으로 사용하여 여러 애플리케이션을 동시에 실행할 수 있습니다.
- 운영체제 커널 공유: 별도의 운영체제 인스턴스가 필요 없습니다.
- 이식성과 확장성: 다양한 환경에서 일관되게 동작하며, 클라우드 환경에서 쉽게 확장 및 이동이 가능합니다.
- 비용 절감: 경량 구조와 효율적인 리소스 사용으로 운영 비용을 절감할 수 있습니다.
- 자동화 및 관리: DevOps와 CI/CD 파이프라인에서 효율적으로 배포 및 관리할 수 있습니다.
- 개발자 생산성 향상: 빠른 개발, 테스트, 배포 주기를 지원합니다.
Docker의 주요 개념
이미지 (Image)
- 컨테이너 실행에 필요한 파일 시스템과 애플리케이션의 상태를 캡슐화한 읽기 전용 템플릿입니다.
- 구성: 레이어 기반으로 구성되어 있어 효율적인 저장 및 배포가 가능합니다.
- 저장 및 배포: 이미지는 Docker Hub, AWS ECR, GitHub Packages 등의 레지스트리에서 가져와 사용할 수 있습니다.
컨테이너 (Container)
- 독립적인 실행 환경을 제공합니다.
- 구성 및 실행: 이미지의 읽기 전용 레이어 위에 쓰기 가능한 레이어를 추가하여 실행됩니다.
- 격리 및 자원 관리: 애플리케이션의 격리된 환경을 제공하며, 독립적인 네트워크, 저장소, 프로세스 공간을 가집니다.
- 특징: 빠른 시작 및 종료 시간으로 효율적인 자원 활용이 가능합니다.
레지스트리 (Registry)
- Docker 이미지를 저장하고 배포하는 저장소입니다.
- Docker Hub: 가장 널리 사용되는 공개 레지스트리입니다.
- AWS ECR: Amazon Web Services에서 제공하는 관리형 Docker 이미지 레지스트리 서비스입니다.
- GitHub Packages: GitHub에서 제공하는 패키지 레지스트리 서비스입니다.
- 개인 레지스트리: 기업 내부에서 사용하는 사설 레지스트리입니다.
Docker의 대체제
containerd
- 경량화된 컨테이너 실행 및 관리 도구입니다.
- Kubernetes에서 기본 런타임으로 많이 사용됩니다.
CRI-O
- Kubernetes와의 원활한 통합을 위해 개발된 컨테이너 런타임입니다.
- 오픈 컨테이너 이니셔티브(OCI) 표준을 따릅니다.
Docker 설치
Docker Desktop
- 로컬 개발 환경에서 Docker를 쉽게 설치하고 사용할 수 있습니다.
- GUI 기능을 제공합니다.
- Docker Engine과 다양한 도구를 포함합니다.
Docker Engine
- 컨테이너 생성, 관리, 실행을 담당합니다.
- 모든 운영체제에서 작동하지만 주로 Linux에서 사용됩니다.
튜링의 사과에서 들은 도커 입문 특강에 있는 자료를 기반으로 작성된 도커 개념이다.
실습은 추후에, 따로 실습을 진행한 뒤에 정리해보도록 하겠다.
Docker란?
- Docker는 애플리케이션과 그 종속성을 하나의 패키지로 묶어 '컨테이너'로 배포할 수 있게 돕는 오픈소스 플랫폼입니다.
- 컨테이너화(Containerization): 애플리케이션과 필요한 라이브러리, 설정 파일 등을 하나의 컨테이너에 포함시켜 배포합니다.
- 이미지 관리: Docker Hub와 같은 레지스트리를 통해 다양한 이미지를 관리하고 배포할 수 있습니다.
- 환경 일관성: 다양한 환경에서 동일하게 작동하는 애플리케이션을 보장합니다.
Docker와 컨테이너의 관계
Docker
- 컨테이너를 생성, 관리, 실행하는 플랫폼입니다.
- Docker CLI와 Docker Daemon을 통해 컨테이너를 관리합니다.
컨테이너
- 애플리케이션과 그 종속성을 포함한 독립적인 실행 환경입니다.
- 경량화된 가상화 기술을 사용하여 자원을 효율적으로 관리합니다.
- 독립적인 파일 시스템, 네트워크, 프로세스 공간을 가집니다.
관계
- Docker는 컨테이너를 생성하고 관리하는 도구입니다.
- 컨테이너는 Docker를 통해 생성된 애플리케이션 실행 환경입니다.
- Docker 이미지는 컨테이너의 실행 템플릿으로 사용됩니다.
컨테이너와 가상 머신의 차이점
컨테이너 (Container)
- 운영체제 수준의 가상화 기술: 컨테이너는 호스트 운영체제의 커널을 공유하면서 애플리케이션과 그 종속성을 격리된 환경에서 실행합니다.
- 커널 공유: 여러 컨테이너가 동일한 커널을 사용하므로, 별도의 운영체제 인스턴스를 필요로 하지 않습니다.
- 가벼움: 컨테이너는 메가바이트(MB) 단위로 크기가 작아, 시스템 리소스를 적게 사용합니다.
- 빠른 실행 및 종료: 컨테이너는 시작과 종료가 매우 빠르며, 개발, 테스트, 배포 과정에서 빠른 반복을 가능하게 합니다.
- 효율적인 리소스 사용: 여러 애플리케이션을 동시에 실행할 수 있습니다.
가상 머신 (Virtual Machine, VM)
- 하드웨어 수준의 가상화 기술: 각 VM은 독립적인 운영체제와 애플리케이션을 실행할 수 있는 환경을 제공합니다.
- 자체 운영체제: 각 VM은 자체 운영체제를 포함하고 있으며, 하드웨어를 가상화하여 독립적으로 동작합니다.
- 하이퍼바이저 관리: 하이퍼바이저는 물리적 하드웨어 위에서 여러 VM을 관리합니다.
- 더 많은 리소스 소비: 각 VM은 자체 운영체제와 전체 애플리케이션 스택을 포함하므로, 리소스를 많이 소비합니다.
- 느린 부팅 시간: VM은 자체 운영체제를 부팅해야 하므로, 부팅 시간이 길어질 수 있습니다.
클라우드에서 컨테이너가 VM을 제치고 표준이 된 이유
- 경량성: 애플리케이션 코드, 런타임, 라이브러리, 환경 변수를 포함한 작은 패키지로 제공됩니다.
- 빠른 실행 및 종료: 거의 즉각적으로 애플리케이션을 실행 및 종료할 수 있습니다.
- 효율적인 리소스 사용: 시스템 리소스를 효율적으로 사용하여 여러 애플리케이션을 동시에 실행할 수 있습니다.
- 운영체제 커널 공유: 별도의 운영체제 인스턴스가 필요 없습니다.
- 이식성과 확장성: 다양한 환경에서 일관되게 동작하며, 클라우드 환경에서 쉽게 확장 및 이동이 가능합니다.
- 비용 절감: 경량 구조와 효율적인 리소스 사용으로 운영 비용을 절감할 수 있습니다.
- 자동화 및 관리: DevOps와 CI/CD 파이프라인에서 효율적으로 배포 및 관리할 수 있습니다.
- 개발자 생산성 향상: 빠른 개발, 테스트, 배포 주기를 지원합니다.
Docker의 주요 개념
이미지 (Image)
- 컨테이너 실행에 필요한 파일 시스템과 애플리케이션의 상태를 캡슐화한 읽기 전용 템플릿입니다.
- 구성: 레이어 기반으로 구성되어 있어 효율적인 저장 및 배포가 가능합니다.
- 저장 및 배포: 이미지는 Docker Hub, AWS ECR, GitHub Packages 등의 레지스트리에서 가져와 사용할 수 있습니다.
컨테이너 (Container)
- 독립적인 실행 환경을 제공합니다.
- 구성 및 실행: 이미지의 읽기 전용 레이어 위에 쓰기 가능한 레이어를 추가하여 실행됩니다.
- 격리 및 자원 관리: 애플리케이션의 격리된 환경을 제공하며, 독립적인 네트워크, 저장소, 프로세스 공간을 가집니다.
- 특징: 빠른 시작 및 종료 시간으로 효율적인 자원 활용이 가능합니다.
레지스트리 (Registry)
- Docker 이미지를 저장하고 배포하는 저장소입니다.
- Docker Hub: 가장 널리 사용되는 공개 레지스트리입니다.
- AWS ECR: Amazon Web Services에서 제공하는 관리형 Docker 이미지 레지스트리 서비스입니다.
- GitHub Packages: GitHub에서 제공하는 패키지 레지스트리 서비스입니다.
- 개인 레지스트리: 기업 내부에서 사용하는 사설 레지스트리입니다.
Docker의 대체제
containerd
- 경량화된 컨테이너 실행 및 관리 도구입니다.
- Kubernetes에서 기본 런타임으로 많이 사용됩니다.
CRI-O
- Kubernetes와의 원활한 통합을 위해 개발된 컨테이너 런타임입니다.
- 오픈 컨테이너 이니셔티브(OCI) 표준을 따릅니다.
Docker 설치
Docker Desktop
- 로컬 개발 환경에서 Docker를 쉽게 설치하고 사용할 수 있습니다.
- GUI 기능을 제공합니다.
- Docker Engine과 다양한 도구를 포함합니다.
Docker Engine
- 컨테이너 생성, 관리, 실행을 담당합니다.
- 모든 운영체제에서 작동하지만 주로 Linux에서 사용됩니다.
튜링의 사과에서 들은 도커 입문 특강에 있는 자료를 기반으로 작성된 도커 개념이다.
실습은 추후에, 따로 실습을 진행한 뒤에 정리해보도록 하겠다.