도커란 무엇인가?

2021-10-15
  • DevOps
  • Docker

도커는 어떤 문제를 어떻게 해결했을까?

서버 관리란

서버환경과 개발환경이 계속해서 바뀔 수 있다. 서버를 관리하려면 여러 개발환경이 잘 돌아가게끔 서버를 관리해주어야 한다. ➡️ 굉장히 복잡!

서버관리 방식의 변화

전통적

한 땀 한 땀 . . 모든 프로그램이 연쇄적으로 설치되어야함

도커

모든 프로그램이 컨테이너로 추상화, 어느 클라우드에서도 실행 가능하다

가상 머신 같은건가? 🤔

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

도커는 메모리를 효율적으로 사용

도커가 등장하기 전 서버 운영

한 땀 한 땀.. 운영

Ex)

  1. 파이썬 버전 업데이트를 했을 때, 어떤 일이 발생할지 알 수 없다

  2. 패키지 업데이트 했을 때 문제가 없을까?

  3. 잘 구성을 했다고 생각을 했는데.. 실행을 했을 때 서버가 안뜰 수 있다!

각 단계 별로 어떤 문제가 발생할지 예측을 해서 대처를 해야함

서버의 상태를 관리하기 위한 노력!

  1. 서버배포.pptx

    (설치 가이드)

    • 문제
      • 다른 OS에는 어떻게 설치하는거지..
      • 언제 작성된건지.. 바뀐게 잘 적용된건지.. 정확한건지..
      • 똑같이 했는데 왜 안되지
  2. 상태관리 도구 CHEF, ANSIBLE .. => 어려움 ㅜㅜ, 한 서버에 다른버전 여러 개 설치 어떻게 하지?

  3. 가상머신

    • 한 서버에 여러 개 설치 쉽다
    • 현재 상태를 저장할 수 있다 (40G..)
    • 근데 느리다
  4. 자원 격리

    • 프로세스를 가상으로 분리
    • 리눅스 기능을 이용한 빠르고 효율적인 서버 관리
    • but 어려움..

도커는 어렵고 복잡한 기술을 사용하기 쉽게!

도커의 등장

컨테이너 : 격리된 환경에서 작동하는 프로세스

  • 리눅스 커널의 여러 기술을 활용
  • 하드웨어 가상화 기술보다 가벼움
  • 이미지 단위로 프로세스 실행 환경 구성

도커 특징

  1. 확장성/이식성 good
  • 도커가 설치되어 있다면 어디든 컨테이너 실행 가능
  • 특정 회사, 서비스에 종속적이지 않음
  • 쉽게 개발서버를 만들 수 있고 테스트서버 생성도 간편
  1. 표준성
  • 도커를 사용하지 않으면 -> ruby, node.js, go, php로 만든 서비스들의 배포방식 모두다 다름!
  • 컨테이너 라는 표준으로 서버를 배포하므로 모든 서비스들의 배포 과정이 동일해진다
  1. 이미지
  • 이미지는 컨테이너를 실행하는 압축 파일 같은 것
  • 이미지는 Dockerfile이라는 script를 이용해서 만든다
  • 빌드 서버에서 이미지를 만들고, 해당 이미지를 이미지 저장소에 저장한 뒤 운영 서버에서 이미지를 불러옴
  1. 설정관리
  • 설정은 보통 환경변수로 제어함
  • MYSQL_PASS=password 와 같이 컨테이너를 띄울 때 환경변수를 같이 지정
  • 하나의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어져야함
  1. 자원관리
  • 컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화됨
  • S3같은 별도 저장소 필요
  • 세션이나 캐시는 redis같은 외부로 분리

도커가 가져온 변화

  • 클라우드 이미지 보다 관리 쉬움
  • 다른 프로세스와 격리되어 가상머신 처럼 사용하지만 성능저하 거의 없음
  • 복잡한 기술 몰라도됨
  • 이미지 빌드 기록 남음
  • 코드와 설정으로 관리 > 재현과 수정 가능
  • 오픈소스 > 서비스나 회사에 독립적임

쿠버네티스

도커는 하나의 프로그램을 관리하는 방식 쿠버네티스는 여러개의 서버에 여러개의 서비스를 관리

스케줄링

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

클러스터링

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

서비스 디스커버리

  • 서비스의 서버가 어디에 떠있는지 찾아줌!
  • 클러스터 환경에서는 컨테이너가 어떤 서버에 생성될지 모르고, 다른 서버로 이동도 할 수 있기 때문에 -> 통신을 위해서는 서비스가 어느 서버에서 실행중인지 알아야함.
Profile picture

2yeseul

트리플에서 백엔드 개발을 맡고 있습니다. 무한 삽질을 기록합니다. ⚒️