3 분 소요

 인프런 초보를 위한 도커 안내서을 학습하고 정리한 내용 입니다.

서버를 관리한다는 것

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼

서버 관리란?

영사기 하나 키는 행위지만 그 안에는 복잡한 일들이 일어나고 있다.

서버 관리는 복잡하다.

특정 서버를 직접 설치 해왔다 생각해보자. 예를 들어 오라클 DB, 깃허브, 자바 등등

그런데 갑자기 Node.js, 깃랩, MariaDB를 쓴다고 다 바꿔달라 한다. 매우 고통스러운 작업이다.

이런 문제를 해결하기 위해 나온 기술이 도커다.

도커 컨테이너 생성 데모

강의에서 예시로 젠킨스, 워드프레스 서버를 도커를 활용해 띄우는데 워드프레스 서버를 2개를 띄워본다.

동일한 서버를 2개 띄우는 행위는 진짜 쉬운 행위가 아니다. 기존에 방식이라면, 내가 설정 다 해줘도 충돌 나는 경우가 많다.

또 로캣챗이라는 채팅 서버를 강의자분도 잘 모르는데 쉽게 도커를 통해 설치하는 모습을 보여준다.

도커라는 기술을 이용하면 서버 관리가 매우 쉬워진다는 것을 알 수 있다.

서버관리 방식의 변화

이전 방식의 서버관리는

이렇게 한땀 한땀 방화벽 뚫고, 마이그레이션 하고, 패키징 하는 등 서버 관리자가 다 했어야 했다.

그런데 도커라는게 등장하면서

이렇게 다양한 서버들을 도커로 패키징하고

다양한 클라우드 환경에서 돌아갈 수 있다.

이렇게 보면 버츄얼박스같은 가상머신이랑 비슷해 보이는데, 반은 맞고 반은 틀렸다.

가상머신처럼 독립적으로 실행되지만 가상머신보다 빠르고 가상머신보다 쉽고 가상머신보다 효율적이다.

도커의 등장

이전 서버에서 갑자기 파이썬에 버전이 업데이트 됐다는 소식이 있다.

이거 업데이트 시킬 수 있겠는가? 잘 돌아가고 있는 서버에서? 매우 리스크 있는 행위다.

겉으로 보이기엔 견고하지만 하나만 이상해도 무너지는 카드탑과 다를게 없다.

예전엔 서버의 상태를 관리하기 위해 어떤 노력이 있었을까?

  1. 문서화
    1. 이 문서가 과연 완벽할까?
    2. 다른 환경에선 어떻게 설치하지?
    3. 문서화가 최신화가 가능한가?
  2. 상태관리 도구 (셰프, 퍼펫, 앤서블 등)
    1. 문서화 보단 코드로 적으니 좀 더 정확하다.
    2. 근데 많이 어렵다. 러닝 커브가 높다.
    3. 한 서버에 다른 버전 여러개를 설치하려면 어떻게 하지?
  3. 가상머신 (버추얼박스, VMware)
    1. 이제 가상 머신으로 서버를 띄우면 독립성을 보장한다.
    2. 현재 상태를 저장할 수도 있다. (용량은 매우크다.)
    3. 근데 느리다.
    4. 다른 사람이 처음부터 다시 만들려면 또 어떻게 해야 하나?
    5. 공유는 어떻게..?
  4. 자원 격리
    1. 프로세스를 가상으로 분리
    2. 그런데 너무 어려운 기능, 구글 정도나 쓰고 있었다.

널널한 개발자 TV님의 20분 만에 전공자처럼 도커, 가상화 이해하기!

자원격리 같은 개념은 참고하면 좋을듯 하다.

이 자원격리 개념을 쉽게 사용하게 만든 플랫폼이 바로 도커다.

도커 최초 발표 - The future of Linux Containers

도커

가상머신을 사용한다면, 윈도우 위에, Linux서버를 또 올린다는 느낌으로 생각하면 좋다. 그렇기 때문에 좀 느리다.

도커의 특징

확장성/이식성

  • 도커가 설치되어 있다면 어디서든 컨테이너를 실행할 수 있음
  • 특정 회사나 서비스에 종속적이지 않음
  • 쉽게 개발 서버를 만들 수 있고 테스트 서버 생성도 간편함

표준성

  • 도커를 사용하지 않는 경우 ruby, nodejs, go, php로 만든 서비스들의 배포 방식은 제각각 다름
  • 컨테이너라는 표준으로 서버를 배포하므로 모든 서비스들의 배포 과정이 동일해짐
  • capistrano? fabric? ftp? 이제 다 통일해서 쓰면 된다.

이미지

  • 이미지에서 컨테이너를 생성하기 때문에 반드시 이미지를 만드는 과정이 필요
  • Dockerfile을 이용하여 이미지를 만들고 처음부터 재현 가능
  • 빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장소에 저장하고 운영 서버에서 이미지를 불러옴

설정관리

  • 설정은 보통 환경변수로 제어함
  • MYSQL_PASS=password와 같이 컨테이너를 띄울 때 환경변수를 같이 지정
  • 하나의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어져야함

자원관리

  • 컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화됨
  • 업로드 파일을 외부 스토리지와 링크하여 사용하거나 S3같은 별도의 저장소가 필요
  • 세션이나 캐시를 memcached나 redis와 같은 외부로 분리

도커가 가져온 변화

  • 클라우드 이미지보다 관리하기 쉬움
  • 다른 프로세스와 격리되어 가상머신처럼 사용하지만 성능저하 (거의) 없음
  • 복잡한 기술(namespace, cgroups, network, …)을 몰라도 사용할 수 있음
  • 이미지 빌드 기록이 남음
  • 코드와 설정으로 관리 > 재현 및 수정 가능
  • 오픈소스 > 특정 회사 기술에 종속적이지 않음

컨테이너 → 서버 관리 혁신

도커의 미래

정확히는 컨테이너의 미래. 도커는 컨테이너 기술을 활용한 플랫폼이다.

쿠버네티스라는 기술이 있다.

도커는 하나의 프로그램을 관리하는 플랫폼이라 하면, 도커 여러 개를 관리해주는 플랫폼이라 생각하면 된다.

스케줄링

  • 컨테이너를 적당한 서버에 배포해 주는 작업
  • 여러 대의 서버 중 가장 할일 없는 서버에 배포하거나 그냥 차례대로 배포 또는 아예 랜덤하게 배포
  • 컨테이너 개수를 여러 개로 늘리면 적당히 나눠서 배포하고 서버가 죽으면 실행 중이던 컨테이너를 다른 서버에 띄워줌

클러스터링

  • 여러 개의 서버를 하나의 서버처럼 사용
  • 작게는 몇 개 안 되는 서버부터 많게는 수천 대의 서버를 하나의 클러스터로
  • 여기저기 흩어져 있는 컨테이너도 가상 네트워크를 이용하여 마치 같은 서버에 있는 것처럼 쉽게 통신

서비스 디스커버리

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

댓글남기기