What is Docker?

Sonny__·2023년 4월 7일
post-thumbnail

개발자 도구로써 Docker의 인지도는 Git만큼 높아졌다.(https://survey.stackoverflow.co/2022/#most-popular-technologies-tools-tech-prof) 많은 기업에서도 Docker에 대한 지식을 요하거나 또는 전환하는 과정을 진행하고 있다. 많은 인기를 누리고 있는 Docker에 대해서 공부해보고자 한다.

1. Docker란?

ChatGPT 답변:
도커(Docker)는 컨테이너 기술을 이용하여 애플리케이션을 패키징하고 배포하는 플랫폼이다. 애플리케이션을 실행하는 환경을 컨테이너로 분리하여 호스트 운영체제와는 독립적인 실행 환경을 제공하며, 이를 통해 애플리케이션의 배포 및 확장성, 개발자의 작업 효율성 등을 높일 수 있다. 도커는 빠른 배포와 확장성, 효율적인 자원 활용 등으로 인해 클라우드 네이티브 애플리케이션 개발 및 운영에서 핵심적인 역할을 담당하고 있다.

하나씩 뜯어보도록 하자🤔

  • Open Platform 이다.
  • 컨테이너로 분리한다.
  • 호스트 운영체제와 독립적인 실행환경을 제공한다.
  • 빠른 배포와 확장성, 효율적인 자원활용을 가능하게 한다.



2. 컨테이너 기술이란?

  • 가상화 기술 중 하나

  • 호스트 운영체제 위에 여러 개의 격리된 환경을 생성

  • 각각의 컨테이너 안에서 애플리케이션을 실행

  • 리눅스 커널의 기능을 사용하여 만들어짐

  • 프로세스 단위의 격리 환경

    Q. 도커는 리눅스에서만 사용해야하는가?
    A. 그렇지 않다. 하이퍼바이저가 중간에 역할을 해주어서 윈도우나 맥에서도 가능하게 한다.
    하지만 컨테이너는 리눅스 커널을 기반으로 돌아가는 기술이다.
    Q. 그냥 프로그램 실행하는 것과 무엇이 다른건가?
    A. 로컬환경 이외에서도 동일한 환경을 사용 가능한 것



3. 가상화 기술이란?

  • 고성능 서버를 조금 더 안정적이고 효율적으로 사용할 수 있을까?

    ChatGpt 답변 :
    가상화 기술은 하드웨어 자원을 가상적으로 분리하여 여러 개의 가상 환경을 구축하고, 각각의 환경에서 독립적으로 운영체제와 응용 프로그램을 실행할 수 있는 기술이다. 이를 통해 서버의 물리적인 자원을 효율적으로 활용하고, 여러 개의 가상 환경을 별도로 관리할 수 있어서 시스템 유지 보수 및 관리의 효율성을 높일 수 있다.

  • 즉, 물리적인 컴퓨터 자원을 가상적으로 분할하여 여러개의 가상 컴퓨터 환경을 만들어내는 기술.

  • 물리적인 컴퓨터 자원을 효율적으로 사용가능하고, 시스템을 운영하는데 유연성과 안정성을 제공한다.

  • 하이퍼바이저(Hypervisor)

    • 가상머신을 생성하고 구동하는 소프트웨어
    • 호스트 OS와 게스트 OS 간의 인터페이스 역할을 한다.
    • OS들의 요청을 번역하여 하드웨어에 전달한다.
    • OS에 자원을 할당하고 조율한다.
  • 가상화 기술에는 VMWare, VirtualBox, Hyper-V등이 있다.



4. 그렇다면 Virture Machine과 Container의 차이점은?

  • 가상화의 단위가 다르다.

  • 가상화 기술은 하나의 호스트 운영체제 위에 가상 머신을 생성하고, 각각의 가상 머신은 독립적인 운영체제를 실행한다.

  • 컨테이너 기술은 하나의 운영체제 위에서 여러 개의 컨테이너를 생성하고, 각각의 컨테이너는 호스트 운영체제와 커널을 공유하며 독립된 파일 시스템과 프로세스를 가진다.

가상화 기술의 단점 :
가상화 기술은 호스트 운영체제와 가상 머신 간의 인터페이스 레이어가 필요하기 때문에, 실행 속도가 느리고 무겁다는 단점이 있다. 또한, 가상화 기술은 하나의 가상 머신에 여러 개의 애플리케이션을 실행할 수 있지만, 이는 다양한 운영체제와 라이브러리를 설치해야 하기 때문에 컨테이너 기술보다 자원 낭비가 심하다는 단점이 있다.

컨테이너 기술의 장점 :
컨테이너 기술은 호스트 운영체제와 커널을 공유하기 때문에, 실행 속도가 빠르고 경량화된다는 장점이 있다. 또한, 컨테이너 기술은 이미지로부터 빠르게 컨테이너를 생성하고, 호스트 운영체제와 커널을 공유하기 때문에 매우 빠르게 애플리케이션을 실행할 수 있다는 장점이 있다.



5. 그렇다면 다시 Docker에 대해 돌아가보자

  • 컨테이너 기반 가상화 도구
    • 리눅스 컨테이너 기술인 LXC(Linux Containers)기반
  • 애플리케이션을 컨테이너라는 단위로 격리하여 실행하고 배포하는 기술
    다양한 운영체제에서 사용할 수 있으며, 컨테이너화된 애플리케이션을 손쉽게 빌드, 배포, 관리할 수 있는 다양한 기능을 제공
  • 위 기능들을 통해 어플리케이션을 빠르게 개발하고, 효율적으로 배포, 관리할 수 있음.



6. Docker Architecture

출처 : https://docs.docker.com/get-started/overview/

1) Docker demon (= dockerd)

  • 도커 엔진의 핵심 구성 요소
  • Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리한다.
  • 데몬은 다른 데몬과 통신하여 Docker 서비스를 관리할 수 있다.
  • 도커 호스트에서 컨테이너를 관리하고 실행
  • 컨테이너를 생성, 시작, 중지, 삭제하는 등의 작업을 수행
  • 컨테이너 이미지를 관리하고 외부에서 이미지를 다운로드하고 빌드하는 작업을 수행

2) Docker Client

  • Docker 사용자가 Docker와 상호 작용하는 기본 방법.
  • Docker 클라이언트는 둘 이상의 데몬과 통신할 수 있습니다.
  • docker run, docker build, docker pull 등..

3) Docker Object

  • Docker Image
    • Docker 컨테이너를 만들기 위한 읽기 전용 템플릿.
    • 예를 들어 이미지를 기반으로 하는 이미지를 빌드할 수 ubuntu 있지만 Apache 웹 서버와 애플리케이션은 물론 애플리케이션을 실행하는 데 필요한 구성 세부 정보도 설치합니다.
    • Dockerfile를 통해 이미지를 만들고 실행한다.
  • Docker Container
    • 컨테이너는 이미지의 실행 가능한 인스턴스
    • 어플리케이션을 실행하기 위한 모든 파일과 설정 정보를 포함하는 패키지
    • Docker API 또는 CLI를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있다.

4) Docker Registry

  • Docker 레지스트리는 Docker 이미지를 저장하고 관리하는 곳.
  • Docker Hub는 누구나 사용할 수 있는 공개 레지스트리
  • Docker는 기본적으로 Docker Hub에서 이미지를 찾도록 구성되어 있고, 개인 레지스트리를 실행할 수도 있다.
  • docker pull또는 docker run명령을 사용하면 구성된 레지스트리에서 필수 이미지를 가져오고 docker push을 사용하면 이미지가 구성된 레지스트리로 푸시된다.

원티드 프리온보딩 4월 백엔드 강의 수강 후 정리한 내용입니다.

profile
오늘도 즐거운 하루 보내세요:)

0개의 댓글