SteadyDrills

Docker란? 본문

CS

Docker란?

Drills 2024. 12. 3. 21:22

241203

 

 

 

목차

     

     

     

    Docker란?


    Docker는 소프트웨어를 컨테이너 화하여 각각의 격리된 환경에서 애플리케이션의 배포 및 관리를 용이하게 하는 플랫폼이다. 다양한 환경설정이 가능하며, 빠른 배포가 가능하다. 또한 Docker를 사용하면 애플리케이션을 관리하는 것과 같은 방식으로 인프라를 관리할 수 있다.

     

    Docker를 사용하는 이유

    • 쉽고 빠른 배포
      • 환경 설정의 자동화 및 일관성 덕분에 개발자가 더 빠르게 코드를 작성하고 테스트할 수 있어, 전체 개발 주기가 단축할 수 있다.
      • 컨테이너는 가볍고, 호스트 OS의 커널을 공유하기 때문에 몇 초 이내에 시작되며, 이것은 대규모 배포에서 빠른 응답성을 제공한다.
    • 확장성과 리소스 효율성
      • AWS 같은 클라우드 플랫폼에서 AWS의 오토 스케일링과 같은 기능을 사용하여 트래픽에 따라 컨테이너를 자동으로 확장하거나 축소할 수 있습니다. 이를 통해 리소스(자원)를 효율적으로 사용할 수 있다.
      • Docker는 가볍고 효율적이다. 여러 컨테이너를 하나의 서버에서 동시에 실행할 수 있기 때문에 서버 자원을 효율적으로 사용할 수 있다.
    • 테스트 및 배포 자동화
      • 개발, 테스트, 프로덕션 환경의 일관성을 갖게 해서 개발자가 작성한 코드가 테스트 및 프로덕션 환경에서도 동일하게 동작함을 보장한다.
      • Docker를 사용하면 CI/CD(지속적 통합 및 배포) 파이프라인을 쉽게 구축할 수 있다. 이를 통해 코드가 푸시될 때마다 자동으로 테스트되고 배포되는 프로세스를 설정할 수 있어 개발 속도와 품질을 크게 향상시킬 수 있다.

     

    가상머신(Virtual Machine)과 컨테이너(Container)의 차이

     

     

     

    Docker 구성 요소


    Docker Engine

    • Docker Engine은 도커의 핵심 구성 요소로, 컨테이너를 생성하고 관리하는 데 필요한 서버 사이드 애플리케이션이다.
    • 클라이언트-서버 아키텍처로 구성되어 있으며, Docker Daemon과 Docker CLI로나눌 수 있다.

    Docker Daemon: 컨테이너를 실행하고 관리하는 백그라운드 프로세스. Docker CLI: 사용자가 도커 명령을 입력하는 커맨드 라인 인터페이스.

    Dockerfile

    • Dockerfile은 Docker 이미지를 만들기 위한 스크립트 파일로 이미지의 설정 및 구성 정보를 포함한다.
    • 애플리케이션의 환경 설정, 필요한 패키지 설치, 실행 명령 등을 정의하며, 단계별로 이미지를 빌드하여 Docker 이미지를 재현 가능한 상태로 유지하게 도와준다.

    Docker Image

    • Image는 컨테이너를 생성하기 애플리케이션과 그 종속성을 포함한 읽기 전용 템플릿이다.
    • 이미지는 레이어로 구성되어 있으며, 각 레이어는 파일 시스템의 변경 사항을 포함해서, 중복을 줄이고, 효율적인 저장과 전송을 가능하게 한다.
    • Dockerfile을 기반으로 빌드되며, 한 번 빌드된 이미지는 여러 환경에서 동일하게 실행할 수 있다.

    Docker Container

    • Container는 도커 이미지의 실행 인스턴스로, 애플리케이션과 그 종속성이 격리된 환경에서 실행되는 프로세스를 말한다.
    • 각 컨테이너는 독립적으로 작동하며, 가볍고 빠르게 시작 및 종료할 수 있다. 또한 필요에 따라 언제든지 재생성할 수 있다.

    Docker Compose

    • Docker Compose는 여러 개의 컨테이너를 정의하고 관리하기 위한 도구이다.
    • 복잡한 애플리케이션을 쉽게 설정하고 실행할 수 있으며, 전체 스택을 한 번에 시작하거나 중지할 수 있다.

     

    도커의 작동 순서

     

    Docker의 장단점


    장점

    • 일관된 환경 제공
      • Docker를 사용하면 애플리케이션이 항상 동일한 환경에서 실행할 수 있다. 개발 환경, 테스트 환경, 배포 환경이 동일한 컨테이너 안에서 실행되므로, "내 로컬에서는 잘 돌아가는데 서버에서는 안 돌아가는" 문제를 방지할 수 있다.
    • 격리된 환경에서 실행
      • 컨테이너는 독립된 실행 환경을 제공합니다. 각 컨테이너는 자체적으로 라이브러리와 종속성을 가질 수 있으며, 다른 애플리케이션과 충돌할 위험이 없다.
    • 빠른 배포 및 롤백
      • Docker 이미지를 기반으로 컨테이너를 실행하는 방식이므로, 빠르게 배포할 수 있다. 특정 버전의 이미지를 사용하여 과거 버전으로 쉽게 롤백할 수도 있다.
    • 경량화
      • Docker 컨테이너는 가상 머신(VM)과 달리 호스트 OS 커널을 공유하므로 가상 머신보다 경량화되어 있으며, 더 적은 자원을 사용한다. 또한 애플리케이션과 그 종속성만 포함하여 실행되므로, VM에 비해 상대적으로 적은 크기를 차지한다.

    단점

    • 학습 곡선
      • Docker와 관련된 개념(컨테이너, 이미지, 네트워크, 볼륨, Dockerfile 등)을 이해하는 데 다소 시간이 걸릴 수 있다. 특히, Docker Compose나 Kubernetes와 같은 오케스트레이션 도구를 사용할 경우 더 많은 학습이 필요하다.
    • 복잡한 디버깅
      • Docker 환경에서 발생하는 오류나 버그를 디버깅하는 것은 로컬 환경에 비해 더 복잡할 수 있다. 특히 네트워크 문제나 데이터베이스 연결 문제 등은 디버깅이 쉽지 않다.
    • 네트워킹 복잡성
      • 여러 개의 컨테이너가 통신해야 하는 경우, 네트워크 설정이 복잡해질 수 있다. 이것을 해결하기 위해서는 다른 설정이 필요하다.

    'CS' 카테고리의 다른 글

    메모리에 저장 VS 하드에 저장  (0) 2024.12.27
    캐싱(Caching)  (0) 2024.12.24
    RDBMS와 NoSQL의 차이  (2) 2024.12.02
    NoSQL  (0) 2024.11.29
    RDBMS (관계형 데이터베이스 관리 시스템)  (1) 2024.11.28