이 글은 원티드 프리온보딩 BE 챌린지 12월 프로그램에 참여하며 학습한 내용을 정리한 것입니다.
Week 1-1. 컨테이너 기술에 대해서 알아보고, Docker의 기본 개념과 사용법에 대해 알아보자!
컨테이너 기술이란?
컨테이너(Container)
는 소프트웨어 서비스를 실행하는 데 필요한 모든 코드, 라이브러리 및 설정을 포함하는 완전한 실행 가능한 패키지이다.
컨테이너 기술
은 논리적인 공간(컨테이너)을 만들어 애플리케이션을 패키징하고 배포하기 기술이다.
- 각 컨테이너는 서로 다른 환경에서 애플리케이션을 실행할 수 있도록 한다.
Docker란?
도커
는 컨테이너 기술
을 기반으로 한 가상화 플랫폼 도구로, 애플리케이션을 컨테이너라는 단위로 격리하여 실행하고 배포하는 기술이다.
- 도커 컨테이너는 어디서든 일관된 환경에서 실행할 수 있으므로 애플리케이션의 이식성이 높아지며, 가볍고 빠르기 때문에 리소스를 효율적으로 사용할 수 있는 장점이 있다.
가상화(Virtualization) 기술과의 차이점
- 가상화란
하이퍼바이저(hypervisor)
를 사용하여 하나의 물리적 머신에서 가상 머신(VM, Virtual Machine)을 생성하는 프로세스이다.
하이퍼바이저(hypervisor)란?
하드웨어 가상화를 제공하는 소프트웨어로, 여러 개의 가상 머신을 동시에 실행하고 관리할 수 있게 해주는 기술이다.
하이퍼바이저는 하드웨어 상에서 가상 머신을 만들고, 각 가상 머신은 독립적으로 운영 체제와 애플리케이션을 실행할 수 있다.
- 가상화 기술은 하나의 물리적인 컴퓨터 자원(CPU, 메모리, 저장장치)을 가상적으로 분할하여 여러 개의 가상 컴퓨터 환경을 만들어 내는 기술로, 물리적인 컴퓨터 자원의 사용을 최대화 하여 서버나 애플리케이션을 운영하는데 있어 유연성과 안정성을 제공한다.
- 이는 동일한 머신에서 다양한 유형의 운영 체제를 동시에 실행할 수 있는 장점이 있으나, 가상 머신을 생성하고 운영하는 데 필요한 오버헤드로 인해 물리적인 서버보다 많은 CPU, 메모리, 디스크 공간 등이 필요하여 추가적인 시스템 부하가 발생할 수 있다.
- 즉, 가상 머신은
하이퍼바이저
를 통해 전체 운영 체제를 가상화하고 실행해야 하기 때문에 무겁고 부하가 크다. 이와 비교하여 도커 컨테이너는 호스트 운영 체제의 커널을 공유하며, 각 컨테이너는 필요한 라이브러리와 의존성만을 가지고 있어 가볍고 빠르게 시작할 수 있다.
- 이를 통해 물리적인 컴퓨터 자원을 더욱 효율적으로 사용할 수 있으며, 서버나 애플리케이션 등을 운영하는데 있어 유연성과 안정성을 제공한다.
Docker의 핵심 장점
- 가상화 기술과 도커의 차이점을 하나의 예시를 들어서 설명하겠다.
- A라는 사람이 Java 프로그램을 자신의 로컬에서 작성하고, 다른 OS의 환경을 가진 B 로컬에서 이 프로그램을 구동시킨다고 가정해보자.
- A는 Java 환경을 포함한 도커 이미지를 작성하여 해당 이미지를 기반으로 컨테이너를 실행하면, 그 안에서 이 프로그램을 실행할 수 있다.
- B는 로컬 환경에 JVM을 별도로 설치할 필요가 없으며, 도커 이미지가 모든 종속성을 가지고 있기 때문에 프로그램을 실행시킬 수 있다.
- 이처럼 컨테이너는 애플리케이션과 그 종속성을 패키징하고, 격리된 환경에서 실행할 수 있도록 해주므로, 다른 환경에서 실행할 때 일관성 있는 동작을 보장한다.
Docker Architecture
Docker daemon(=dockerd)
- 도커 엔진의 핵심 구성 요소로, 컨테이너를 관리(생성, 시작, 중지, 삭제)하고 실행하는 역할을 한다.
- 컨테이너 이미지를 관리하고 외부에서 이미지를 다운로드하고 빌드하는 작업을 수행한다.
Docker Client
- Docker와 상호 작용
- docker 명령어를 사용하면, Docker daemon으로 보내어 실행
Docker Object
- 도커 이미지 (Docker Image)
- 도커 컨테이너를 만들기 위한 읽기 전용 템플릿
- 도커 컨테이너 (Docker Container)
- 한 도커 이미지의 실행 가능한 인스턴스
- 애플리케이션을 실행하기 위한 모든 파일과 설정 정보를 포함하는 패키지
Docker Registries
- 도커 이미지를 관리하고 저장하는 곳
- Docker hub: 디폴트 레지스트리, 누구나 접근 가능한 공개형 저장소
도커 파일, 도커 이미지, 도커 컨테이너의 관계
도커 이미지
는 소스 코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는데 필요한 환경을 포함하는 읽기 전용 파일이다.
도커 파일
은 도커 이미지를 빌드하기 위한 텍스트 기반의 스크립트로, 애플리케이션을 어떻게 빌드하고 실행할지에 대한 정보를 담고 있다.
도커 컨테이너
는 도커 이미지의 인스턴스로, 실행 중인 애플리케이션과 그 종속성을 격리된 환경에서 실행한다.
💡 도커 파일을 이용하여 도커 이미지를 빌드하면, 해당 이미지를 기반으로 여러 도커 컨테이너를 실행할 수 있다. 이때 각 컨테이너는 독립된 환경에서 실행된다.