Docker의 개념

728x90

도커(Docker)란?

docker

 

도커(Docker)는 컨테이너화된 애플리케이션을 만들고 배포하기 위한 오픈 소스 플랫폼이다.

각 컨테이너는 필요한 모든 소프트웨어를 포함하며 호스트 환경과 독립적으로 실행된다.

이를 통해 애플리케이션을 일관되게 작동하도록 보장하고 다양한 환경에서 쉽게 실행할 수 있다.

 

도커는 왜 사용하는가?

도커는 여러가지 장점으로 인해 많은 사용되고 있다. 

도커와 비교되는 VM과의 차이와 도커의 장점을 확인하고 왜 사용되는지 알아보자.

도커의 장점

  1. 컨테이너화
    • 격리된 환경: 도커는 애플리케이션과 그 종속성을 격리된 컨테이너로 패키징한다. 이를 통해 여러 애플리케이션이 동일한 시스템에서 충돌 없이 실행될 수 있다.
    • 이식성: 도커 컨테이너는 동일한 환경에서 실행되므로 개발 환경에서의 코드가 프로덕션 환경에서도 동일하게 동작한다. 이를 통해 "It works on my machine" 문제를 해결한다.
  2. 일관성 있는 개발 환경
    • 환경 설정 간소화: 개발자들은 도커를 사용하여 동일한 개발 환경을 설정하고 이를 팀원과 공유할 수 있다. 이는 개발 및 테스트 과정에서 발생할 수 있는 환경 차이로 인한 문제를 줄여준다.
  3. CI/CD 통합
    • 자동화: 도커는 CI/CD 파이프라인에서 자동화된 빌드, 테스트 및 배포 프로세스를 쉽게 설정할 수 있게 해준다. 이는 개발 주기를 단축하고 오류를 조기에 발견할 수 있도록 도와준다.
  4. 리소스 효율성
    • 경량화: 도커 컨테이너는 VM(가상 머신)에 비해 경량이며 시작 속도가 빠르다. 따라서 서버 자원을 보다 효율적으로 사용할 수 있다.
    • 스케일링: 컨테이너는 필요에 따라 빠르게 생성하고 제거할 수 있어 애플리케이션을 수평으로 쉽게 확장(scale out)할 수 있다.
  5. 다중 컨테이너 지원
    • 다중 컨테이너: 하나의 서버에 다중 컨테이너를 동작시켜 다양한 어플리케이션들을 조합하여 원하는 서버로 구동이 가능하다.
      • WAS + DB : 하나의 서버에서 Spring 과 MySQL 을 각각 따로 동작 및 연결
      • WAS + Logstash : 하나의 서버에서 Spring 에서 생성하는 로그를 Logstash 가 수집, 가공, 전송

 

도커와 가상머신(VM) 비교

도커 컨테이너와 가상머신(VM) 비교

 

가상머신(VM)

  • 하이퍼바이저를 통해 호스트시스템에서 여러 개의 가상머신을 실행 가능하다.
  • 각 가상머신은 완전히 분리된 운영체제, 애플리케이션, 바이너리 등 가진다.
  • 각 가상머신은 완전한 운영체제를 실행하기 때문에 많은 양의 메모리와 CPU를 사용한다.

 

도커(Docker)

  • 도커는 컨테이너를 통해 호스트 OS 커널을 공유하면서 각각의 컨테이너들이 독립된다.
  • 호스트의 OS 커널을 공유하기 때문에 컨테이너가 별도의 운영체제를 실행하지 않는다.
  • 운영체제 수준에서의 가상화를 통해 리소스를 효율적으로 사용한다.

 

도커 핵심개념

도커 파일 (Dockerfile)

도커 파일(Dockerfile)은 도커 이미지를 생성하기 위한 명세서로 애플리케이션을 컨테이너로 패키징할 때 필요한 모든 설정을 담고 있다. 도커 파일은 일반적으로 텍스트 형식으로 작성되며 어떤 운영체제를 기반으로 할지 어떤 소프트웨어 패키지를 설치할지 애플리케이션을 어떻게 실행할지를 정의한다.

 

도커 이미지(Docker Images) : Bins/Libs 집합

도커이미지는 컨테이너를 생성하는데 사용되는 템플릿이다. 애플리케이션과 실행을 위한 필요한 모든 종속성 및 라이브러리를 포함한다.

이미지에는 컨테이너를 실행하기 위한 모든 파일과 설정을 포함하고 있어,

어떤 환경에서든 동일한 애플리케이션을 실행할 수 있게 도와준다.

모든 파일과 설정 : 앱 구동 시 필요한 라이브러리, 실행파일, 환경 변수 등
애플리케이션 : 구동 시킬 앱으로 예를들어 .jar 파일

 

도커 컨테이너(Docker Container)

도커 컨테이너는 앱의 각 구성요소에 대해 격리된 프로세스이다.

각 컨테이너는 호스트 시스템에 사전 설치된 종속성에 의지하지 않고 격리되어 실행되므로

호스트 및 다른 컨테이너에 미치는 영향을 최소화한다.

도커 엔진에서 실행되는 도커 컨테이너는 표준성, 경량성, 보안성을 강조하고 있다. 

 

도커 데몬(Docker Daemon)

도커 데몬은 도커의 백그라운드에서 실행되는 서비스이다.

도커 클라이언트를 통해 사용자가 도커 데몬과 소통하게 된다.

 

도커 클라이언트(Docker Client)

도커 클라이언트는 사용자가 도커 데몬과 소통할 수 있게 만드는 커맨드 라인 인터페이스(CLI)이다.

클라이언트를 통해 컨테이너 실행, 정지, 삭제 등의 동작과 도커 이미지를 생성하고 관리할 수 있다.

 

도커 허브(Docker Hub)

도커 허브는 도커 이미지를 공유하고 배포할 수 있는 서비스이다.

공식 이미지를 찾거나 본인이 만든 이미지를 공유할 수 있다.

 

결론적으로 도커는 컨테이너 기술을 활용하여 애플리케이션의 배포와 관리 효율적으로 만들어준다.
일관된 환경, 자원 사용 최적화, 배포 시간 단축, 확장성 등 여러가지 장점이 있어 최근 많이 사용되고 있는 것이다.

 

 

 

참고자료

 

Guides

Explore the Docker guides

docs.docker.com

 

728x90