Published on

Docker 톺아보기

Authors
  • avatar
    Name
    심성헌 (SeongHeon Sim)
    Twitter

도커는 왜 필요할까?

나는 Mac OS 환경에서 개발을 하고 A는 Windows OS 환경에서 개발을 하고 B는 Obuntu OS 환경에서 개발을 하고 있다고 가정하자. 이렇게 각자 다른 운영체제 위에서 개발을 진행했을 때, Java 의 경우 JVM 위에서 작동하기 때문에 어떠한 OS에서도 손쉽게 빌드할 수 있지만 그렇지 않은 경우라면 누구는 빌드를 하지 못하는 경우가 발생 할 수 있다. 또한, 현재 AWS 를 사용하다가 후에 Google Cloud 로 변경하는 등 서버의 환경이 변하는 경우도 있을 수 있으며 어떠한 애플리케이션을 개발할 때 다양한 언어로 개발 할 수 있는 상황도 발생한다. 이럴 때, Docker 를 이용한다면 조금 더 수월하고 빠르게 서버를 관리하고 개발을 진행 할 수 있다.

도커로 서버를 관리하는 것

전통적인 서버 관리로는 처음에 서버를 설정하게 된다면 유저를 추가하고, 방화벽 설정, 환경변수 설정 등 복잡한 과정을 거쳐야 서버를 관리 할 수 있었다. 하지만 도커가 등장하고 나서 컨테이너(Container) 라는 추상체를 통해 컨테이너에 속한 프로그램을 운영체제에 구애 받지 않고 구동할 수 있다. 즉, 과거에 서버를 관리하는 과정이 획기적으로 줄어들었다고 할 수 있다. 도커와 가상머신과 비슷하지만 그렇다고 완전히 같은 것은 아니다.

  1. 도커는 가상머신처럼 독립적으로 실행된다.
  2. 하지만 가상머신보다 빠르다.
  3. 또한 가상머신보다 쉬우며
  4. 가상머신보다 효율적이다.

도커의 특징을 정리하자면

Docker

  1. 뛰어난 효율성
    • 가상머신은 서버의 운영체제에 가상의 운영체제 머신을 끼워 넣게 되면서 이는 성능이 떨어지게 하기 때문에 성능상에 문제를 일으킨다. 하지만 도커의 경우 서버에 가상머신처럼 작동하지 않고, Docker Engine을 통해 가상의 운영체제를 격리시켜 작동하기 때문에 효율성과 성능면에서 가상머신에 비해 압도적으로 뛰어나다.
  2. 뛰어난 확장성과 이식성
    • 도커가 설치되어 있는 어떠한 환경에서도 도커 내에 있는 모든 컨테이너를 환경에 구애받지 않고 구동 할 수 있다.
  3. 표준성
    • 각 서비스 마다 개발된 언어가 다르기 때문에 빌드하는 방법, 빌드되는 환경이 각각 다른데 도커의 컨테이너라는 표준으로 각기 다른 언어로 개발된 애플리케이션을 동일한 방식으로 서버에 배포 할 수 있다.
  4. 이미지
    • 이미지란 컨테이너를 실행하기 위한 압축 파일이라고 생각하면 좋다.
    • Dockerfile을 이용하여 이미지를 만들고 처음부터 재현 가능하다.
    • 빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장송에 저장하고, 운영서버에서 이미지를 불러 올 수 있다.
  5. 환경 변수를 이용한 설정 관리
    • 하나의 이미지가 환경 변수에 따라 동적으로 설정 파일을 생성하도록 만들어져야 한다.
  6. 자원 관리
    • 컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화된다.
    • 업로드 파일을 외부 스토리지와 링크하여 사용하거나 AWS S3 를 이용하여 저장한다.

도커가 가져온 변화!
* 클라우드 이미지보다 관리하기 쉽다.
* 가상 머신과 비슷하지만 성능저허가 거의 없다.
* 이미지 빌드 기록이 남아서 관리가 용이하다.
* 코드와 환경 변수 설정으로 관리 가능하다. -> 재현 및 수정이 용이하다.