Docker

sorikikikim·2022년 6월 29일
1

Docker

Docker는 어플리케이션을 개발, 전송 및 실행에 필요한 환경을 하나의 이미지로 모아두고 이미지를 사용해 다양한 환경에서 실행 환경을 구축하고 운영하기 위한 개방형 플랫폼이다.

Docker는 내부에서 컨테이너를 사용하는데, 일반적으로 생각하는 물류 시스템에서의 컨테이너와 비슷하다. 컨테이너로 실어서 다른 곳에 나르는 것처럼, 다양한 개발환경을 컨테이너로 추상화하기 때문에 동일한 환경을 누구에게나 제공할 수 있다. 이렇게 동일한 개발환경을 제공하기 때문에 프로그램의 배포 및 관리 또한 쉽게 할 수 있게 된다. Docker를 사용하면 어플리케이션을 관리하는 것과 동일한 방식으로 인프라도 관리할 수 있다. 코드를 신속하게 전송, 테스트 및 배포하기 위한 Docker 방법론을 활용하여 폭포형 개발에서 벗어나서 지속적 딜리버리가 가능한 구조의 개발이 가능해 개발 환경에서 코드 작성과 실행 간의 지연을 크게 줄일 수 있다.

Docker platform

Docker는 컨테이너라고 하는 느슨하게 격리된 환경에서 어플리케이션을 패키징하고 실행할 수 있는 기능을 제공한다. 격리 및 보안을 통해 주어진 호스트에서 많은 컨테이너를 동시에 실행할 수 있다. 컨테이너는 가벼우며 어플리케이션 실행에 필요한 모든 것을 포함하고 있어 현재 호스트에 설치된 것에 의존할 필요가 없다. 작업하는 동안 컨테이너를 쉽게 공유할 수 있으며 공유하는 모든 사람이 동일한 방식으로 작동하는 동일한 컨테이너를 갖게 된다.

Docker는 이러한 컨테이너의 수명 주기를 관리하기 위한 도구와 플랫폼을 제공한다.

  • 컨테이너를 사용하여 어플리케이션 및 지원 구성 요소를 개발한다.
  • 컨테이너는 어플리케이션을 배포하고 테스트하기 위한 단위가 된다.
  • 준비가 되면 어플리케이션을 컨테이너 또는 오케스트레이션된 서비스로 개발 환경에 배포한다. 이는 개발 환경이 로컬인지 클라우드인지 혹은 둘의 하이브리드인지 관계없이 동일하게 작동한다.

Where to Use the Docker

1. 빠르고 일관된 어플리케이션 제공

Docker는 개발자가 어플리케이션 및 서비스를 제공하는 로컬 컨테이너를 사용하여 표준화된 환경에서 작업할 수 있도록 하여 개발 수명 주기를 간소화한다. 컨테이너는 지속적 통합 및 지속적 전달(CI/CD) 워크플로에 적합하다.

2. 반응형 배포 및 확장

Docker의 컨테이너 기반 플랫폼은 이식성이 높은 워크로드를 허용한다. Docker 컨테이너는 개발자의 로컬 환경, 데이터 센터의 물리적 또는 가상의 머신, 클라우드 공급자 또는 혼합 환경에서도 실행할 수 있다.
Docker의 휴대성과 가벼운 특성 덕분에 워크로드를 쉽게 동적으로 관리할 수 있으며, 비즈니스 요구 사항에 따라 거의 실시간으로 어플리케이션과 서비스를 확장하거나 축소할 수 있다.

3. 동일한 하드웨어에서 더 많은 워크로드 실행

Docker는 가볍고 빠르다. 하이퍼바이저 기반 가상 머신에 대한 실행 가능하고 비용 효율적인 대안을 제공하므로 더 많은 컴퓨팅 용량을 사용하여 비즈니스 목표를 달성할 수 있다. Docker는 고밀도 환경과 더 적은 리소스로 더 많은 작업을 수행해야하는 중소 배포에 적합하다.

Docker 객체

Image

이미지는 Docker 컨테이너 생성 지침이 포함된 읽기 전용 템플릿이다. 종종 이미지는 몇 가지 추가 사용자 정의가 포함된 다른 이미지 를 기반으로 한다. 예를 들어, ubuntu 이미지를 기반으로 하는 이미지를 빌드할 수 있지만, Apache 웹 서버 및 응용 프로그램과 응용 프로그램을 실행하는 데 필요한 구성 세부 정보도 설치한다.

이렇게 개발자는 도커를 이용해서 자신이 개발한 프로그램에 필요한 모든 것이 포함되어 있는 도커 이미지를 작성한다. 이미지는 도커의 가장 큰 특징 중 하나로, 개발자가 개발한 환경을 도커 이미지로 만들면 이 이미지를 기반으로 해서 컨테이너가 동작한다. 이렇게 만들어진 이미지는 기본적으로 어디서든 동작한다. ‘테스트 환경에서는 됐는데, 제품 환경에서는 안돈다’라는 리스크를 줄일 수 있게 된다. 이를 통해 지속적 딜리버리가 가능하게 되고 변화에 강한 시스템을 구축할 수 있다.

개발자는 자신만의 이미지를 만들거나 다른 사람이 만들고 레지스트리에 게시한 이미지만 사용할 수 있다. 고유한 이미지를 빌드하려면 이미지를 만들고 실행하는 데 필요한 단계를 정의하기 위한 간단한 구문으로 Dockerfile을 만들어야한다. Dockerfile의 각 명령은 이미지에 계층을 생성한다. Dockerfile을 변경하고 이미지를 다시 빌드하면 변경된 레이어만 다시 빌드되며 이러한 부분은 다른 가상화 기술과 비교해보면 이미지를 매우 가볍고 작고 빠르게 만드는 특징으로 볼 수 있다.

Container

컨테이너는 이미지의 실행 가능한 객체로, Host OS 상에 논리적인 구획을 하는, 즉 컨테이너를 만들고 어플리케이션을 작동하기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것이다. Host OS의 리소스를 논리적으로 분리시키고 여러 개의 컨테이너가 이것을 공유해서 사용한다. 컨테이너는 가벼우며 내부적으로 작동하고 가상화 기술을 사용해서 다양한 기능을 제공한다.

Docker API 또는 CLI를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제가 가능하다. 컨테이너를 하나 이상의 네트워크에 연결하거나, 컨테이너에 저장소를 연결하거나, 현재 상태를 기반으로 새 이미지를 생성할 수도 있다.

기존의 컨테이너를 이용하지 않는 시스템에서는 하나의 OS상에서 움직이는 여러 애플리케이션들에 대한 관리를 해주어야 하고 다양한 디렉토리와 IP주소를 공유하게 된다. 이런 개발 환경에서는 각 어플리케이션이 서로 영향을 받을 가능성이 높았다. 반면에 컨테이너를 활용하면 OS나 디렉토리, IP 주소 등을 각 어플리케이션이 독립적으로 갖고 있는 것처럼 보이게 할 수 있다. 이런 개발 환경을 통해 마이크로 서비스(MSA)를 구현하기 수월하다.

Docker architecture

Docker는 클라이언트-서버 아키텍처를 사용한다. 도커 클라이언트는 도커 컨테이너를 빌드, 실행 및 배포하는 무거운 작업을 수행 하는 도커 데몬과 통신한다. Docker 클라이언트와 데몬은 동일한 시스템에서 실행되거나 Docker 클라이언트를 원격 Docker 데몬에 연결할 수 있다. Docker 클라이언트와 데몬은 UNIX 소켓 또는 네트워크 인터페이스를 통해 REST API를 사용하여 통신한다. 또 다른 Docker 클라이언트는 컨테이너 집합으로 구성된 어플리케이션으로 작업할 수 있는 Docker Compose이다.

Functions of Docker

  • Docker Build, 이미지 만들기
  • Docker Ship, 이미지 공유
  • Docker Run, 컨테이너 실행

Docker Build

Docker는 위와 같이 프로그램 실행에 필요한 프로그램 본체, 라이브러리, 미들웨어, OS, 네트워크 등을 하나로 모아서 이미지로 만든다. 그리고 이 이미지는 컨테이너의 바탕이 된다. 보통 Docker에서 빌드 시에 권장하는 내용은 하나의 이미지에는 하나의 어플리케이션만 넣어 두고, 여러 개의 컨테이너를 조합해 서비스를 구축하는 것이다.

Docker 이미지를 만드는 방법은 Docker 명령어를 사용해 수동으로 만들 수도 있고, Dockerfile이라는 설정 파일을 만들어서 작성한 내용을 바탕으로 자동으로 이미지를 만들 수도 있다. Dockerfile을 이용해 관리하는 것이 지속적인 통합과 지속적인 딜리버리 관점에서 바람직하다.

또한 Docker 이미지는 겹쳐서 사용할 수 있다는 것이 중요한 특징이다. Docker에서는 변경이 있던 부분을 이미지 레이어로 관리한다.

Docker Ship

만들어진 이미지는 Docker Hub를 통해 공유가 가능하다. 많은 이미지가 있으므로 원하는 내용이 있으면 받아서도 사용이 가능하다. 또한 Docker는 github이나 bitbucket과도 연계가 가능하기 때문에 github에서 Dockerfile을 관리하고 이미지를 자동으로 생성해서 Docker Hub에 공개할 수도 있다.

Docker Run

Docker는 리눅스 상에서 컨테이너 단위로 서버 기능을 작동시킨다. 이때 사용되는 것이 Docker Image이다. 이미지만 있다면 여러 대의 컨테이너를 기동시키는 것도 가능하다. Docker는 다른 가상화 기술과는 다르게 떠있는 OS상에서 프로세스를 실행시키는 것과 같은 속도로 빠르게 실행할 수 있다.

VM vs Docker

0개의 댓글