Docker

[Docker]도커의 등장 배경 알아보기

__ellie 2021. 7. 29. 23:59
반응형

이번 글에서는 도커가 무엇인지 알아보고 어떤 문제를 해결하기 위해 만들어졌고, 문제를 어떻게 해결했는지 알아봅니다.

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

먼저 도커를 알아보기 전에 서버를 관리하는 것이 어떤 것인지 알아보자

서버를 관리한다는 것

서버 관리는 복잡하다. 겉으로 봤을 때는 서버가 잘 도는 것 처럼 보이지만, 내부는 복잡하게 구성되어 있다.

도커 등장 이전에 서버 문서를 보면...

  • oracle 설치해주세요.
  • wordpress 설치해주세요.
  • gitlab 설치해주세요
  • —> 뭔가 잘 안된다. 뭔가 어떻게 하는지도 모르겠는데, 블로그를 따라서 설치하다보면 떠야 할 게 안뜰 수 있고
  • 서버에서 설정을 실수했거나 문서가 오래됐거나, 따라했을 때 제대로 설치안될 경우가 많다.
  • 단순히 프로그램을 설치하는 것 뿐만 아니라 계속해서 서버 환경이 바뀐다.(aws, azure, google cloud...)
  • 인프라가 계속해서 바뀔 수 있다.
  • node.js , python, ruby... 계속 해서 바뀌는 개발 환경에서 서버를 관리하려면,
  • 여러가지 개발환경이 잘 돌아가게 해야 한다.

도커가 등장하면서...

  • 도커가 등장하고 서버 관리/개발 방식이 완전히 바뀌게 된다.
  • 서버를 설치할 때 특정 경로를 지정하게 되는데 그 경로가 겹칠 수 있기 때문에 한 서버에서 동일한 프로그램을 띄우기가 어려울 수 있다.

서버 관리 방식의 변화

기존에는...

add user → system env → firewall → network → dependency → python

→ git clone → package → configuration → migration → proxy → run!
  • 하나 하나 실행해야 했는데,
  • 도커가 등장하고 나서
  • 모든 것이 컨테이너로 추상화가 된다.
mysql → mysql container

redis → redis container

rabbitmq → rabbitmq container

jenkins → jenkins container

workpress → wordpress container
  • 컨테이너를 만들어 놓으면, amazon, azure, google cloud, kt, naver cloud platform, aliyun 어디서든 돌아간다.
  • 그럼 도커는 가상 머신 같은 것일까?
  • 가상 머신은 이미지를 하나 잘 만들어 놓으면, 실행을 했을 때 다른 것의 영향 없이 띄울 수 있다.
  • => 반은 맞고, 반은 틀리다.
  • 가상 머신처럼 독립적으로 실행되지만, 가상머신보다 빠르고 가상머신보다 쉽고, 가상머신보다 효율적이다.

도커의 등장

  • 어느날 python이 버전이 바뀌었다면 파이썬 버전을 업데이트해야 하는데, 현재 서버에 많은 프로그램이 돌고 있고, 많은 프로그램들이 파이썬을 쓰고 있는데 업데이트했을 때 어떤 일이 벌어질지 모르니까 무섭다! 🥶
  • 패키지를 업데이트했을 때 별 일 없을까?
  • 심지어 모든 흐름을 한 땀 한 땀 잘 했다고 생각했는데 막상 실행하면, 서버가 안 뜰 수 있다.
  • 각각 한 땀 한 땀을 잘 해야 하고 각각의 문제를 예상해서 대비를 해야 하는 것이 전통적인 서버 방식이라고 보면 된다.
  • 인프라 엔지니어들은 서버 상태를 관리하기 위해 많은 노력을 해야 했을 것이다.
  • 도커 등장 이전의 인프라 엔지니어들이 했던 노력들을 살펴보면,
  1. 첫 번째 시도
    • 서버 배포.pptx
    • 문서가 아무리 좋더라도, 우분투 기반이었는데 centos로 변경된다면?
    • 비슷해보이지만, 구성 자체가 달라지기 때문에
    • 이 문서가 정확한 걸까? 의심이 있다.
  2. 설정 관리
  3. 가상머신

기존에는 설치와 사용이 어려웠는데, 도커를 사용하면, 설정 파일을 이용해서 컨테이너를 만드는 것이 쉬워졌다.

도커란?

그럼 도커란 무엇일까?

가상 머신과 도커의 차이점을 알아보자!

VM vs Docker

  • 윈도우에 리눅스를 설치하게 되면, 한 단계 더 들어가기 떄문에 속도를 느리게 만든다.
  • 도커는 그런 가상 머신이 아니라 격리만 해주기 떄문에 성능상 하락이 없다.

도커의 특징

  • 확장성/이식성

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

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

    • 이미지는 컨테이너를 실행하기 위한 어떠한 압축파일 같은 것
    • dockerfile 스크립트를 이용해서 이미지를 만드는데, 빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장소에 저장하고 운영 서버에서 이미지를 불러옴 (보통 이렇게 많이 구성한다.)
    • 도커는 이미지를 만들어 놓으면, 이미지를 가져다 사용할 수 있는 구성이 되어 있다.
  • 설정 관리

    • 설정은 보통 환경 변수로 제어함
    • MYSQL_PASS=password 와 같이 컨테이너를 띄울 때 환경변수를 같이 지정
  • 자원 관리

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

    • 리눅스 서버에 돌아가는 모든 것들을 컨테이너로 만들 수 있다.
    • 유명한 것들은 가져다가 사용할 수 있고, 우리가 만든 거는 이미지를 만들어서 컨테이너를 만들 수 있다.

도커의 미래

  • 도커는 컨테이너 기술을 사용한 것이고 도커 말고도 좋은 기술들이 나왔다.
  • 컨테이너 기술 자체는 그대로 사용한다.

쿠버네티스

  • 쿠버네티스가 거의 서버 관리의 대세가 되어 가고 있다.

쿠버네티스?

  • 여러 대의 서버와 여러 개의 서비스를 관리하기 쉽게
  • 쿠버네티스 안에 도커가 여러 개가 있는 건데, 그걸 관리하기 쉽게 해주는 것?
쿠버네티스 특징
  • 스케줄링 기능
    • 서버가 10대가 있으면, 자동으로 놀고 있는 서버를 찾아서 컨테이너를 배포를 해준다.
    • 그래서 효율적으로 서버를 관리할 숭 ㅣㅆ게
    • 개수를 늘리면, 적당히 나눠서 배포
    • 죽으면, 실행중이던 컨테이너를 다른 서버에
  • 클러스터링
    • 여러 개의 서버를 하나의 서버처럼 사용
    • 3번 서버에 프로그램이 설치되어 있으면 무조건 3번 서버로 접속하고 그 프로그램을 봐야 하는데, 중앙에 api 서버를 통해서 모든 서버를 한 곳에서 관리할 수 있고 서버들끼리 연결된 것 처럼 사용할 수 있다.
  • 서비스 디스커버리
    • 한 곳에 mysql, 한 곳에 wordpress가 떠 있어서 이 둘을 연결하려면 정확히 어디에 떠있는지 알아야 하는데, 컨테이너는 어디 생성될지 모르기 때문에, 서비스 디스커버리 서비스를 사용해서 dns 서버를 이용해서 도커 컨테이너 이름으로 바로 접근할 수 있는 기능이 있다.

참고 자료

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