CodeGym /행동 /Docker SELF /Docker: 등장 배경과 기본 개념

Docker: 등장 배경과 기본 개념

Docker SELF
레벨 9 , 레슨 0
사용 가능

1.1 Docker 등장 배경

초기 및 배경:

Docker의 역사는 2013년에 공식적으로 탄생하기 훨씬 전부터 시작되었어. 2000년대 초반엔 이미 가상화가 인기가 많았지만, 전통적인 가상 머신은 많은 리소스를 요구했고 유연성이 부족했지. 바로 그 때 컨테이너화의 아이디어가 태동했어. LXC (Linux Containers)는 Linux 커널 기능을 통해 독립적인 컨테이너를 실행할 수 있게 한 최초의 프로젝트 중 하나였어.

아이디어 탄생:

Docker는 2010년에 Solomon Hykes와 Sebastien Pahl가 설립한 dotCloud라는 스타트업의 내부 프로젝트로 시작됐어. DotCloud는 플랫폼 서비스(PaaS)를 제공하며, 개발자들이 웹 애플리케이션을 배포하고 관리할 수 있는 도구를 제공했지. 그런데 dotCloud 팀은 작업을 하다가 애플리케이션 격리와 의존성 관리를 다루는 문제에 직면했어. 그래서 이 문제를 해결할 수 있는 범용 컨테이너 기술을 만들자는 아이디어가 떠오른 거지.

개발 및 첫 릴리즈:

사실 초기 Docker 버전은 dotCloud에서 나왔고, 공식적인 "아버지"는 Solomon Hykes야. Docker는 처음 2013년 3월 PyCon 컨퍼런스에서 발표되었고, 얼마 지나지 않아 GitHub에 소스 코드가 공개되었어. 초기에는 Docker가 LXC (Linux Containers)를 사용했지만, 이후 자체 컨테이너 구현으로 변경되어 시스템의 성능과 유연성이 향상됐어.

인정과 커뮤니티 성장:

Docker는 개발자와 IT 전문가들의 관심을 빠르게 끌었어. 설정이 간단하고 가능성이 아주 넓으니까! 발표 후 몇 달 만에 프로젝트는 GitHub에서 수많은 스타를 받고 활발한 기여자 커뮤니티를 형성했어. 2014년에 dotCloud는 회사명을 Docker, Inc.로 변경하며 새로운 컨테이너 플랫폼 개발에 초점을 맞췄지.

Docker의 역사에서 중요한 사건 중 하나는 주요 IT 기업들의 인정을 받은 거야. 2014년 Red Hat, Google, Microsoft가 Docker를 적극적으로 지원하며 자사 제품과 서비스에 통합하기 시작했어. 이는 Docker가 빠르게 확산되고 컨테이너화의 사실상의 표준으로 자리 잡는 데 기여했어.

파트너십과 생태계:

Docker는 계속 발전하면서 투자도 유치했어. 2014년에는 시리즈 C 자금 조달로 $40백만을 확보해 팀을 확장하고 개발을 가속화했지. Docker는 다른 기업들과 활발히 협력하며 플랫폼 주변에 생태계를 구축했어. Docker Compose(다중 컨테이너 애플리케이션 관리를 위한)와 Docker Swarm(컨테이너 오케스트레이션을 위한) 프로젝트가 시작됐어.

2015년엔 Docker가 Microsoft와 전략적 파트너십을 발표했어. 이를 통해 Docker는 Windows Server와 Azure에 통합되었고, Linux 커뮤니티 외부에서도 더 넓은 대중에게 접근할 수 있는 기회가 생겼어.

경쟁과 표준화:

Docker의 인기가 늘어나면서 시장에는 경쟁 프로젝트와 기술이 등장하기 시작했어. 2015년에 Google은 Kubernetes라는 컨테이너 오케스트레이션 시스템을 발표했는데, 이는 유연성과 기능 덕분에 빠르게 인기를 끌었지. 경쟁에도 불구하고 Docker와 Kubernetes는 서로를 보완하며 현대 컨테이너 기반 인프라의 기초를 형성했어.

2017년에 Docker는 Open Container Initiative (OCI)를 지원하기 시작했어. 이 프로젝트는 컨테이너 포맷과 런타임 표준화를 목표로 했지. 이는 다양한 컨테이너 플랫폼 간의 호환성을 제공하고 Docker와 다른 도구 간 통합을 간소화했어.

현재와 미래:

오늘날 Docker는 개발자와 시스템 관리자들에게 핵심 도구로 남아 있어. Docker 생태계는 Docker Desktop(로컬 머신에서 Docker 작업을 위한)과 Docker Hub(공개 이미지 레지스트리) 같은 프로젝트를 포함하며 계속 성장하고 있어.

Docker는 보안, 성능, 사용 편의성 기술을 적극적으로 발전시키고 있어. 예를 들어, Docker Content Trust는 이미지 무결성과 신뢰성을 확인할 수 있게 해주고, Docker Scan은 컨테이너의 취약성을 식별할 수 있게 해줘.

1.2 Docker의 주요 개념

0. 가상 "가상 머신"

Docker 컨테이너 안에서 실행되는 애플리케이션의 관점에서 보면, Docker 컨테이너는 가상 머신 같아. 근데 일반적인 가상 머신과 달리 Docker는 되게 가벼운 시스템이야. 사실, 그건 완전한 가상 머신이 아니라 가상 "가상 머신"이라고 할 수 있어.

Linux 운영 체제는 애플리케이션들을 서로 완전히 독립적으로 동작하게 만들 수 있어. 그래서 각각의 애플리케이션이 자기만의 운영 체제에서 실행되는 것처럼 보이는 거야. 이렇게 실제 운영 체제 위에서 작동하는 독특한 환경이 바로 컨테이너라는 거지.

1. 격리:

Docker의 주요 특징 중 하나가 애플리케이션과 그 종속성을 격리할 수 있는 능력이야. 이건 Linux 커널의 namespaces와 cgroups를 이용해서 달성돼. namespaces는 프로세스를 격리해줘: 각 컨테이너는 자체 프로세스, 네트워크 인터페이스, 파일 시스템 세트를 가져. cgroups는 CPU, 메모리, 디스크 같은 자원의 사용량을 제한하고 제어할 수 있게 해줘. 이렇게 격리가 되니까 컨테이너들이 서로 독립적이고 호스트 시스템에서도 독립적으로 동작할 수 있어. 이게 보안성과 신뢰성을 높여줘.

2. 이식성:

Docker는 애플리케이션의 높은 이식성을 제공해. 이 말은 같은 컨테이너를 개발자의 로컬 컴퓨터, 테스트 환경, 클라우드 플랫폼 어디에서든 실행할 수 있다는 뜻이야. 실행 환경 전체가 컨테이너 안에 포장되어 있어: 애플리케이션 코드, 종속성, 라이브러리, 구성 파일 등 모두 다 포함돼. 이러면 환경 호환성 문제를 없애고, 개발자들이 자기 애플리케이션이 어디서든 문제없이 작동할 거라고 확신할 수 있어.

3. 가벼움:

가상 머신은 각각의 인스턴스에 대해 별도의 운영 체제를 설치해야 하지만, Docker 컨테이너는 호스트 시스템의 커널을 사용하는 덕분에 훨씬 가벼워. 덕분에 컨테이너는 디스크 공간도 적게 차지하고, 메모리도 적게 써서 가상 머신보다 같은 서버에서 더 많은 컨테이너를 실행할 수 있어.

4. Docker 이미지:

Docker 이미지란 컨테이너를 생성하기 위한 템플릿이야. 이미지에는 애플리케이션 실행에 필요한 모든 게 들어 있어: 코드, 라이브러리, 종속성, 구성 파일 등. 이미지는 Dockerfile이라는 특별한 스크립트로 처음부터 직접 만들 수 있어. 게다가 Docker Hub라는 공개 Docker 이미지 레지스트리에 수많은 이미지가 이미 준비되어 있어. Docker Hub를 사용해서 개발자들이 이미지를 공유하거나, 다른 사람이 만든 이미지를 사용할 수 있어.

5. 계층형 파일 시스템:

Docker는 계층형 파일 시스템(Union File System)을 사용해서 공간과 자원을 절약해. 각각의 이미지는 여러 계층으로 나뉘어 있는데, 각 계층은 이전 계층에 비해 추가된 변경 사항을 나타내. 예를 들어, 한 계층은 베이스 운영 체제를 포함하고, 다른 계층은 설치된 라이브러리, 또 다른 계층은 애플리케이션 코드를 포함할 수 있어. 이미지에서 컨테이너를 생성할 때 새로 생성된 계층은 변경 사항을 기록하는 데 사용되고, 기존 계층은 손상되지 않아. 이건 네트워크를 통해 전송되는 데이터 양을 줄이고 컨테이너를 빠르게 생성할 수 있게 만들어줘.

6. 자동화와 오케스트레이션:

Docker는 다양한 도구를 통해 애플리케이션 빌드, 테스트 및 배포를 자동화할 수 있어. Docker Compose는 여러 개의 컨테이너로 이뤄진 애플리케이션을 관리하는데 사용돼. 이를 통해 모든 서비스를 하나의 파일(docker-compose.yml)로 설명하고, 한 번의 명령으로 실행할 수 있어. 대규모 클러스터에서 컨테이너 오케스트레이션을 위해 Kubernetes라는 컨테이너 관리 시스템을 사용해. 이 시스템은 자동 확장, 장애 복구, 로드 밸런싱 등을 지원해.

1.3 Docker의 활용

Docker는 IT의 여러 분야에서 활발히 사용되고 있어. 주요 방향들을 살펴보자:

1. 개발 및 테스트:

개발자들은 Docker를 사용해서 독립적인 개발 및 테스트 환경을 만들어. 이걸로 라이브러리와 프레임워크의 다양한 버전을 충돌 없이 다룰 수 있어. 테스터들은 자동화된 테스트 환경을 빠르게 설정할 수 있지.

2. 지속적 통합과 배포 (CI/CD):

Docker는 지속적 통합과 배포 과정을 단순화해줘. 애플리케이션 이미지를 만들고 빌드의 각 단계에서 테스트할 수 있으니까, 배포 과정을 신뢰할 수 있고 예측 가능하게 만들어줘.

3. 마이크로서비스:

Docker는 마이크로서비스 아키텍처에 딱 맞는 솔루션이야. 이런 아키텍처에선 애플리케이션이 작고 독립적인 서비스들로 나뉘는데, 각각 독립적으로 배포하고 확장할 수 있어.

4. 클라우드 컴퓨팅:

Docker는 모든 컴포넌트를 하나의 포맷으로 패키징해서 클라우드에서 애플리케이션을 배포하는 걸 단순화해줘. 이렇게 하면 다양한 클라우드 플랫폼과 로컬 서버 간 애플리케이션 이동이 훨씬 쉬워져.

Docker의 역사는 혁신과 협업의 여정이야. 작은 스타트업의 내부 프로젝트로 시작된 이 아이디어는 지금은 전 세계적으로 애플리케이션 개발과 배포에 큰 영향을 미치는 글로벌 현상이 되었어. 이 여정은 끈기와 분명한 비전으로 실행된 아이디어가 어떻게 산업 전체를 바꿀 수 있는지 보여줘.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION