일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 쓰레드
- 리스트
- 도커 엔진
- Kubernetes
- java socket
- 실전 자바 고급 1편
- Java IO
- 컨테이너
- filewriter filereader
- Collection
- java
- Thread
- 도커
- 스레드
- java network
- 쿠버네티스
- 자료구조
- 동시성
- 스레드 제어와 생명 주기
- 알고리즘
- LIST
- 자바
- 시작하세요 도커 & 쿠버네티스
- Docker
- 인프런
- 자바 io 보조스트림
- 김영한
- 자바 입출력 스트림
- 멀티 쓰레드
- container
- Today
- Total
쌩로그
[Docker] 시작하세요! 도커 & 쿠버네티스 - 01_도커란 본문
목록
- 포스팅 개요
- 본론
도커(Docker)
1-1. 가상 머신과 도커 컨테이너
1-2. 도커를 시작해야 하는 이유 - 요약
1. 포스팅 개요
이 포스팅은 위키북스 출판사의 '시작하세요! 도커/쿠버네티스'의 제 1장 도커란?
에 대한 내용 포스티이다.
도커에 대한 개요다.
2. 본론
도커(Docker)
도커는 리눅스 컨테이너에 여러 기능을 추가함으로 애플리케이션을 컨테이너로서 사용할 수 있게 만들어진 오픈 소스다.
도커는 Go 언어로 작성되었다.
2013년 3월에 첫 릴리스가 발표된 이후 지금까지 개발되고 있다.
기존에 쓰이던 가상 머신(VM)과는 도커 컨테이너는 성능의 손실이 거의 없다.
도커와 관련된 프로젝트에는 다음과 같은 것들이 있다.
- 도커 컴포즈(Docker Compose),
- 레지스트리(Private Registry),
- 도커 허브(Docker Hub),
- Docker for Desktop
일반적으로 도커라고 하면 도커 엔진(Docker Engine)혹은 도커에 관련된 모든 프로젝트를 의미한다.
- 보통은 도커 엔진의 의미로 많이 쓰인다.
도커 엔진은 컨테이너를 생성하고 관리하는 주체로 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 주 프로젝트다.
도커의 생태계에 있는 여러 프로젝트들은 도커 엔진을 좀더 효율적으로 사용하기 위한 것에 불과하므로, 도커의 핵심은 도커 엔진이다.
1-1. 가상 머신과 도커 컨테이너
- 기존의 가상화 기술은 하이퍼바이저를 이용하여 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이다.
- 하이퍼바이저 : 물리적 머신(컴퓨터)에서 여러 가상 머신을 실행하는 데 사용할 수 있는 소프트웨어 참고글
- 여러 개의 운영체제는 가상 머신이라는 단위로 구별되었다.
- 가상 머신은 하이퍼바이버에 의해 생성되고 관리되는 운영체제는 게스트 운영체제(Guest OS)라고 한다.
- 각 게스트 운영체제는 다른 게스트 운영체제와는 완전히 독립된 공간과 시스템 자원을 할당받는다.
- 가상화 툴로 유명한 것에는 VirtualBox, VMWare 등이 있다.

위의 그림처럼 가상머신(왼쪽)은
- 반드시 하이퍼바이저를 거친다.
- 그렇기 때문에 일반 호스트에 비해 불필요한 성능의 손실이 발생한다.
- 가상 머신은 게스트 운영체제를 사용하기 위한 라이브러리, 커널 등을 전부 포함한다.
- 때문에 가상 머신을 배포하기 위한 이미지로 만들었을 때 이미지의 크기가 커진다.
- 운영체제를 완벽하게 생성할 수 있는 장점은 있지만, Host PC(실제 PC)에 비해 성능의 손실이 있다.
반면에 도커(오른쪽)은)
- 가상화된 공간을 생성하기 위해 리눅스의 자체 기능(chroot, 네임스페이스, cgroup)을 사용함으로써 프로세스 단위의 격리 환경을 만든다.
- 따라서 성능의 손실이 거의 없다.
- 컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용한다.
- 컨테이너 안에 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 만들었을 때 가상머신의 배포 이미지의 용량에 비해 대폭 줄어든다.
- 이미지로 만들어 배포하는 시간 또한 빠르다.
- 성능의 손실도 거의 없다.
1-2. 도커를 시작해야 하는 이유
애플리케이션의 개발과 배포가 편해진다.
- 도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간이다.
- 컨테이너 내부에서 수많은 소프트웨어를 설치하고 설치파일을 수정해도 호스트 OS에는 영향을 끼치 않다.
- 독립된 개발 환경을 보장받을 수 있다.
- 운영환경에 배포하려고 한다면 컨테이너를 '도커 이미지'라는 패키지로 만들어 운영 서버에 전달하면 된다.
- 운영 서버에서 새롭게 설치할 필요가 없고, 각종 라이브러리 설치 등으로 인한 의존성을 걱정할 필요도 없다.
- 개발했을 때 사용하던 환경을 다른 서버에서도 컨테이너로 똑같이 복제할 수 있기 때문에 개발/운영 환경의 통합이 가능해진다.
- 도커 이미지는 가상 머신의 이미지와는 달리 커널을 포함하지 않기 때문에 이미지 크기가 크지 않다.
- 도커는 이미지 내용을 레이어 단위로 구성하며, 중복되는 레이어를 재사용할 수 있어 애플리케이션의 배포 속도가 매우 빨라진다.
여러 애플리케이션의 독립성과 확장성이 높아진다.

모놀리스(Monolith) 애플리케이션
- 소프트웨어의 여러 모듈이 상호작용하는 로직을 하나의 프로그램 내에서 구동시키는 방식을 의미한다.
- 소규모 서비스에는 이 방식이 어울릴지 모르겠지만, 서비스의 기능이 복잡해지고 거대해질수록 소프트웨어 자체의 확장성과 유연성이 줄어든다는 단점이 있다.
마이크로 서비스(Microservices)
모놀리스 방식을 대체하기 위해 최근에 떠오른 개념이다.
여러 모듈을 독립된 형태로 구성한다.
- 언어에 종속되지 않는다.
- 변화에 빠르게 대응할 수 있다.
- 각 모듈의 관리가 쉬워진다는 장점이 있다.
컨테이너는 수 초 내로 생성, 시작이 가능하고, 여러 모듈에게 독립된 환경을 동시에 제공하기 때문에 마이크로 서비스 구조에서 가장 많이 사용되고 있는 가상화 기술이다.
- 예시)
- 웹 서비스는 데이터베이스 컨테니어와 웹 서버 컨테이너로 분리할 수 있다.
- 웹 서비스에 부하가 발생할 시 마이크로서비스 구조의 웹 서버 컨테이너만을 동적으로 늘려서 부하를 분산할 수 있다.
- 웹 서버와 데이터베이스의 이미지 버전을 독립적으로 관리하기 때문에 유지 보수도 용이해진다.
- 예시)
위의 이유 외에도 프로젝트 자체의 성숙도, 확장성, 편의성 등이 있다.
1-3. 도커 엔진 설치
- 도커는 리눅스 컨테이너를 제어하는 API를 Go 언어로 구현한 libcontainer를 사용하여 대부분의 리눅스 운영체제에서 사용할 수 있다.
도커 엔진의 종류 및 버전
2017년 3월부터 도커 엔진은 도커 EE(Docker Enterprise Edition
쉽게 말해 상업용), 도커 CE(Community Edtion그냥 무료용)으로 구분되어 제공되고 있다.버전 이름은 17.03-EE 혹은 17.03-CE와 같이 '{출시년도}.{출시월}-{(도커 엔진 종류(EE, CE)}'의 형태로 표기한다.
EE 버전과 CE 버전의 차이는 각종 부가기능을 함께 제공하냐 안 하냐의 여부에 있다.
- EE 버전
- 각종 기술 지원 및 실제 서비스 단계에서 필요한 각종 부가 기능들을 도커 엔진과 함께 제공한다.
- 3개월마다 안정화된 버전으로 릴리스 된다.
- 참고로 2020년 기준 도커 엔터프라이즈는 미란티스(Mirantis)에 인수되어 운영되고 있다.
- CE 버전
- 도커 엔진 자체의 핵심적인 기능을 무료로 제공한다.
- CE는 stable과 edge 버전으로 구분해 각각 3개월, 1개월 단위로 릴리스 되는 차이가 있다.
- 도커 CE의 edge 버전은 새로운 기능을 먼저 사용해 볼 수 있는 장점이 있다.(다른 프로그램과 마찬가지로 먼저 시범 운영하는 알파버전이라고 생각하면 될 것 같다.)
- 따라서 안정화 된 버전인 stable 버전을 사용하는 것이 안전하다.
- EE 버전
3. 요약
도커에 대한 개요였다.
도커가 기존의 가상머신과 비교했을 때 어떤 장점이 있는지, 핵심이 무엇인지(도커 엔진)를 알아봤다.
'Deploy > Docker' 카테고리의 다른 글
[Docker] 시작하세요! 도커 & 쿠버네티스 - 02_도커 엔진 - 컨테이너 자원 할당 제한 (0) | 2025.03.03 |
---|---|
[Docker] 시작하세요! 도커 & 쿠버네티스 - 02_도커 엔진 - 도커 컨네이너 로깅 (0) | 2025.03.03 |
[Docker] 시작하세요! 도커 & 쿠버네티스 - 02_도커 엔진 - 도커 네트워크 (1) | 2025.02.28 |
[Docker] 시작하세요! 도커 & 쿠버네티스 - 02_도커 엔진 - 도커 볼륨 (1) | 2025.02.27 |
[Docker] 시작하세요! 도커 & 쿠버네티스 - 02_도커 엔진_컨테이너 다루기(명령어 및 애플리케이션 구축) (0) | 2025.02.27 |