Docker의 등장과 특징

로건·2022년 9월 12일
0

Docker

목록 보기
1/1
post-custom-banner

서버관리의 측면에서 월등히 높은 효율성을 자랑한다는 도커, 공부해보자!
그 등장배경을 알면 쉽게 이해할 수 있으니 배경부터 알아보자


Docker의 등장 배경

1️⃣ 문서화의 문제점

아주 오래전 서버에 대한 관리는 문서를 통해 이루어졌다.
어떤 OS를 사용하고 어떤 라이브러리를 이용한다 등을 한글 파일과 같이 문서를 통해 배우고 사용하였다.
이럴 경우 실제 서버환경과 테스트환경, 로컬환경의 OS등이 다를 가능성이 크며, 명령어 하나라도 실수하면 제대로 돌아가지 않는 불상사가 일어났다.

💡 해결법
설정파일의 등장! 환경 설정에 필요한 것들을 코드로써 관리하고 이 파일을 실행함으로써 필요한 환경 셋팅을 해준다!

  • 사람의 손을 거침으로써 나는 에러 해결
  • 환경설정에 드는 시간 절약

2️⃣ 설정파일의 문제점

설정파일에 적힌 내용을 이해하기에 러닝커브가 높음.
한 서버 내에서 같은 프로그램을 다른 버전(환경)으로 여러개 배포하기가 매우 복잡함

💡 해결법
가상머신의 등장! 하나의 물리 자원에 가상화층을 만들어 또 다른 OS를 동작하게 함으로써 한 서버내에서 다른 환경으로 여러 프로그램을 실행시킬 수 있음.


3️⃣ 가상머신의 문제점

가상머신을 처음부터 셋팅하기가 어려움.
처음 만든 사람이 셋팅 문서를 결국 작성해야함(기존의 문제로 회귀), 공유하기가 어려움(용량이 너무 커서 어디에 올릴 수도 없음)
OS를 통하기 때문에 속도가 느려지는 단점이 생긴다.

💡 해결법
자원의 격리 - 리눅스 커널을 직접 건드려 자원을 격리시키는 방법

  • 프로세스를 겹치지 않게 격리한다. 뿐만아니라 파일/디렉터리도 분리하여 사용가능
  • CPU, Memory, I/O를 그룹별로 제한시킬 수 있음
  • 리눅스 자체의 기능을 활용한 것이므로 빠르고 효율적임

4️⃣ 자원격리의 문제점

리눅스 커널을 직접 다루는 기술은 고난이도. 글로벌 IT기업에서만 사용가능한 수준임.
이러한 어려운 자원격리 기술을 손쉽게 사용가능하게 만든 것이 바로 컨테이너 기술(도커)이다.




Docker 알아보기

🧐 Docker vs VM

위에 보이는 사진처럼 VM은 Hypervisor의 IO처리와 Guest OS로 인하여 오버헤드가 발생한다.(Guest OS로 인한 메모리, Guest OS의 IO처리로 인한 속도저하)

  • Docker는 가상OS가 아니라 가상 프로세스(컨테이너) 단위로 격리하며 OS를 공유한다.
  • 기존 하드웨어의 성능을 그대로 사용함.
  • 하나의 OS로 소통하기 때문에 가볍고 빠름

🧐 Docker 특징, 장점

확정성과 이식성이 좋음

  • 도커만 설치되어 있으면 어디서든 컨테이너 실행 가능(but, 기본적으로 Linux를 제공하기 때문에 Window나 MacOS에서는 가상머신에 설치됨. 하지만 걱정하지마라 우리는 클라우드를 사용하니까)

표준성

  • 각 언어별(ruby, nodejs) 등으로 만든 서비스들의 배포 방식은 모두 다르지만 도커는 컨테이너라는 표준으로 서버를 배포 하므로 배포과정이 동일 - (사용하는 라이브러리 다운 등 설정파일만 적어놓으면 나머지 시스템상 문제는 도커 엔진이 다 처리해주니 걱정마시라구)
  • 도커로 돌리면 로컬 테스트환경(맥이든 윈도우든 문제없구), 실제 환경(로컬 환경과 달라도)이 달라도 모두 문제없이 실행됨.


이미지(container image)를 만들기 쉬움

  • 컨테이너를 생성하기 위한 것.
  • 이미지를 만드는 과정이 필요함(Dockerfile을 이용하여 이미지 만들기, 다른사람이 만든 이미지 가져오기)
  • 환경을 교체, 업데이트하기 쉬움
  • 컨테이너 : 이미지를 이용해 실행한 격리되어 있는 프로세스


도커 호스트

  • 컨테이너가 설치되어있는 호스트(호스트에 여러개의 컨테이너가 만들어짐)
  • 컨테이너와 호스트는 독립적인 환경을 가짐(독립적인 포트와 파일시스템)
  • 그러므로 호스트의 포트와 컨테이너 포트를 연결시켜 호스트 포트로 들어오는 것들을 연결된 컨테이너로 전송되게 해야함(포트포워딩 기술)


설정관리

  • 보통 환경변수로 제어함. 환경변수를 바꿔서 실행하면 내부에 있는 툴들을 환경변수에 맞춰 바꿔줌.


자원관리

  • 컨테이너를 삭제하면 모든 데이터가 초기화됨.
  • 그러므로 업로드 파일을 S3같은 별도의 저장소가 필요함.
  • 세션이나 캐시는 radis와 같은 외부에서 관리하는게 좋음.


업데이트 전 테스트하기 편함

  • 새로운 컨테이너 환경으로 따로 생성하고 테스트 용이

결론적으로 서버를 효율적으로 사용,관리할 수 있음

  • 컴퓨터 리소스를 제대로 활용가능(다른환경 프로그램들을 속도,메모리 효율적으로 실행가능)
  • 개발, 테스트, 프로덕트 등의 개발환경을 손쉽게 나누고 구축할 수 있음.

🧐 Docker 단점

  • 리눅스 운영체제만 사용가능
  • 호스트에 문제가 생기면 연관된 모든 컨테이너가 영향을 받음
  • 컨테이너를 하나만 사용하거나 서버가 고정되어 있을 경우에는 오히려 역효과

🧐 컨테이너 오케스트레이션

간단히 말해 여러 서버를 가지고 있는 대규모 서비스에서 컨테이너 기술을 활용하여 서비스 질을 향상 시키는 것. 대표적으로 쿠버네티스, 도커 스웜 등이 있음.

도커는 하나의 서버에 여러개의 서비스를 관리하는 것이라고 한다면
쿠버네티스는 여러개의 서버와 여러개의 서비스를 관리하는 것(대규모 프로젝트에서 용이), 여러개의 도커를 돌리고 있는 것.

  • 스케줄링
    • 컨테이너를 적당한 서버에 배포함.(여러 대 중에서 할일 없는 서버에 배포 or 차례대로 or 랜덤하게)
    • 컨테이너 수가 늘면 적당히 알아서 여러 서버로 나눠서 배포해줌.
    • 서버가 죽으면 실행 중이던 그 서버의 컨테이너를 다른 서버에 띄워줌
  • 클러스터링
    • 여러개의 서버를 하나의 서버처럼(가상) 묶는 기술 - 중앙에 있는 API를 통해서 모든 곳에 접근 가능
    • 여러 서버로 흩어진 컨테이너도 이런 가상 네트워크를 이용해 같은 서버에 있는 것처럼 쉽게 통신함.
  • 서비스 디스커버리
    • 서비스를 찾아주는 기능
    • 클러스터 환경에서 컨테이너가 어느 서버에 생성되었는지 알 수 없고 다른 서버로 이동도 할 수 있음. 컨테이너끼리의 소통을 위해선 어디에 있는지 IP와 Port같은 정보를 알아야함.
      → DNS 서버를 이용해서 도커컨테이너 이름으로 바로 키-벨류 스토리지에 접근해 정보를 저장, 및 가져올 수 있음.



공부자료

인프런 - 초보를 위한 도커 안내서

profile
Life Designer
post-custom-banner

0개의 댓글