도커는 컨테이너 기반의 오픈소스 가상화 플랫폼.
다른 도구와 마찬가지로 어떤 문제를 해결하기 위해 만들어졌고 그 방법이 많은 사람들에게 인기를 끌면서 널리 사용됨.
도커가 등장하기 전 아래 사진과 같이 복잡하게 한땀한땀 서버를 관리해 왔음.
하지만, 도커의 등장으로 어떤 프로그램도 컨테이너로 만들 수 있고 어디서든 돌아가게 됨.
도커가 설치되어 있다면 어디서든 컨테이너를 실행할 수 있음.
특정 회사나 서비스에 종속적이지 않음.
쉽게 개발서버를 만들 수 있고 테스트서버 생성도 간편함.
도커를 사용하지 않는 경우 ruby, nodejs, go, php로 만든 서비스들의 배포 방식은 제각각 다름.
컨테이너라는 표준으로 서버를 배포하므로 모든 서비스들의 배포과정이 동일해짐.
이미지에서 컨테이너를 생성하기 때문에 반드시 이미지를 만드는 과정이 필요.
Dockerfile을 이용하여 이미지를 만들고 처음부터 재현 가능.
빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장소에 저장하고 운영서버에서 이미지를 불러옴.
설정은 보통 환경변수로 제어함.
MYSQL_PASS=password와 같이 컨테이너를 띄울때 환경변수를 같이 지정.
하나의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어져야함.
컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화됨.
업로드 파일을 외부 스토리지와 링크하여 사용하거나 S3같은 별도의 저장소가 필요.
세션이나 캐시를 memcached나 redis와 같은 외부로 분리.
클라우드 이미지보다 관리하기 쉬움.
다른 프로세스와 격리되어 가상머신처럼 사용하지만 성능저하 (거의)없음.
복잡한 기술(namespace, cgroups, network, ...)을 몰라도 사용할 수 있음.
이미지 빌드 기록이 남음.
코드와 설정으로 관리 > 재현 및 수정 가능.
오픈소스 > 특정 회사 기술에 종속적이지 않음.
여러대의 서버와 여러개의 서비스를 관리하기 쉽게! (쿠버네티스)
컨테이너를 적당한 서버에 배포해 주는 작업.
여러 대의 서버 중 가장 할일 없는 서버에 배포하거나 그냥 차례대로 배포 또는 아예 랜덤하게 배포.
컨테이너 개수를 여러 개로 늘리면 적당히 나눠서 배포하고 서버가 죽으면 실행 중이던 컨테이너를 다른 서버에 띄어줌.
여러 개의 서버를 하나의 서버처럼 사용.
작게는 몇 개 안 되는 서버부터 많게는 수천 대의 서버를 하나의 클러스터로.
여기저기 흩어져 있는 컨테이너도 가상 네트워크를 이용하여 마치 같은 서버에 있는 것처럼 쉽게 통신.
서비스를 찾아주는 기능.
클러스터 환경에서 컨테이너는 어느 서버에 생성될지 알 수 없고 다른 서버로 이동 할 수도 있음.
따라서 컨테이너와 통신을 하기 위해서 어느 서버에서 실행중인지 알아야 하고 컨테이너가 생성되고 중지될 때 어딘가에 IP와 Port같은 정보를 업데이트해줘야 함.
키-벨류 스토리지에 정보를 저장할 수도 있고 내부 DNS 서버를 이용.
참고자료