[Docker]Docker에 대해 알아보자.

Junseo Jung·2024년 4월 18일
0

Docker

목록 보기
1/2
post-thumbnail

Docker?

: 컨테이너 기반 오픈소스 가상화 플랫폼

Why Docker?

  1. OS와 상관 없이 어디서든 사용 가능하다.
  2. Virtual Machine에 비해 가볍다.
  3. 이미지의 재사용및 버전 관리가 가능하다.
  4. 보편화 되어있어 사용 가능한 이미지가 많다.

Container?

: 데스크톱, 클라우드 등 어디서나 실행할 수 있도록 애플리케이션 코드를 해당 라이브러리 및 종속 항목과 함께 패키징한 소프트웨어 실행 유닛

  • OS를 가상화 하여 사용

컨테이너 v.s 가상화

  • 가상화: hypervisor가 물리적인 하드웨어를 가상화 한다. 따라서 OS구동에 필요한 라이브러리 등을 포함하며 이를 통해 다른 OS를 구동시킬 수 있다.
  • 컨테이너: OS를 가상화 하므로 애플리케이션과 해당 라이브러리만 포함된다. 가상화에 비해 가볍고 이식성이 높다.


Docker 용어 정리

  • DockerFile : 컨테이너 이미지의 빌드 방법에 관한 지시사항이 포함된 텍스트 파일. 즉, DockerFile을 통해 이미지 생성을 자동화 한다.
  • Docker Image : 소스코드 + 라이브러리, 이미지를 실행하게 되면 컨테이너의 한 인스턴스가 된다. 즉, 컨테이너를 생성하는데 사용되는 파일이다. 이미지는 여러개의 읽기 전용 layer로 구성되며 파일이 추가되면 그 위에 새로운 layer가 생성된다. 이는 github처럼 push, pull이 가능하며 바뀐 레이어에 대해서만 주고받아 빠르게 변경이 가능하다.
  • Docker Container : Docker Image의 현재 실행 중인 라이브 인스턴스이다.
  • Docker Hub : Github와 유사하게 Docker를 위한 공용 이미지 저장소이다. 인증된 이미지가 존재하며 사용자가 직접 이미지를 올릴 수 있다.
  • Docker Registry : 오픈소스 이미지 저장 / 배포 시스템이다. Docker Hub의 경우 이미지가 공개되기 때문에 Registry를 통해 private하게 관리할 수 있다. 대부분의 클라우드 서비스는 각자의 Docker Registry를 제공한다.
  • Docker Compose : 여러개의 컨테이너를 하나의 호스트에서 실행시키는데 도움을 준다.
  • Container Orchestration : 대규모 애플리케이션을 배포할 수 있도록 컨테이너의 네트워킹 및 관리를 자동화하는 프로세스

    Docker만 존재하는 경우 문제점.

    • 도커만 사용 시 모든 서버에서 직접 docker stop, run을 실행해야 함

    • 로드 밸런싱의 어려움

    • 장애 발생 시 컨테이너 로그를 보고 직접 대응

    • 클러스터를 통한 관리

      > 클러스터: 어플리케이션 컨테이너를 실행하기 위한 노드 머신, 하나 이상의 컴퓨터가 존재하는 추상화된 단위. 클러스터 단위로 유지 관리하므로써 환경에 관계없이 컨테이너 관리 가능
      > 
  • Kubernetes : Container Orchestration 기술 중 하나. Google 내부용 개발에서 시작. 서버리스 컴퓨팅을 가능하게 함.

Docker 상식

  • 컨테이너에서 파일은 어떻게 존재하나요? : 컨테이너 별로 가상화된 파일시스템이 존재하고 해당 시스템에 파일이 존재하게 된다. 따라서 접근하기 위해서는 해당 도커 컨테이너를 통해 접근가능하다. 컨테이너의 파일시스템을 호스트에 mount하면 호스트에서도 접근이 가능하다. 컨테이너 별로 파일시스템이 존재하므로 컨테이너를 삭제하게 되면 해당 컨테이너에 존재하고 있던 파일까지 사라지게 된다.
  • 배포 방식은 어떻게 되나요? : 도커를 통해 이미지를 빌드하고 해당 빌드한 이미지를 Docker Registry 또는 Docker Hub를 통해 배포하고자 하는 클라우드에 넣게 된다. 이후 해당 이미지를 실행시켜 배포를 진행한다.
  • localhost가 어떻게 되나요? : 도커는 각각의 컨테이너가 호스트 위에 올라가고 컨테이너끼리 구분되어 있으므로 서로 다른 컨테이너는 서로 다른 localhost를 가지게 된다. 따라서 외부에서 해당 컨테이너에 접속하고 싶은 경우 포트끼리 연결해줘야 하며, 컨테이너끼리 통신이 필요한 경우 같은 네트워크를 사용하거나 IP주소를 명시하여 포트를 통해 통신해야 한다.

    같은 호스트에서 돌아가고 있는 컨테이너라 해서 localhost가 같지 않다.


참고.

Containers vs. Virtual Machines (VMs): What’s the Difference? - IBM Blog

Docker란? | IBM

컨테이너란? | IBM

IT위키

컨테이너 오케스트레이션이란? - 컨테이너 오케스트레이션 설명 - AWS

컨테이너 오케스트레이션이란 무엇인가요? | IBM

0개의 댓글

관련 채용 정보