Docker - 도커란? 무엇인가

문한성·2023년 4월 6일
0

공부

목록 보기
16/28
post-thumbnail

Window10 도커 desktop 설치 방법
https://goddaehee.tistory.com/251

도커란 무엇인가

개발 환경에서 당연하게 사용해왔던 도커 컨테이너 기술에 대해 이해하고, 왜 도커를 사용하는지 알아보자.

개요

  • 도커의 개념과 사용하는 이유 그리고 도커의 특징에 대해 이해한다.

소개 및 배경

  • 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
  • 다양한 이유로 계속 바뀌는 서버 환경과 개발 환경 문제를 해결하기 위해 등장했다.
    툴 업데이트, 회사의 툴 사용 변경, 회사의 언어 정책 변경 등
  • 기존에 서버와 개발 환경이 변경되면 컴퓨터 셋팅(개발 환경) 등을 다시하거나 그 과정에서 발생하는 문제들과 같이, 여러모로 불편한 점이 많았다.
  • 도커가 등장하고 서버관리/개발 방식이(컨테이너) 완전히 편리하게 바뀌게 된다.

사용하는 이유

  • 도커 허브에 올라온 이미지와 docker-compose.yml의 설정으로 원하는 프로그램을 편안하게 설치가 가능하다.
    컨테이너를 생성하여 분리된 환경에 설치하므로 제거도 쉽다.
  • 하나의 서버(로컬 호스트)에 포트만 변경하여 동일한 프로그램을 실행하기도 쉽다.
    도커를 사용하지 않으면 환경변수나 경로 등의 충돌로 피곤하기 그지 없다.

서버관리 방식의 변화

  • 전통적인 서버관리 방식은 아래와 같이 각 단계별로 흐름이 있었고, 각 단계가 업데이트 되거나 어떤 문제가 발생하면 전체 흐름이 중단되는 문제가 있었다.
  • 도커 등장 이후 어떠한 프로그램도 컨테이너로 만들 수 있다.
    서로 다른 프로그램이더라도 컨테이너로 규격화되었음
  • AWS, Azure, Google cloud 등 어떤 환경에서도 돌아간다.
  • 가상머신과 비슷하게 생각할 수 있지만 비슷한점과 다른점이 있다.
  • 가상머신처럼 독립적으로 실행되지만, 가상머신보다 빠르고 쉽고 효율적이다.
    도커는 컴퓨터 자원을 그대로 사용한다. (가상머신은 독립 된 메모리를 할당받는 것으로 알고 있음)

도커의 등장

  • 기존에는 서버 환경에 대해 아래와 같이 관리했다.
    • 문서화
    • 상태관리도구 (인프라를 코드로 관리)
    • 가상머신
    • 자원격리 (프로세스, 파일, 디렉토리 가상으로 분리)
      • 리눅스의 기능을 (커널 격리) 이용하여 빠르고 효율적인 서버 관리
      • 그러나 사용하기 너무 어려워 구글과 같은 고급 회사에서만 사용했음
  • 도커가 등징하며 어렵고 복잡했던 기술을 사용하기 쉽게 만들었다.
    • 컨테이너 : 격리된 환경에서 작동하는 프로세스
    • 리눅스 커널의 여러 기술을 활용
    • 하드웨어 가상화 기술보다 가벼움
    • 이미지 단위로 프로세스 실행 환경을 구성

도커의 특징

  • 도커는 가상머신이 아니고 격리만 해주기 떄문에 성능상 하락이 없다. (성능 하락이 큰 VM과 다르다.)
  • 확장성과 이식성
    도커가 설치되어 있다면 어디서든 컨테이너를 실행할 수 있다.
    오픈 소스이기에 특정 회사나 서비스에 종속적이지 않다.
    쉽게 개발서버를 만들 수 있고 테스트 서버 생성도 가능하다.
  • 표준성
    도커를 사용하지 않는 경우, 각각의 언어로 만든 서비스들의 배포 방식은 모두 다르다.
    도커는 컨테이너라는 표준으로 서버를 배포하므로 모든 서비스들의 배포 과정이 동일해진다.
  • 이미지
    컨테이너를 실행하기 위한 압축파일과 같은 개념이다.
    이미지에서 컨테이너를 생성하기 떄문에 반드시 이미지를 만드는 과정이 필요하다.
    Dockerfile을 이용하여 이미지를 만들고 처음부터 재현 가능하다.
    빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장소(허브)에 저장하고 운영서버에서 이미지를 불러와 사용한다.
  • 설정관리
    도커에서 설정은 보통 아래와 같이 환경변수로 제어한다.
    MYSQL_PASS=password와 같이 컨테이너를 띄울 때 환경변수를 같이 지정한다.
    하나의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어져야한다.
  • 자원관리
    컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화된다. (제거가 쉽다.)
    그러므로 저장이 필요하다면, 업로드 파일을 외부 스토리지와 링크하여 사용하거나 S3같은 별도의 저장소가 필요하다.
    세션이나 캐시를 memcached나 redis와 같은 외부로 분리한다.

도커가 가져온 변화(정리)

  • 클라우드 이미지보다 관리하기 쉽다.
  • 다른 프로세스와 격리되어 가상머신처럼 사용하지만 성능 저하가 거의 없다.
  • 복잡한 기술(namespace, cgroups, network, …)을 몰라도 사용할 수 있다.
  • 이미지 빌드 기록이 남는다.
  • 코드와 설정으로 관리하여 재현 및 수정 가능하다.
  • 오픈소스이므로 특정 회사 기술에 종속적이지 않다.
profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글