도커 (소프트웨어)
| 원저자 | 솔로몬 하익스(Solomon Hykes) |
|---|---|
| 개발자 | 도커 |
| 발표일 | 2013년 3월 13일 |
| 안정화 버전 | |
| 저장소 | |
| 프로그래밍 언어 | Go[2] |
| 운영 체제 | 리눅스[a], 윈도우, macOS |
| 플랫폼 | 현대의 리눅스 커널이 포함된 x86-64, ARM (실험적), 하이퍼-V 기능이 포함된 x86-64 윈도우 |
| 종류 | 운영 체제 수준 가상화 |
| 라이선스 | 아파치 라이선스 2.0 |
| 웹사이트 | www |

도커(Docker)는 운영체제 수준 가상화를 사용하여 컨테이너라고 불리는 패키지로 소프트웨어를 전달하는 일련의 서비스형 제품군이다. 도커는 경량 컨테이너 내에서 애플리케이션의 배포를 자동화하여, 서로 다른 컴퓨팅 환경에서도 일관되게 실행될 수 있도록 지원한다.
이러한 컨테이너를 실행하고 관리하는 핵심 소프트웨어를 도커 엔진(Docker Engine)이라고 한다. 도커는 2013년에 처음 출시되었으며 도커사(Docker, Inc.)에 의해 지속적으로 개발되고 있다. 이 플랫폼은 무료 및 유료 계층을 모두 포함한다.
역사
[편집]솔로몬 하익스(Solomon Hykes)는 서비스형 플랫폼 회사인 dotCloud 내의 내부 프로젝트로서 프랑스에서 도커 프로젝트를 시작했다.[5]
dotCloud Inc.는 카멜 포나디(Kamel Founadi), 하익스, 세바스찬 팔(Sebastien Pahl)에 의해 설립되었으며[6], 2010년 여름 와이 콤비네이터 스타트업 인큐베이터 그룹에 참여하여 2011년에 출시되었고, 2013년에 Docker Inc로 사명을 변경했다.[7]
도커는 2013년 샌타클래라에서 열린 PyCon에서 대중에게 처음 공개되었다.[8] 2013년 3월에 오픈 소스로 출시되었다.[9] 당시에는 기본 실행 환경으로 LXC를 사용했다. 1년 후 0.9 버전 출시와 함께 도커는 LXC를 Go 프로그래밍 언어로 작성된 자체 구성 요소인 libcontainer로 교체했다.[10][11]
2017년, 도커는 개방형 연구 및 개발을 위해 모비 프로젝트(Moby project)를 창설했다.[12]
도입
[편집]- 2013년 9월 19일: 레드햇과 도커는 페도라, 레드햇 엔터프라이즈 리눅스(RHEL) 및 오픈시프트를 중심으로 한 협업을 발표했다.[13]
- 2014년 10월 15일: 마이크로소프트는 윈도우 서버에 도커 엔진을 통합하고 윈도우에서 도커 클라이언트 역할을 기본적으로 지원한다고 발표했다.[14][15]
- 2014년 11월: 아마존 일래스틱 컴퓨트 클라우드(EC2)를 위한 도커 컨테이너 서비스가 발표되었다.[16]
- 2014년 11월 10일: 도커는 Stratoscale과의 파트너십을 발표했다.[17]
- 2014년 12월 4일: IBM은 도커가 IBM 클라우드와 더 밀접하게 통합될 수 있도록 하는 전략적 파트너십을 발표했다.[18]
- 2015년 6월 22일: 도커와 여러 기업들은 소프트웨어 컨테이너를 위한 새로운 벤더 및 운영체제 독립적 표준을 작업 중이라고 발표했다.[19][20]
- 2015년 12월: 오라클 클라우드는 도커 컨테이너 스타트업인 StackEngine을 인수한 후 도커 컨테이너 지원을 추가했다.[21]
- 2016년 4월: 독립 소프트웨어 개발 판매 회사인 Windocks는 도커 오픈 소스 프로젝트의 윈도우 포트 버전을 출시하여 윈도우 서버 2012 R2 및 서버 2016, 그리고 SQL 서버 2008 이후의 모든 에디션을 지원했다.[22]
- 2016년 5월: 분석에 따르면 도커의 주요 기여자 조직은 도커 팀, 시스코, 구글, 화웨이, IBM, 마이크로소프트, 레드햇으로 나타났다.[23]
- 2016년 6월 8일: 마이크로소프트는 이제 윈도우 10에서 도커를 기본적으로 사용할 수 있다고 발표했다.[24]
- 2017년 1월: 링크드인 프로필 언급 분석 결과, 2016년에 도커의 존재감이 160% 성장한 것으로 나타났다.[25]
- 2019년 5월 6일: 마이크로소프트는 리눅스용 윈도우 하위 시스템(WSL)의 두 번째 버전을 발표했다. Docker, Inc.는 WSL 2에서 실행되는 윈도우용 도커 버전 작업을 시작했다고 발표했다.[26] 특히 이는 도커가 (하이퍼-V를 사용했기 때문에 이전에 윈도우 프로 및 엔터프라이즈로 제한되었던 것과 달리) 윈도우 10 홈 에디션에서도 실행될 수 있음을 의미했다.
- 2020년 8월: 마이크로소프트는 윈도우 10 버전 1903 및 1909에 대한 WSL2 백포트를 발표했으며(이전에는 버전 2004에서만 가능했음),[27] 도커 개발자들은 이 플랫폼들을 위한 도커의 가용성을 발표했다.[28]
- 2021년 8월: 윈도우 및 MacOS용 도커 데스크톱(Docker Desktop)이 기업 사용자에게 더 이상 무료로 제공되지 않게 되었다. 도커는 대규모 기업 고객에 대한 무료 도커 데스크톱 사용을 종료하고 무료 플랜을 퍼스널 플랜으로 교체했다. 리눅스 배포판의 도커 엔진은 영향을 받지 않았다.[29]
- 2023년 12월: 도커는 테스트 역량을 확장하기 위해 AtomicJar를 인수했다.[30]
설계
[편집]
컨테이너는 서로 격리되어 있으며 자체 소프트웨어, 라이브러리 및 설정 파일을 번들로 포함한다. 이들은 잘 정의된 채널을 통해 서로 통신할 수 있다.[32] 모든 컨테이너가 단일 운영체제 커널의 서비스를 공유하기 때문에 가상 머신보다 적은 리소스를 사용한다.[33]
도커는 애플리케이션과 그 종속성을 가상 컨테이너에 패키징할 수 있으며, 이는 원칙적으로 모든 리눅스, 윈도우 또는 MacOS 컴퓨터에서 실행될 수 있다. 이를 통해 애플리케이션은 온프레미스, 퍼블릭 클라우드(분산 컴퓨팅 등 참조) 또는 프라이빗 클라우드와 같은 다양한 위치에서 실행될 수 있다.[34] 리눅스에서 실행될 때 도커는 리눅스 커널의 리소스 격리 기능(Cgroups 및 커널 네임스페이스)과 유니온 마운트 기능이 있는 파일 시스템(OverlayFS 등)을 사용하여[35] 단일 리눅스 인스턴스 내에서 컨테이너가 실행되도록 함으로써 가상 머신을 시작하고 유지 관리하는 오버헤드를 방지한다. MacOS의 도커는 리눅스 가상 머신을 사용하여 컨테이너를 실행한다.[36]
도커 컨테이너는 가볍기 때문에 단일 서버나 가상 머신에서 여러 컨테이너를 동시에 실행할 수 있다.[37] 2018년 분석에 따르면 일반적인 도커 사용 사례는 호스트당 8개의 컨테이너를 실행하며, 분석된 조직의 4분의 1은 호스트당 18개 이상을 실행하는 것으로 나타났다.[38] 또한 라즈베리 파이와 같은 싱글 보드 컴퓨터에도 설치할 수 있다.[39]
리눅스 커널의 네임스페이스 지원은 프로세스 트리, 네트워크, 사용자 ID 및 마운트된 파일 시스템을 포함한 애플리케이션의 운영 환경 보기를 대부분[40] 격리하며, 커널의 cgroups는 메모리 및 CPU에 대한 리소스 제한을 제공한다.[41] 0.9 버전부터 도커는 libvirt, LXC 및 systemd-nspawn을 통한 추상화된 가상화 인터페이스 사용 외에도 리눅스 커널이 직접 제공하는 가상화 기능을 사용하기 위해 자체 구성 요소(libcontainer라고 함)를 포함한다.[10][31][34][42]
구성 요소
[편집]서비스형 소프트웨어로 제공되는 도커 제품은 세 가지 구성 요소로 이루어진다.
- 소프트웨어
dockerd라고 불리는 도커 데몬은 도커 컨테이너를 관리하고 컨테이너 객체를 처리하는 상주 프로세스이다. 데몬은 도커 엔진 API를 통해 전송되는 요청을 수신한다.[43][44]docker라고 불리는 도커 클라이언트 프로그램은 사용자가 도커 데몬과 상호 작용할 수 있도록 하는 명령줄 인터페이스(CLI)를 제공한다.[43][45]- 객체(Objects)
- 도커 객체는 도커에서 애플리케이션을 조립하는 데 사용되는 다양한 엔티티이다. 도커 객체의 주요 클래스는 이미지, 컨테이너, 서비스이다.[43]
- 레지스트리(Registries)
- 도커 레지스트리는 도커 이미지의 저장소이다. 도커 클라이언트는 레지스트리에 연결하여 사용할 이미지를 다운로드("pull")하거나 빌드한 이미지를 업로드("push")한다. 레지스트리는 공개 또는 비공개일 수 있다. 주요 공개 레지스트리는 도커 허브(Docker Hub)이다. 도커 허브는 도커가 이미지를 찾는 기본 레지스트리이다.[43][47] 도커 레지스트리는 이벤트를 기반으로 한 알림 생성 기능도 제공한다.[48]
Dockerfile은 도커 컨테이너의 여러 측면(예: 리눅스 배포판, 프로그래밍 언어 런타임 환경의 설치 명령, 애플리케이션 소스 코드 등)을 지정하는 텍스트 파일이다.
Dockerfile의 예시:[49]
ARG CODE_VERSION=latest
FROM ubuntu:${CODE_VERSION}
COPY ./examplefile.txt /examplefile.txt
ENV MY_ENV_VARIABLE="example_value"
RUN apt-get update
# 도커 볼륨으로부터 디렉터리 마운트
# 참고: 이는 보통 'docker run' 명령에서 지정됨.
VOLUME ["/myvolume"]
# 포트 노출 (SSH의 경우 22)
EXPOSE 22
도커 컴포즈(Docker Compose)는 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구이다.[50] YAML 파일을 사용하여 애플리케이션의 서비스를 구성하며, 단일 명령으로 모든 컨테이너의 생성 및 시작 프로세스를 수행한다. docker compose CLI 유틸리티를 통해 사용자는 이미지 빌드, 컨테이너 확장, 정지된 컨테이너 실행 등 여러 컨테이너에 대해 동시에 명령을 실행할 수 있다.[51] 이미지 조작이나 사용자 대화형 옵션과 관련된 명령은 단일 컨테이너를 다루기 때문에 도커 컴포즈에서는 관련이 없다.[52] docker-compose.yml 파일은 애플리케이션의 서비스를 정의하는 데 사용되며 다양한 구성 옵션을 포함한다. 예를 들어, build 옵션은 Dockerfile 경로와 같은 구성 옵션을 정의하며, command 옵션은 기본 도커 명령을 재정의할 수 있게 해준다.[53] 도커 컴포즈의 첫 번째 공개 베타 버전(0.0.1)은 2013년 12월 21일에 출시되었다.[54] 첫 번째 프로덕션 지원 버전(1.0)은 2014년 10월 16일에 공개되었다.[55]
도커 스웜(Docker Swarm)은 도커 컨테이너를 위한 네이티브 클러스터링 기능을 제공하여, 도커 엔진 그룹을 하나의 가상 도커 엔진으로 변환한다.[56] 도커 1.12 이상에서는 스웜 모드가 도커 엔진에 통합되어 있다.[57] docker swarm CLI[58] 유틸리티를 통해 사용자는 스웜 컨테이너 실행, 검색 토큰 생성, 클러스터 노드 목록 표시 등을 수행할 수 있다.[59] docker node CLI 유틸리티를 사용하면 스웜 내의 노드 목록 표시, 노드 업데이트, 스웜에서 노드 제거 등 노드 관리를 위한 다양한 명령을 실행할 수 있다.[60] 도커는 합의 알고리즘인 Raft를 사용하여 스웜을 관리한다. Raft에 따르면 업데이트가 수행되려면 스웜 노드의 과반수가 업데이트에 동의해야 한다.[61][62] docker swarm CLI 외에도 docker stack은 더 큰 유연성을 가지고 스웜 서비스를 관리하기 위해 설계된 도구이다. 이는 docker-compose.yml과 매우 유사한 설정 파일을 사용할 수 있다. docker compose 대신 docker stack을 사용하면 여러 머신에 걸쳐 스웜 클러스터를 관리하거나, 원격 호스트에서 도커 명령을 실행하여 원격 컨테이너 관리를 가능하게 하는 docker context와 결합된 docker secret을 사용하는 등의 이점이 있다.
도커 볼륨(Docker Volume)은 데이터의 독립적인 영속성을 용이하게 하여 컨테이너가 삭제되거나 다시 생성된 후에도 데이터가 유지될 수 있도록 한다.[63]
라이선스 모델
[편집]- 도커 엔진은 아파치 라이선스 2.0에 따라 라이선스가 부여된다. 도커 데스크톱은 GNU 일반 공중 사용 허가서에 따라 라이선스가 부여된 일부 구성 요소를 배포한다. 도커 데스크톱은 대기업에게는 무료가 아니다.[64]
- Dockerfile 파일 자체는 오픈 소스 라이선스에 따라 라이선스가 부여될 수 있다. 이러한 라이선스 선언의 범위는 Dockerfile에만 해당하며 컨테이너 이미지에는 해당하지 않는다.
같이 보기
[편집]각주
[편집]- 내용주
- 참조주
- ↑ “v29.2.1”. 2026년 2월 2일. 2026년 2월 8일에 확인함.
- ↑ “Docker source code”. 《docs.docker.com》. Docker, Inc. 2015년 10월 12일. 2015년 10월 24일에 확인함.
- ↑ https://docs.docker.com/installation/windows/#virtual
- ↑ https://docs.docker.com/installation/mac/#VM
- ↑ “One home for all your apps”. 《dotcloud.com》. 2014년 5월 17일에 원본 문서에서 보존된 문서. 2014년 5월 8일에 확인함.
- ↑ Hykes, Solomon (2018년 3월 28일). “Au Revoir”. 《docker.com》. 2021년 1월 12일에 원본 문서에서 보존된 문서. 2021년 1월 23일에 확인함.
- ↑ “About the dotCloud Platform”. 《dotCloud》. 2014년 7월 2일에 원본 문서에서 보존된 문서. 2019년 6월 23일에 확인함.
- ↑ “The future of Linux Containers”. 《DotCloud Channel》. 2013년 3월 21일. 2018년 7월 13일에 확인함 – YouTube 경유.
- 1 2 Avram, Abel (2013년 3월 27일). “Docker: Automated and Consistent Software Deployments”. 《InfoQ》. 2013년 8월 9일에 확인함.
- 1 2 Vaughan-Nichols, Steven J. (2014년 6월 11일). “Docker libcontainer unifies Linux container powers”. 《ZDNet》. 2014년 7월 30일에 확인함.
- ↑ Swan, Chris (2014년 3월 13일). “Docker drops LXC as default execution environment”. 《InfoQ》. 2015년 1월 20일에 확인함.
- ↑ “Demystifying the Relationship Between Moby & Docker – Welcome to Collabnix”. 2017년 5월 6일.
- ↑ “DotCloud Pivots And Wins Big With Docker, The Cloud Service Now Part Of Red Hat OpenShift”. 《TechCrunch》. 2013년 9월 19일. 2014년 1월 20일에 확인함.
- ↑ Foley, Mary Jo (2014년 10월 15일). “Docker container support coming to Microsoft's next Windows Server release”. 《ZDNet》. 2014년 10월 16일에 확인함.
- ↑ Guthrie, Scott (2014년 10월 15일). “Docker and Microsoft: Integrating Docker with Windows Server and Microsoft Azure”. 《ScottGu's Blog》. Microsoft. 2015년 1월 12일에 확인함.
- ↑ Barr, Jeff (2014년 11월 13일). “Amazon EC2 Container Service (ECS) – Container Management for the AWS Cloud”. 《Amazon Web Services Blog》. 2017년 4월 29일에 확인함.
- ↑ Rath, John (2014년 11월 10일). “Stratoscale Raises $32M to Build Docker-Supporting OpenStack Clouds on Commodity Servers”. 2016년 1월 3일에 확인함.
- ↑ “IBM and Docker Announce Strategic Partnership to Deliver Enterprise Applications in the Cloud and On Prem”. IBM. 2014년 12월 4일. 2015년 1월 10일에 원본 문서에서 보존된 문서. 2015년 4월 20일에 확인함.
- ↑ Lardinois, Frederic (2015년 6월 22일). “Docker, CoreOS, Google, Microsoft, Amazon And Others Come Together To Develop Common Container Standard”. 《TechCrunch》. 2015년 8월 8일에 확인함.
- ↑ Siluk, Shirley (2015년 6월 22일). “Docker, Tech Giants Team on Open Container Project”. 《cio-today.com》. 2015년 9월 23일에 원본 문서에서 보존된 문서. 2015년 8월 8일에 확인함.
- ↑ McLaughlin, Kevin (2015년 12월 22일). “Oracle Acquires Docker Container Startup StackEngine, Plans Austin-Based Cloud Computing Center”. 《CRN》. 2022년 1월 13일에 확인함.
- ↑ Yegulalp, Serdar (2016년 4월 4일). “Windocks does what Docker and Microsoft can't do”. 《InfoWorld》. 2018년 10월 27일에 확인함.
- ↑ “Docker – Updated project statistics”. 《GitHub Gist》. 2016년 8월 22일에 확인함.
- ↑ Sarkar, Dona (2016년 6월 8일). “Announcing Windows 10 Insider Preview Build 14361”. 《Windows Blogs》. Microsoft. 2016년 6월 19일에 확인함.
- ↑ Mullany, Michael. “Docker Momentum Analysis 2016”. 《LinkedIn Pulse》. 2017년 1월 5일에 확인함.
- ↑ Vaughan-Nichols, Steven (2019년 6월 18일). “Docker embraces Windows Subsystem for Linux 2”. 《ZDNet》. CBS Interactive.
- ↑ “WSL 2 Support is coming to Windows 10 Versions 1903 and 1909” (미국 영어). 《Windows Command Line》. 2020년 8월 20일. 2020년 8월 21일에 확인함.
- ↑ “Docker Desktop & WSL 2 - Backport Update” (미국 영어). 《Docker Blog》. 2020년 8월 20일. 2020년 8월 21일에 확인함.
- ↑ Carey, Scott (2021년 8월 31일). “Docker Desktop is no longer free for enterprise users” (영어). 《InfoWorld》. 2021년 10월 18일에 확인함.
- ↑ Miller, Ron (2023년 12월 11일). “Docker acquires AtomicJar, a testing startup that raised $25M in January” (미국 영어). 《TechCrunch》. 2023년 12월 13일에 확인함.
- 1 2 “Docker 0.9: Introducing execution drivers and libcontainer”. 《Docker Blog》. Docker, Inc. 2014년 3월 10일. 2015년 1월 20일에 확인함.
- ↑ “Use containers to Build, Share and Run your applications”. 《docker.com》.
- ↑ “What is a Container?”. 《docker.com》. Docker, Inc. 2019년 5월 13일에 확인함.
- 1 2 Noyes, Katherine (2013년 8월 1일). “Docker: A 'Shipping Container' for Linux Code”. 《Linux.com》. 2013년 8월 8일에 원본 문서에서 보존된 문서. 2013년 8월 9일에 확인함.
- ↑ “Select a storage driver documentation”. 《Docker documentation》. 2016년 12월 6일에 원본 문서에서 보존된 문서. 2016년 12월 7일에 확인함.
- ↑ “Get started with Docker for Mac”. 《docker.com》. Docker, Inc. 2018년 9월 27일에 확인함.
- ↑ K., Chris (14 January 2019). “Lightweight Windows containers: Using Docker process isolation in Windows 10”. 《Poweruser》. 2 August 2019에 확인함.
more “lightweight” real containers (via so called process-isolation), where the containerized processes are running directly on the host system — all processes on the host and in the containers are sharing the same Windows kernel. This is similar to how containers on Linux work.
- ↑ “8 surprising facts about real Docker adoption”. 《Datadog》. June 2018. 2019년 9월 4일에 확인함.
- ↑ Gupta, Devender (2022년 10월 13일). “How to Install Docker on Raspberry Pi” (미국 영어). 《Gizmoxo》. 2022년 10월 15일에 확인함.
- ↑ Walsh, Dan (2014년 9월 15일). “Yet Another Reason Containers Don't Contain: Kernel Keyrings”. 《projectatomic.io》. 2015년 4월 13일에 확인함.
- ↑ “Limit a container's resources”. 《Docker Documentation》. 2018년 3월 7일에 확인함.
- ↑ “libcontainer – reference implementation for containers”. 《docker/libcontainer repo》. Docker, Inc. 2014년 7월 30일에 확인함 – GitHub 경유.
- 1 2 3 4 5 6 7 “Docker overview”. 《Docker Documentation》. Docker, Inc. 2018년 2월 26일에 확인함.
- ↑ “dockerd”. 《Docker Documentation》. Docker, Inc. 2018년 2월 26일에 확인함.
- ↑ “Use the Docker command line”. 《Docker Documentation》. Docker, Inc. 2018년 2월 26일에 확인함.
- ↑ “The Docker Ecosystem: An Introduction to Common Components”. 《www.digitalocean.com》. 2018년 2월 26일에 확인함.
- ↑ “About Registry”. 《Docker Documentation》. Docker, Inc. 2018년 2월 26일에 확인함.
- ↑ “Work with notifications”. 2019년 3월 2일.
- ↑ “Dockerfile reference” (영어). 《Docker Documentation》. 2023년 11월 14일. 2023년 11월 30일에 확인함.
- ↑ “Overview of Docker Compose”. 《Docker Documentation》. Docker, Inc. 2017년 7월 6일에 확인함.
- ↑ “Compose command-line reference”. 《Docker Documentation》. Docker, Inc. 2018년 2월 28일에 확인함.
- ↑ “Orchestrate Containers for Development with Docker Compose”. 《via @codeship》. 2015년 5월 27일. 2018년 2월 28일에 확인함.
- ↑ “Compose file version 3 reference”. 《Docker Documentation》. Docker, Inc. 2018년 2월 28일에 확인함.
- ↑ Firshman, Ben (2013년 12월 21일). “Release 0.0.1”. 《docker/compose》. Docker, Inc. – GitHub 경유.
- ↑ Prasad, Aanand (2014년 10월 16일). “Release 1.0.0”. 《docker/compose》. Docker, Inc. – GitHub 경유.
- ↑ “8 Container Orchestration Tools to Know”. 《Linux.com》. 2017년 4월 12일. 2017년 7월 6일에 확인함.
- ↑ “Docker Swarm”. 《Docker Documentation》. Docker, Inc. 2017년 7월 6일에 확인함.
- ↑ “Docker swarm”. 2021년 6월 4일.
- ↑ “Swarm command-line reference”. 《Docker Documentation》. Docker, Inc. 2018년 2월 28일에 확인함.
- ↑ “docker node”. 《Docker Documentation》. 2018년 2월 28일에 확인함.
- ↑ “Docker Swarm 101”. 《aquasec.com》. 2018년 2월 28일에 확인함.
- ↑ “Raft Consensus Algorithm”. 《raft.github.io》. 2018년 2월 28일에 확인함.
- ↑ “Docker Desktop & Docker Guides” (미국 영어). 《Docker Guide》. 2021년 4월 25일. 2021년 4월 25일에 원본 문서에서 보존된 문서. 2021년 4월 25일에 확인함.
- ↑ “Get Docker”. 2024년 9월 11일.