Docker (정의/장점/구성요소)

모선·2024년 2월 27일
post-thumbnail

🌿도커(Docker)란?

리눅스 컨테이너에 어플리케이션을 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트이다.

도커 엔진은 컨테이너를 생성하고 관리하는 주체이다. 컨테이너를 제어할 수 있고, 다양한 기능을 제공한다. 도커 엔진을 효율적으로 사용하기 위해 도커 속 여러 프로젝트들이 있는 것이다.

👍장점 (가상머신 vs 도커 컨테이너)

가상화

호스트인 단일 컴퓨가 자체의 운영체제, 프로세서 코어, 메모리, 스토리지 및 네트워킹을 사용해서 여러 가상 머신을 실행할 수 있다. 이를 통해 IT 비용을 절감할 수 있다.


이미지 출처: OCI

🌱 가상머신 (Virtual Machine)

하이퍼바이저를 사용해서 여러 운영체제를 하나의 호스트에서 생성해서 사용한다.
여기서 운영체제는 가상머신이라는 단위로 구분되고, 우분투 같은 운영체제가 설치돼서 사용되기 때문에 이를 게스트 운영체제 라고 불린다. 가상머신은 다른 가상머신들과는 독립된 공간과 시스템 자원을 할당받아 사용한다.

*하이퍼바이저 : 가상머신을 호스트 컴퓨터에서 실행하고 프로세서, 메모리 및 스토리지를 배포할 수 있도록 해주는 소프트웨어 계층이다. 가상머신 모니터 라고 하며, 여러 가상머신이 실행 및 모니터링되는 가상 플랫폼을 만든다.

단점

  • 가상화 및 독립된 공간 생성 작업은 하이퍼바이저를 반드시 거쳐야 해서 일반 호스트에 비해 성능 손실이 발생한다.
  • 게스트 운영체제를 사용하기 위한 라이브러리, 커널 등을 모두 포함하고 있기 때문에 배포할 때 만든 이미지의 크기가 커진다.

🌱 도커 컨테이너 (Docker Container)

  • 리눅스 자체 기능(chroot, namespace, cgroup)을 사용해서 가상화된 공간 및 격리 환경을 만들기 때문에 성능 손실이 거의 없다.
  • 컨테이너에 필요한 커널을 공유해서 사용하고, 어플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 있기 때문에 배포할 때 이미지의 용량이 줄어든다.

즉, 배포하는 시간도 가상머신 보다 짧고, 성능 손실도 거의 없다!

💛 구성요소


이미지 출처: Docker 홈페이지

Docker daemon (dockerd) : 도커 엔진

Docker API에 따라 이미지, 컨테이너, 네트워크 등의 도커 오브젝트들을 관리한다. 다른 daemon과 통신할 수도 있다.

Client

도커 사용자들이 도커를 사용하는 방법이다. 사용자가 입력한 명령어를 도커 엔진에 전달하고, 수행하게 된다.

Docker Host

도커가 띄워져있는 서버이다. 컨테이너와 이미지를 관리한다.

Docker registry

외부 이미지 저장소이다. docker pull 명령어를 통해 필요한 이미지를 가져올 수 있고, 가져온 이미지를 docker run하면 컨테이너가 된다. docker push 를 통해 이미지를 푸시할 수 있다.

Docker Image

먼저, 도커 이미지는 Docker File을 사용하여 docker build 명령어를 실행하면 만들어진다. 그 후에 해당 이미지와 Docker run 명령어를 통해 Docker Container가 만들어진다.

도커 이미지는 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용되며, 여러 계층으로 binary 파일로 존재한다.

[저장소 이름]/[이미지 이름]:[태그]

  • 저장소 이름 : 이미지의 저장소. 명시되어 있지 않은 이미지는 도커 허브의 공식 이미지라는 뜻이다.
  • 이미지 이름 : 이미지의 역할. 필수로 설정해야 한다. (ex. ubuntu -> 우분투 컨테이너를 생성하기 위한 이미지라는 뜻)
  • 태그 : 이미지의 버전. 생략하면 latest로 인식한다.

Docker Container

이미지의 실행 가능한 인스턴스이다. Docker API 또는 CLI를 사용해서 컨테이너를 생성/시작/중지/이동/삭제를 한다. 컨테이너를 네트워크나 스토리지를 연결하거나 새로운 이미지를 만들 수도 있다.

컨테이너는 이미지에 의해 정의되며, 다른 컨테이너 및 호스트 시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있다. 따라서 특정 컨테이너에서 수정사항이 생겨도 다른 컨테이너와 호스트는 변경 사항이 없다.

컨테이너는 이미지를 읽기 전용으로 사용하되, 이미지에서 변경된 사항만 컨테이너 계층에 저장하기 때문에 컨테이너에서 무엇을 해도 이미지는 영향을 받지 않는다.

참고 사이트

https://seosh817.tistory.com/345
https://docs.docker.com/get-started/overview/

profile
https://hy5sun.tistory.com/ << 이사중

0개의 댓글