제육's 휘발성 코딩
Published 2022. 6. 21. 13:56
[Docker] 도커란? Infra
반응형

도커

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼(DotCloud, 현 Docker)으로 계속 바뀌는 서버 환경과 개발 환경을 컨테이너화하여 관리하기 위해 등장했다. 서비스가 점차 확장되면서 기존에 사용하던 서버와 새로 구축한 서버 간에 설정 차이가 발생하고, 관리자의 인적요소에도 영향을 받을 수 있다. 따라서 기존에는 스크립트를 활용한 자동화 방식부터, kickstart 등을 거쳐 OS를 가상화하는 방식으로 서버를 관리해왔다.

기존의 OS 가상화 방식

image

  • 기존의 가상화 기술은 Hypervisor를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성하여 사용하는 방식이었다. 하이퍼바이저는 호스트 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼이다. 여기서 문제점은 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 반드시 하이퍼바이저를 거치기 때문에 일반 호스트에 비해 성능의 손실이 발생한다는 것이다. 뿐만 아니라 가상머신은 GuestOS를 사용하기 위한 라이브러리, 커널 등을 전부 포함하기에 가상 머신을 배포하기 위한 이미지로 만들었을 때 이미지 크기가 커져 애플리케이션으로 배포하기 부담스러울 수 있다.

컨테이너 방식

image

  • 도커에선 모든 프로그램을 컨테이너화하여 관리할 수 있다. 컨테이너에 필요한 커널을 공유해 사용하고, 컨테이너 안에는 애플리케이션을 구동하는데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 만들었을 때 용량 또한 가상머신에 비해 대폭 줄어들게된다. 또한 컨테이너 내용을 수정해도 호스트 OS에 영향을 끼치지 않기 때문에 애플리케이션 개발과 배포가 편해지며, 여러 애플리케이션의 독립성과 확장성이 높아진다.

도커의 특징

  • 도커가 설치되어 있다면 어디서든 컨테이너를 실행할 수 있다. 즉, 특정 회사나 서비스에 종속적이지 않다. 이 컨테이너를 표준으로 서버를 배포하기 때문에 모든 서비스들의 배포과정이 동일해진다.
  • Dockerfile을 이용하여 이미지에서 컨테이너를 생성하기 때문에 반드시 이미지를 만드는 과정이 필요하다. 빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장소에 저장하고 운영서버에서 이미지를 불러온다.
  • 설정은 주로 환경변수로 제어하며, MYSQL_PASS=password와 같이 컨테이너를 띄울 때 환경변수를 같이 지정한다. 하나의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어져야한다.
  • 컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화되며, 업로드 파일의 경우 외부 스토리지 (AWS-S3 등)가 별도로 필요하다. 세션이나 캐시를 memcached나 redis 같은 외부로 분리하여 자원을 관리한다.

컨테이너의 미래

쿠버네티스는 서버 관리의 대세가 되고 있는 시점이다. 쿠버네티스는 여러 대의 서버와 여러 개의 서비스를 관리하기 쉽게 구성해주는 것이다. 즉, 쿠버네티스 안에 여러 컨테이너가 존재하고 이를 관리해주는 것이다.

스케줄링

  • 컨테이너를 적당한 서버에 배포해주는 작업으로 여러 대의 서버 중 가장 일이 없는 서버에 배포하거나, 순차적으로 등 여러 방식으로 스케줄링이 가능
  • 컨테이너 갯수를 여러 개로 늘리면 적당히 나누어서 배포하고 서버가 죽으면 실행중인 컨테이너를 다른 서버에 띄워준다.

클러스터링

  • 여러 개의 서버를 하나의 서버처럼 사용한다. 수천 대의 서버에 흩어져 있는 컨테이너도 가상 네트워크를 통해 같은 서버에 있는 것처럼 통신할 수 있다.

서비스 디스커버리

  • 클러스터 환경에서 컨테이너는 어느 서버에 생성될 지 알 수 없고, 다른 서버로 이동할 수도 있다. 따라서 컨테이너와 통신을 하기위해 어느 서버에서 실행중인지 알아야하고, 컨테이너가 생성되고 중지될 때 어딘가에 IP에 Port와 같은 정보를 업데이트 해줘야 한다.
  • Key-Value 스토리지에 정보를 저장하거나 내부 DNS 서버를 이용해서 서비스를 찾아준다.

REFERENCES

https://www.inflearn.com/course/%EB%8F%84%EC%BB%A4-%EC%9E%85%EB%AC%B8/dashboard

https://edu.nextstep.camp

반응형
profile

제육's 휘발성 코딩

@sasca37

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 맞구독은 언제나 환영입니다^^