본문 바로가기

Personal/Cloud

도커(Docker)

도커(Docker)란?

리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트

Go 언어로 작성돼 있으며, 2013년 3월에 첫 릴리스가 발표된 이후 지금까지 꾸준히 개발 중

가상 머신과는 달리 도커 컨테이너는 성능의 손실이 거의 없다.

 

그래서 차세대 클라우드 인프라 솔루션으로서 많은 개발자들에게 주목받고 있다.

도커와 관련된 프로젝트는 도커 컴포즈, 레지스트리, 도커 허브, Docker for Desktop 등 여러 가지가 있다.

 

일반적으로 도커라고 하면 도커 엔진 혹은 도커에 관련된 모든 프로젝트를 의미.

도커 엔진이 핵심이다. 도커와 관련된 모든 프로젝트를 능숙하게 다루려면 도커 엔진을 사용하는 방법을 배워야 함.

 

 

 1.1 가상 머신과 도커 컨테이너

기존의 가상화 기술과 다른 점?

하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식(예시: Virtual Box, VMware)이 아닌 리눅스의 자체 기능인 chroot, 네임스페이스, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없다. 이미지 용량도 가상 머신에 비해 대폭 줄어든다.

즉, 배포 시간이 가상 머신에 비해 빠르고, 가상화된 공간을 사용할 때의 성능 손실도 거의 없다는 정잠

 

1.2 도커를 시작해야 하는 이유

도커는 컨테이너 생태계에서 사실상 표준

쿠버네티스와 메소스 같은 오픈소스 프로젝트에서도 도커를 기준으로 개발되고 있음

 

1.2.1 애플리케이션의 개발과 배포가 편해집니다.

-> 호스트 OS 위에서 실행되는 격리된 공간인 도커는 호스트 OS에 영향을 끼치지 않는다.

-> 도커 이미지라는 일종의 패키지로 만들어 운영 서버에 전달하기만 하면 된다. 새로 패키지 설치나 각종 라이브러리 설치 등으로 인한 의존성을 걱정할 필요도 X

-> 개발/운영 환경의 통합 가능 (서비스를 개발했을 때 사용했던 환경을 다른 서버에서도 컨테이너로 똑같이 복제 가능함)

-> 가상 머신과 달리 커널을 포함하고 있지 않아서 이미지 크기가 작고 레이어 단위로 이미지 내용을 구성하여 중복되는 레이어를 재사용할 수 있어서 애플리케이션의 배포 속도가 매우 빨라진다.

 

1.2.2 여러 애플리케이션의 독립성과 확장성이 높아집니다.

-> 모놀리스(SW 여러 모듈 상호 작용 로직 -> 하나의 프로그램 내에서 구동시키는 방식) 애플리케이션은 소규모에는 어울리지만 서비스 기능 복잡 및 SW 거대해질수록 자체의 확장성과 유연성이 줄어든다는 단점이 있다.

-> 모놀리스 방식 대체로 마이크로서비스 구조가 최근에 새롭게 떠오름

-> 마이크로서비스 구조는 여러 모듈을 독립된 형태로 구성하기 때문에 언어 종속 X, 변화에 빠르게 대응, 각 모듈의 관리가 쉬워진다.

-> 컨테이너는 마이크로 서비스 구조에서 가장 많이 사용되고 있는 가상화 기술(수 초 내로 생성, 시작 가능하고 여러 모듈에게 독립된 환경을 동시에 제공할 수 있기 때문)

-> 컨테이너 기반의 마이크로서비스는 개발자가 직접 구현하기보다 도커 스웜 모드, 쿠버네티스 등의 컨테이너 오케스트레이션 플랫폼을 통해 사용하는 것이 일반적

-> 그 외 프로젝트 자체의 성숙도나 확장성, 편의성 등이 있음

 

1.3 도커 엔진 설치

1.3.3 윈도우, 맥 OS에 도커 설치

-> Docker Desktop 이 바로 윈도우와 맥 OS X에서 설치하는 도커이다.

-> 도커 CE의 stable 버전 사용 권장

 

1.3.3.1 Docker Desktop for Windows 설치

-> Docker Desktop for Windows 다운로드 페이지에서 설치 -> PC 재시작 -> 도커 버전 확인 (docker -v)

 

1.3.4 리눅스 환경에서 도커 마련하기

-> 이미 알고 있는 내용이라 따로 기록 X

-> 버추얼박스, VMWare, AWS EC2로 리눅스 설치하는 방법임.