[Docker] 도커에 대한 설명

zoey·2022년 12월 12일
0

Docker & Kubernetes

목록 보기
1/5
post-thumbnail

도커(Docker)

  • 컨테이너 기반 가상화 도구
  • 도커는 컨테이너 기술에 여러 기능을 추가한 오픈소스 프로젝트
  • 컨테이너 기술을 지원하는 다양한 프로젝트 중 하나
  • 컨테이너 기술은 이전에도 있었으나 도커로 인해 알려짐
  • 컨테이너 기술의 사실상 표준
  • 다양한 운영체제에서 사용 가능 (리눅스, 윈도우, MacOS)
  • 애플리케이션에 국한되지 않고 의존성 및 파일 시스템까지 패키징하여 빌드, 배포, 실행을 단순화
  • "Build Once. Run Anywhere"
    도커에서 제공하는 패키징 방식을 통해서 하나의 어플리케이션을 그 어플리케이션이 dependent한 모든 것들을 하나로 묶은 도커 이미지라는 형태로 build함으로써(Dockerize) 어떤 OS에서든지 어떤 환경에서든지 동일하게 실행시킬 수 있게 된다.



Image - DockerHub - Container

각 요소들이 설치된 모습을 이미지란 형태로 박제해서 저장한다. 각 제품마다 공식적으로 제공되는 이미지도 있고 원하는 대로 만들어낼 수도 있다. git으로 저장된 내용들이 github에 올려지는 것처럼 도커 이미지들은 DockerHub이란 곳에 업로드돼서 공유되고 다운받아질 수 있다. 그리고 이렇게 이미지로 저장된 항목들이 함께 연결돼서 동작하도록 설정된 상태를 명령어 텍스트나 문서 형태로 저장할 수 있다. 이 문서만 잘 보관해두면 이 요소들이 언제 어디서든 미리 지정된, 서비스에 필요한 설정대로 도커헙으로부터 다운받아져서 설치될 수 있다. 도커는 이것들을 각각을 ‘컨테이너’라고 불리는 독립된 가상공간을 만들어내서 복원한다. 덕분에 서로 다른 버전의 자바를 돌리는 서비스들도 각각의 컨테이너 안에서 서로 방해받는 일 없이 돌아갈 수 있다.




가상 컴퓨팅과 도커

가상 컴퓨팅

  • 한 물리적 컴퓨터 안에 각각 os를 가동하는 가상 컴퓨터들이 물리적 자원을 분할해서 쓰기 때문에 성능에 한계가 생기게 된다.

  • 하나의 서버 자원을 나눠서 가지며, 성능을 분산시키고, 분산된 서버들은 각기 다른 서비스를 수행할 수 있게 했어요. 가상화를 통해 사용자가 많은 서비스에는 많은 자원을 할당해주고, 적은 서비스에는 적게 할당할 수 있게 되었다.

  • 서버가상화 : 하나의 물리적 서버 호스트에서 여러 개의 서버 운영 체제를 게스트로 실행할 수 있게 해주는 소프트웨어 아키택처


    도커

  • os단까지 내려가는 것이 아니라 실행환경만 독립적으로 돌리는 거라서 컴퓨터에 직접 요소들을 설치한거랑 별 차이없는 성능을 낼 수 있고 가상컴퓨팅보다 훨씬 가볍고 빠르게 각각을 설치하고 실행하고 켜고 끄고 서로 연동할 수 있다.

  • 컨테이너는 가상화된 공간을 생성하기 위해 리눅스 자체 기능인 chroot, 네임스페이스, group을 사용함으로써 프로세스 단위의 격리 환경을 만든다
    (도커 엔진 위에 컨테이너들이 할당됨)

  • 하이퍼


    용어 설명

🟢 Container

  • 이미지를 격리하여 독립된 공간에서 실행한 가상 환경
  • 격리된 공간에서 프로세스를 실행시킬 수 있는 기술

🟢 Containerization

  • 컨테이너화 하는 기술
  • 도커

🟢 Container Orchestration

  • 여러 개의 컨테이너들을 지휘하는 기술

  • 수 많은 도커 컨테이너들. 어떤 역할을 하는 컨테이너를 어떤 서버에 배치시킬 것인가 라는 문제가 있을 때, 메모리를 많이 필요로 하는 컨테이너는 많은 메모리가 남아있는 서버에 배치를 시키고, GPU를 필요로하는 컨테이너는 GPU가 많이 있는 서버에 배치를 시키고, 저장용량을 많이 필요로 하는 컨테이너는 저장용량이 많이 남아있는 서버에 배치를 시키는.
    한 컨테이너에 장애가 생기면 동일한 컨테이너를 다른 곳에 복제해서 생성해주고, 서버를 추가하면 기존 서버에 있던 로드를 잘 분산시켜주는 기술.

  • 쿠버네티스

🟢 Image

  • 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일
  • 리눅스 컴퓨터의 특정 상태를 캡쳐해서 박제해 놓은 것
  • 무한 생산 가능한 컨테이너 조립 키트

🟢 볼륨

  • 컨테이너의 특정 폴더를 공유하는 것
  • "코드는 내 컴퓨터에서 짜는거니까 이 컴퓨터, 즉 집에 있겠죠. 여러분이 집에서 코드를 짜서 그 파일을 거실 탁자에 놓으면 그 거실 탁자는 Node.js가 일하는 컨테이너의 home칸 node책상의 app서랍과 연결되어있는거에요. 그러면 컨테이너가 언제, 몇개가 만들어지든 각 컨테이너의 app 서랍에서는 거실에 둔 파일들로 얼마든지 서비스를 실행할 수 있겠죠" - 얄코




도커 아키텍처

  • Docker engine : 이미지, 네트워크, 디스크 등의 관리 역할
  • Containerd : OCI 구현체 (주로 runC)를 이용해 container를 관리해주는 daemon
  • 두 프로그램이 각각 돌아가기 때문에 Docker Engine을 재시작해도 각 이미지에 영향이 없다

도커의 한계

  • 서비스가 커지면 커질수록 관리해야하는 컨테이너의 양이 급격히 증가한다
  • 도커를 사용하여 관리를 한다고 하더라도 쉽지 않은 형태

그래서 사용하는 쿠버네티스 !!

쿠버네티스

  • 2014년 구글이 오픈소스 공개
  • 고대 그리스어로 항해사라는 의미를 가짐
  • 다수의 컨테이너를 자동으로 운영하기 위한 오케스트레이션 도구
  • 많은 시스템을 통합, 컨테이너를 다루기 위한 API 제공




참고
https://www.youtube.com/watch?v=3qw_4WqoEDY
https://www.yalco.kr/36_docker/
https://www.youtube.com/watch?v=IiNI6XAYtrs&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=117

0개의 댓글