도커는 어떤 문제를 어떻게 해결했을까?
서버 관리란
서버환경과 개발환경이 계속해서 바뀔 수 있다. 서버를 관리하려면 여러 개발환경이 잘 돌아가게끔 서버를 관리해주어야 한다. ➡️ 굉장히 복잡!
서버관리 방식의 변화
전통적
한 땀 한 땀 . . 모든 프로그램이 연쇄적으로 설치되어야함
도커
모든 프로그램이 컨테이너로 추상화, 어느 클라우드에서도 실행 가능하다
가상 머신 같은건가? 🤔
가상머신처럼 독립적으로 실행되지만, 가상 머신보다 빠르고, 쉽고 효율적임!
도커는 메모리를 효율적으로 사용
도커가 등장하기 전 서버 운영
한 땀 한 땀.. 운영
Ex)
-
파이썬 버전 업데이트를 했을 때, 어떤 일이 발생할지 알 수 없다
-
패키지 업데이트 했을 때 문제가 없을까?
-
잘 구성을 했다고 생각을 했는데.. 실행을 했을 때 서버가 안뜰 수 있다!
각 단계 별로 어떤 문제가 발생할지 예측을 해서 대처를 해야함
서버의 상태를 관리하기 위한 노력!
-
서버배포.pptx
(설치 가이드)
- 문제
- 다른 OS에는 어떻게 설치하는거지..
- 언제 작성된건지.. 바뀐게 잘 적용된건지.. 정확한건지..
- 똑같이 했는데 왜 안되지
- 문제
-
상태관리 도구 CHEF, ANSIBLE .. => 어려움 ㅜㅜ, 한 서버에 다른버전 여러 개 설치 어떻게 하지?
-
가상머신
- 한 서버에 여러 개 설치 쉽다
- 현재 상태를 저장할 수 있다 (40G..)
- 근데 느리다
-
자원 격리
- 프로세스를 가상으로 분리
- 리눅스 기능을 이용한 빠르고 효율적인 서버 관리
- but 어려움..
도커는 어렵고 복잡한 기술을 사용하기 쉽게!
도커의 등장
컨테이너 : 격리된 환경에서 작동하는 프로세스
- 리눅스 커널의 여러 기술을 활용
- 하드웨어 가상화 기술보다 가벼움
- 이미지 단위로 프로세스 실행 환경 구성
도커 특징
- 확장성/이식성 good
- 도커가 설치되어 있다면 어디든 컨테이너 실행 가능
- 특정 회사, 서비스에 종속적이지 않음
- 쉽게 개발서버를 만들 수 있고 테스트서버 생성도 간편
- 표준성
- 도커를 사용하지 않으면 -> ruby, node.js, go, php로 만든 서비스들의 배포방식 모두다 다름!
컨테이너
라는 표준으로 서버를 배포하므로 모든 서비스들의 배포 과정이 동일해진다
- 이미지
- 이미지는 컨테이너를 실행하는 압축 파일 같은 것
- 이미지는 Dockerfile이라는 script를 이용해서 만든다
- 빌드 서버에서 이미지를 만들고, 해당 이미지를 이미지 저장소에 저장한 뒤 운영 서버에서 이미지를 불러옴
- 설정관리
- 설정은 보통 환경변수로 제어함
- MYSQL_PASS=password 와 같이 컨테이너를 띄울 때 환경변수를 같이 지정
- 하나의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어져야함
- 자원관리
- 컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화됨
- S3같은 별도 저장소 필요
- 세션이나 캐시는 redis같은 외부로 분리
도커가 가져온 변화
- 클라우드 이미지 보다 관리 쉬움
- 다른 프로세스와 격리되어 가상머신 처럼 사용하지만 성능저하 거의 없음
- 복잡한 기술 몰라도됨
- 이미지 빌드 기록 남음
- 코드와 설정으로 관리 > 재현과 수정 가능
- 오픈소스 > 서비스나 회사에 독립적임
쿠버네티스
도커는 하나의 프로그램을 관리하는 방식 쿠버네티스는 여러개의 서버에 여러개의 서비스를 관리
스케줄링
- 컨테이너를 적당한 서버에 배포해주는 작업
- 여러 대의 서버 중 가장 할일 없는 서버에 배포 or 차례대로 배포 or 랜덤 배포
- 컨테이너 개수를 여러 개로 늘리면 적당히 나눠 배포, 서버가 죽으면 실행중이던 컨테이너를 다른 서버에 띄워줌
클러스터링
- 여러 개의 서버를 하나의 서버처럼 사용
- 작게는 몇 개 안되는 서버부터, 많게는 수천 대의 서버를 하나의 클러스터로
- 여기저기 흩어진 컨테이너도 가상 네트워크를 이용하여 마치 같은 서버에 있는 것 처럼 통신!
서비스 디스커버리
- 서비스의 서버가 어디에 떠있는지 찾아줌!
- 클러스터 환경에서는 컨테이너가 어떤 서버에 생성될지 모르고, 다른 서버로 이동도 할 수 있기 때문에 -> 통신을 위해서는 서비스가 어느 서버에서 실행중인지 알아야함.