도커란?

HyeonWoo·2021년 7월 18일
0

도커

목록 보기
1/2
post-thumbnail

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼.
다른 도구와 마찬가지로 어떤 문제를 해결하기 위해 만들어졌고 그 방법이 많은 사람들에게 인기를 끌면서 널리 사용됨.

도커가 등장하기 전 아래 사진과 같이 복잡하게 한땀한땀 서버를 관리해 왔음.

하지만, 도커의 등장으로 어떤 프로그램도 컨테이너로 만들 수 있고 어디서든 돌아가게 됨.


도커의 특징

- 확장성/이식성

  • 도커가 설치되어 있다면 어디서든 컨테이너를 실행할 수 있음.

  • 특정 회사나 서비스에 종속적이지 않음.

  • 쉽게 개발서버를 만들 수 있고 테스트서버 생성도 간편함.

- 표준성

  • 도커를 사용하지 않는 경우 ruby, nodejs, go, php로 만든 서비스들의 배포 방식은 제각각 다름.

  • 컨테이너라는 표준으로 서버를 배포하므로 모든 서비스들의 배포과정이 동일해짐.

- 이미지

  • 이미지에서 컨테이너를 생성하기 때문에 반드시 이미지를 만드는 과정이 필요.

  • Dockerfile을 이용하여 이미지를 만들고 처음부터 재현 가능.

  • 빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장소에 저장하고 운영서버에서 이미지를 불러옴.

- 설정관리

  • 설정은 보통 환경변수로 제어함.

  • MYSQL_PASS=password와 같이 컨테이너를 띄울때 환경변수를 같이 지정.

  • 하나의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어져야함.

- 자원관리

  • 컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화됨.

  • 업로드 파일을 외부 스토리지와 링크하여 사용하거나 S3같은 별도의 저장소가 필요.

  • 세션이나 캐시를 memcached나 redis와 같은 외부로 분리.


도커가 가져온 변화

  • 클라우드 이미지보다 관리하기 쉬움.

  • 다른 프로세스와 격리되어 가상머신처럼 사용하지만 성능저하 (거의)없음.

  • 복잡한 기술(namespace, cgroups, network, ...)을 몰라도 사용할 수 있음.

  • 이미지 빌드 기록이 남음.

  • 코드와 설정으로 관리 > 재현 및 수정 가능.

  • 오픈소스 > 특정 회사 기술에 종속적이지 않음.


컨테이너의 미래

여러대의 서버와 여러개의 서비스를 관리하기 쉽게! (쿠버네티스)

스케줄링

  • 컨테이너를 적당한 서버에 배포해 주는 작업.

  • 여러 대의 서버 중 가장 할일 없는 서버에 배포하거나 그냥 차례대로 배포 또는 아예 랜덤하게 배포.

  • 컨테이너 개수를 여러 개로 늘리면 적당히 나눠서 배포하고 서버가 죽으면 실행 중이던 컨테이너를 다른 서버에 띄어줌.

클러스터링

  • 여러 개의 서버를 하나의 서버처럼 사용.

  • 작게는 몇 개 안 되는 서버부터 많게는 수천 대의 서버를 하나의 클러스터로.

  • 여기저기 흩어져 있는 컨테이너도 가상 네트워크를 이용하여 마치 같은 서버에 있는 것처럼 쉽게 통신.

서비스 디스커버리

  • 서비스를 찾아주는 기능.

  • 클러스터 환경에서 컨테이너는 어느 서버에 생성될지 알 수 없고 다른 서버로 이동 할 수도 있음.

  • 따라서 컨테이너와 통신을 하기 위해서 어느 서버에서 실행중인지 알아야 하고 컨테이너가 생성되고 중지될 때 어딘가에 IP와 Port같은 정보를 업데이트해줘야 함.

  • 키-벨류 스토리지에 정보를 저장할 수도 있고 내부 DNS 서버를 이용.


참고자료

profile
학습 정리, 자기 개발을 위한 블로그

0개의 댓글