Docker 알아보기

ohyujeong·2023년 6월 13일
0

Docker

목록 보기
1/2

Docker란?

Docker는 컨테이너화된 애플리케이션을 만들고 신속하게 구축, 테스트 및 배포할 수 있는 오픈 소스 플랫폼이다.

컨테이너는 애플리케이션과 해당 애플리케이션을 실행하는 데 필요한 모든 종속성을 모두 가지고 있는 독립적인 환경이다.

Docker를 사용하면 애플리케이션을 컨테이너로 패키징하여 호스트 시스템과는 독립적으로 실행할 수 있게 되고, 이는 애플리케이션을 효율적이고 일관되게 여러 환경에서 실행하고 이식성을 높일 수 있도록 한다. 이렇게 Docker를 사용함으로써 사용자가 개발한 환경 그대로를 패키징하여 라이브러리나 모듈의 버전이 안맞는 문제를 해결할 수 있다.

단, Docker는 명령줄 인터페이스 (CLI) 환경에서 사용되고 기본적으로 그래픽 환경을 지원하지 않는다. 이러한 이유로 인해 Docker는 주로 웹 서버, 마이크로서비스, 데이터베이스 등의 백엔드 서비스 개발과 배포에 많이 사용된다.

Docker의 구성요소

  • Docker Engine
    Docker의 핵심 엔진으로, Container 생성, 실행, 관리 등의 기능을 제공한다. Container의 생애주기를 관리하고 호스트 시스템의 리소스를 격리하여 사용한다.

  • Docker image
    애플리케이션을 실행하는 데 필요한 모든 파일과 종속성을 포함한 읽기 전용 템플릿이다. Docker image로부터 Container를 생성할 수 있다.

  • Container
    소프트웨어를 실행하기 위한 독립적이고 분리된 공간으로, Docker image(템플릿)를 기반으로 생성된다. 다수의 소프트웨어를 각 컨테이너 단에서 독립적으로 실행이 가능하다. 호스트 OS를 사용하여 별도 비용없이 사용할 수 있고, 따라서 빠르게 실행된다.
    또한 호스트 OS를 사용하기에 밀접하게 상호작용하기에, Docker가 실행되는 운영 체제에 따라 일부 호환성 문제가 발생할 수 있다.

  • Docker Compose
    여러 개의 컨테이너를 정의하고 실행하기 위한 도구이다. Docker Compose 파일에 컨테이너 및 관련 설정을 정의하면 간단한 docker compose up 명령으로 여러 컨테이너를 실행할 수 있습니다.

  • Docker Hub
    Docker 이미지를 저장하고 공유하는 온라인 저장소이다. Docker Hub에 사용자가 image를 생성하여 올릴수도 있고, 다른 사용자들이 만든 이미지를 검색하고 사용할 수 있다.

  • Docker Swarm
    Docker의 내장 클러스터링 및 오케스트레이션 도구로, 여러 개의 Docker 호스트를 관리하여 애플리케이션의 확장성과 고가용성을 제공한다.

어떻게 동작하는가?

Linux container 기술

Docker는 Linux 컨테이너 기술을 기반으로 동작한다. 이를 통해 프로세스를 격리된 환경에서 실행하고, 자원을 격리하고, 파일 시스템을 분리하여 애플리케이션을 패키징하고 실행할 수 있다.

Linux container 기술
Linux 커널의 네임스페이스와 cgroups라는 기능을 활용하여 프로세스를 격리하고 자원을 분리하는 방식으로 동작한다.
네임스페이스는 프로세스의 격리된 환경을 제공하여 리소스의 가상화와 격리를 가능하게 하고, cgroups(Control Groups)는 프로세스 그룹에 대한 자원 제한과 우선순위 설정을 가능하게 한다.
이를 통해 Container는 호스트 시스템과는 독립적인 파일 시스템, 네트워크 스택, 프로세스 공간 등을 가질 수 있으며, 동일한 호스트에서 여러 개의 컨테이너를 실행할 때도 서로 영향을 주지 않고 독립적으로 동작할 수 있다.

Image 빌드

Docker image는 Dockerfile 이라는 텍스트 파일에 정의되며, 해당 파일에는 애플리케이션 실행을 위한 명령과 종속성, 환경 설정 등이 포함된다. Dockerfile 을 사용하여 Docker 이미지를 빌드하면 애플리케이션과 필요한 모든 구성 요소가 포함된 컨테이너화된 image가 생성된다. 이를 Dockerization 이라고 한다.

Docker Image의 구성 요소

이 구성요소들과 설치 관련 실행 순서 등등이 Dockerfile에 기술되고, 그걸 바탕으로 Image가 생성된다.

  • 기본 OS (리눅스라면 우분투, 데비안 등등)와 같은 소프트웨어의 실행환경
  • 소프트웨어 자체 (코드)
  • 소프트웨어가 필요로 하는 라이브러리
  • 파일 시스템 스냅샷: 이는 스택화된 형태로 구현됨 (뒤에서 더 설명)
  • 환경 설정 변수: 빌드할 때 변수와 실행 때 변수 두 가지가 존재
  • 메타 데이터: 이미지 자체에 대한 정보 (버전, 작성자, 설명 등등)

Docker 엔진

Docker 엔진은 Container를 관리하고 실행하는 핵심 컴포넌트로, Docker CLI를 통해 사용자와 상호작용하며, Container 생성, 실행, 중지, 삭제 등의 작업을 수행한다.
또한, Docker 데몬이라고도 불리는 백그라운드 프로세스로써 Container의 생성, 네트워킹, 스토리지 관리 등을 담당한다.

Container 관리 및 오케스트레이션

Docker는 단일 호스트에서 여러 개의 컨테이너를 관리하고 조정할 수 있도록 도와주는 다양한 도구, 플랫폼과 통합될 수 있다.
예를 들어, Docker Compose, Kubernetes, Docker Swarm 등을 사용하여 컨테이너의 배포, 확장, 로드 밸런싱 등을 관리할 수 있다.

Image registry

Docker Hub와 같은 공개 image 저장소를 통해 Docker 이미지를 공유하고, 개인적인 저장소를 구축하여 이미지를 관리할 수 있다. 이미지 저장소를 통해 다른 사용자와 이미지를 공유하고, 업데이트 및 버전 관리를 수행할 수 있다.

profile
거친 돌이 다듬어져 조각이 되듯

0개의 댓글