ABOUT ME

Today
Yesterday
Total
  • [27일차] 컨테이너 & Docker
    교육/코드스테이츠 2023. 1. 3. 18:16

    https://aws.amazon.com/ko/docker/

     

    컨테이너

    논리적인 공간(컨테이너)을 만들어 다양한 어플리케이션을 설치해 하나의 서버처럼 사용할 수 있는 패키지

    하나의 공간에 다양한 물건을 담아 옮기고, 각 서버에서 컨테이너를 구동해 그 안에 존재하는 어플리케이션을 별도의 설정 없이 쉽게 사용할 수 있다. 컨테이너는 배포에 최적화 되어있고 호스트의 OS가 달라도 어디서든 구동 시킬 수 있다는 장점이 있다.

     

    가상머신과 컨테이너

    • 가장 큰 차이점은 OS가상화이다.
    • 가상머신은 OS별로 별도의 공간을 구상해줘야 하는데 컨테이너는 그럴 필요가 없다.
    • 대표적인 가상머신으로 VMware나 VirtualBox가 있다.
    • OS 가상화는 사용하려는 OS를 호스트 OS와 독립하는 방식이 아닌, 커널만 공유하여 '프로세스'로 실행하는 개념이다. 별도의 공간이나 메모리 등을 설정해야하는 가상머신 보다 호스트에게 부담도 적고, 실행 속도도 빠르다는 장점이 있다. OS에 상관없이 즉시 애플리케이션 실행 환경을 만들 수 있습니다.
    • 개발을 컨테이너 위에서 진행할 경우, 모든 개발팀이 동일한 환경 하에 개발을 진행할 수 있습니다.

    • 컨테이너 기술의 가장 큰 장점은 실행 환경의 일치이다. 더 많은 트래픽으로 인한 서버 증설에 컨테이너 기술은 아주 활발하게 이용되고 있다. 동일한 애플리케이션 구성(이미지)을 바탕으로 새로운 서버에 해당 애플리케이션을 컨테이너로 실행하고, 로드 밸런서에 이 서버를 추가하기만 하면 된다

     

    컨테이너 특징

    • 컨테이너 기술은 애플리케이션을 컨테이너 내에 구성하다. 즉, 컨테이너에서 실행 중인 애플리케이션은 어떠한 의존성도 공유하지 않고, 각자 고유의 의존성을 포함한다
    • 컨테이너는 배포에 특화되어 있어, 컨테이너 플랫폼만 서버에 존재한다면 쉽게 뿌리고 구동이 가능하다.
    • 컨테이너에 구동된 환경을 이미지화 할수 있다. 가상머신의 스냅샷과 비슷한 개념으로, 이런 이미지들을 만들어 웹 상에서 공유, 다운로드 하여 깃허브 처럼 필요한 환경을 자유자재로 사용할 수 있다.

     

    도커

    • docker는 애플리케이션을 개발, 배포 및 실행하기 위한 Open platform 이다.
    • container라고 하는 격리된 환경에서 애플리케이션을 패키징하고 실행할 수 있는 기능을 제공한다.
    • 애플리케이션들을 인프라에서 분리하여 빠르게 소프트웨어를 배포할 수 있고 동일한 방식으로 인프라를 관리할 수 있다
    • 격리 및 보안을 통해 주어진 호스트에서 많은 컨테이너를 동시에 실행할 수 있다
    • 컨테이너는 가볍고 애플리케이션을 실행하는 데 필요한 모든 것을 포함하므로 현재 호스트에 환경에  의존할 필요가 없다.
    • 작업하는 동안 컨테이너를 쉽게 공유할 수 있으며 공유하는 모든 사람이 동일한 방식으로 작동하는 컨테이너를 갖게 된다.

     

    도커의 장점

    • 빠르고 일관된 애플리케이션 제공

    애플리케이션 및 서비스를 제공하는 로컬 컨테이너를 표준화된 환경에서 작업할 수 있도록 하여 개발 단계를 간소화한다.

    컨테이너는 CI/CD Workflow에 적합하다.

     

    • 반응형 배포 및 확장

    Docker의 컨테이너 기반 플랫폼은 Workloads 휴대성이 뛰어나다.

    Docker 컨테이너는 개발자의 로컬 랩톱, 데이터 센터의 물리적 또는 가상 머신, 클라우드 공급자 또는 혼합 환경에서 실행할 수 있다.

    Docker의 휴대성과 가벼운 특성 덕분에 워크로드를 쉽게 동적으로 관리할 수 있으며, 비즈니스 요구 사항에 따라 거의 실시간으로 애플리케이션과 서비스를 확장하거나 축소할 수 있다.

     

    컨테이너 자원

    • 프로세스

    특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스할 수 있다.

    컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없다.

     

    • 네트워크

    기본으로 컨테이너 하나에, 하나의 IP 주소가 할당되어 있다.

     

    • 파일 시스템

    컨테이너 안에서 사용되는 파일 시스템은 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있다.

     

    도커 아키텍처

    dockerclient-server 아키텍처를 사용한다.

    docker client는 docker daemon과 통신하여 빌드, 실행하기 위해 사용자의 Docker container에 배포 한다.

    docker clientdaemon은 동일한 시스템에서 실행하거나 Docker client를 원격 Docker daemon에 연결할 수 있다.

    docker clientdaemonUNIX 소켓 또는 네트워크 인터페이스를 통해 REST API를 사용하여 통신한다.

    docker Compose를 사용하여 컨테이너들을 세트로 애플리케이션을 빠르게 구성할 수도 있다

     

    • 도커 데몬

    도커 데몬(dockerd)은 도커 API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 도커 객체를 관리한다.

    데몬은 도커 서비스를 관리하기 위해 다른 데몬과 통신할 수도 있다.

     

    • 도커 클라이언트

    도커 클라이언트는 사용자가 도커와 상호 작용하는 기본 방법이다.

    docker run과 같은 명령을 사용할 때 클라이언트는 이러한 명령을 도커 데몬에 보내고 이를 수행한다.

    도커 명령은 도커 API를 사용한다

    도커 클라이언트는 둘 이상의 데몬과 통신할 수 있다

     

    • 도커 레지스트리

    도커 이미지를 저장한다.

    도커 Hub는 누구나 사용할 수 있는 공개 레지스트리이며 도커는 기본적으로 docker Hub에서 이미지를 찾도록 구성됨

    자신의 개인 레지스트리를 실행할 수도 있다.

    docker pull 또는 docker run 명령을 사용하면 구성된 레지스트리에서 필수 이미지를 가져올 수 있다.

    docker push 명령을 사용하면 설정된 레지스트리로 이미지가 푸시된다.

    출처: https://www.whizlabs.com/blog/docker-architecture-in-detail/

     

    도커 objects

    도커를 사용하면 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 및 기타 객체를 만들고 사용한다

     

    • Images (object)

    이미지는 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿으로, 이를 이용해 즉시 컨테이너를 만들 수 있다.

    종종 이미지는 몇 가지 추가 사용자 정의가 포함된 다른 이미지를 기반으로 한다.

    예를 들어, 우분투 이미지를 기반으로 하는 이미지를 빌드할 수 있지만 Apache 웹 서버와 애플리케이션은 물론 애플리케이션을 실행하는 데 필요한 구성 세부 정보도 설치한다.

    실행되는 모든 컨테이너는 이미지로부터 생성된다.

    이미지를 이용해 여러 개의 컨테이너를 생성할 수 있다. 이를 이용해 애플리케이션의 수평 확장이 가능하다.

    고유한 이미지를 빌드하려면  Dockerfile을 만든다.

    Dockerfile의 각 명령은 이미지에 계층을 생성한다.

    Dockerfile을 변경하고 이미지를 다시 빌드하면 변경된 레이어만 다시 빌드된다.

    • 다른 가상화 기술과 비교할 때 이미지를 매우 가볍고 작고 빠르게 만든다.

     

    • Containers (object)

    컨테이너는 이미지의 실행 가능한 인스턴스로 이미지와 컨테이너를 만들거나 시작할 때 제공하는 구성 옵션으로 정의된다.

    컨테이너를 하나 이상의 네트워크에 연결하거나, 컨테이너에 스토리지를 연결하거나, 현재 상태를 기반으로 새 이미지를 생성할 수도 있다.

    컨테이너의 네트워크, 스토리지 또는 기타 기본 하위 시스템이 다른 컨테이너나 호스트 시스템과 얼마나 격리되어 있는지 제어할 수 있다.

    컨테이너가 제거되면 영구 저장소에 저장되지 않은 상태로 변경 사항이 사라진다.

     

    기반 기술

    DockerGo 프로그래밍 언어로 작성되었으며 리눅스 커널의 여러 기능을 활용하여 기능을 제공한다.

    Dockernamespaces라는 기술을 사용하여 컨테이너라는 격리된 작업 공간을 제공한다.

    컨테이너를 실행할 때 도커는 해당 컨테이너에 대한 네임스페이스 세트를 생성한다.

    이러한 namespaces는 격리 계층을 제공하며 컨테이너의 각 측면은 별도의 네임스페이스에서 실행되고 액세스는 해당 네임스페이스로 제한된다

     

    ============================================================================

    참고

    코드스테이츠

    https://www.whizlabs.com/blog/docker-architecture-in-detail/

     

    Docker Architecture in Detail - Whizlabs Blog

    Aspiring to know about the docker architecture and its working in detail? Let’s dive in!

    www.whizlabs.com

     

Designed by Tistory.