도커 개념 정리 및 장점

🌊·2022년 12월 14일
0
post-thumbnail

도커란?


컨테이너 기반의 오픈소스 가상화 플랫폼 (컨테이너 기술을 지원하는 다양한 프로젝트) 중 하나입니다.

이 말은 즉, 컨테이너 기술을 지원하는 기술은 여러가지가 있고, 그 중에 대표로 자리잡은 프로젝트가 도커입니다.

가상화

  • 서버(단일한 시스템)의 성능을 나눠서 사용할 수 있는 기술

다양한 언어와 프레임워크를 사용한 서비스들은 제각기 다른 배포 방법을 가지고 있습니다.
하지만 도커를 통해 패키징하여 컨테이너를 만든다면, 어떤 언어, 프레임워크, 런타임을 사용하던 관계없이 동일한 배포 프로세스를 가질 수 있습니다.
도커는 신기술이 아닙니다. 컨테이너라는 기술은 이미 존재했지만, 기술에 대한 러닝커브가 매우 높았습니다.

이러한 러닝커브를 도커가 해결하면서 많은 사람들이 컨테이너 기술을 더욱 쉽게 사용할 수 있습니다.

기존의 서버 관리


서버를 돌리기 위한 환경을 구축하는 것(언어, 웹서버, DB, 자동배포 툴 등)은 매우 복잡하고 어려운 일입니다.

버전도 잘 신경써줘야되고 많은 설정값들을 개발환경과 운영환경이 동일할 수 있도록 해야합니다.

이러한 상황에서 서버를 추가하거나 증설하게 되면 똑같이 설정하는 작업이 필요합니다.

기존 서버에 대한 히스토리가 많지 않다면, 그대로 설치하는 것도 쉽지 않은 일이 될 수 있습니다.

도커를 이용한 서버 관리


기존의 서버 관리처럼 복잡하고 반복적인 작업을 하지 않아도 됩니다.

도커를 사용하면 OS 환경 설정, 언어, 라이브러리, 시스템 도구 등이 설치된 환경 그대로를 이미지로 빌드할 수 있습니다. 개발 환경에서 만들어진 이미지를 그대로 운영 서버에 전달하고 이미지를 기반으로 컨테이너를 생성하고 실행하면 됩니다.

이를 통해 운영 서버 뿐만 아니라 개발 및 테스트 서버 구축과 운영에도 장점을 줄 수 있습니다.

단, 도커의 컨테이너는 삭제되면 모든 데이터를 초기화합니다. 이를 막기 위해서 외부 저장장치에 링크를 하거나, AWS S3 등 별도의 클라우드 스토리지를 사용할 필요가 있습니다.

이미지

  • OS 환경 설정, 언어, 라이브러리, 시스템 도구 등이 설치된 모습을 저장한 형태
  • 공식적으로 제공되는 이미지(ex. tomcat, nginx, mysql 등)도 있고 개인화된 이미지도 있다.
  • DockerHub에 업로드되고 공유되고 다운받을 수 있다.
  • 이미지로 저장된 항목들이 연결돼서 동작되도록 설정된 상태를 명령어 텍스트나 문서 형태로 저장할 수 있다.

컨테이너

  • 이미지의 목적에 따라 생성되는 프로세스 단위의 격리 환경을 제공하는 기술
  • 프로세스 관리, 확장에 용이하고 프로세스의 생명 주기를 관리한다.
  • 호스트 OS와 격리를 통해 독립된 개발 환경을 보장한다.
  • 도커 엔진을 통해 컨테이너를 관리할 수 있다.

도커의 장점

  • 다양한 혹은 독립된 개발 환경을 제공한다.
  • 이미지를 이용해서 개발 환경과 운영 환경을 통합할 수 있다.
  • 애플리케이션 배포 속도 향상 및 H/W 효율 증가
    • Kernel을 포함하고 있지 않기 때문에 상대적으로 이미지의 크기가 작다.
      = 애플리케이션을 구동하는데 필요한 라이브러리 & 실행 파일만 존재한다.
  • 성능 손실이 없다.

가상 컴퓨터 vs 컨테이너


가상 컴퓨터 (Virtual Machine)

  • 호스트 OS 위에서 Hypervisor를 통해 여러 개의 가상 OS를 설치해서 사용하는 방법 (ex. VMWare)

Hypervisor

  • 가상화 기술을 통해 호스트 OS 위에서 여러 게스트 OS를 생성해서 사용할 수 있게 해주는 소프트웨어

가상 컴퓨터의 단점은 무조건 Hypervisor를 거쳐야 합니다.

또한 물리적 자원을 각각의 게스트 OS들이 분할해서 사용하기 때문에 성능의 한계가 옵니다.

게스트 OS와 관련된 모든 데이터들이 포함되기 때문에 이미지의 크기가 상대적으로 큽니다.

컨테이너 (Container)

  • 도커 엔진을 통해 컨테이너를 관리한다.

도커 엔진

  • 사용자가 컨테이너를 쉽게 사용할 수 있게 하는 주체
  • 컨테이너 라이플 사이클 관리, 컨테이너 관리, 이미지 관리, 볼륨 관리, 네트워크 관리 등의 기능을 제공한다.

호스트 OS 위에 도커 엔진이 컨테이너를 관리합니다.

도커 엔진 위에서 환경만 독립적으로 설정하고 실행하는 거라 컴퓨터에 직접 설치한 것과 차이 없는 성능을 보여줍니다.

가상 컴퓨터보다 훨씬 가볍고 빠르게 이용할 수 있습니다. 각각의 컨테이너를 설치하고 실행하고 켜고 끄고 서로 연동할 수 있습니다. 서버에 무언가가 잘못돼서 고쳐야 하거나, 일부를 업그레이드 해야 하거나 할 때는 일일이 수정하지 않고 컨테이너를 교체해서 실행할 수 있습니다.

도커를 이용한 배포 단계


1. 도커 파일 생성

  • 컨테이너를 어떻게 만들어야 하는지를 설명하는 설명서 혹은 레시피
  • 필요한 파일과 의존성이 명시되어 있고, 환경 변수 설정과 스크립트가 작성되어 있다.
  • 명령어들이 layer 형태로 실행되기 때문에 자주 변경되지 않는 파일부터 작성한다.

2. 이미지 생성

  • 도커 파일을 이용해서 이미지를 만든다.
  • 어플리케이션의 스냅샷 (이미지가 생성된 그 순간의 프로젝트의 상태를 의미)
  • 어플리케이션을 실행하는데 필요한 모든 정보를 포함한다. (불변의 상태)

3. 이미지를 컨테이너 레지스트리에 push

  • 컨테이너 레지스트리는 public, private로 나뉜다.
    - public : dockerhub + a
    - private : AWS, google cloud, Azure


4. 이미지를 pull 받아서 컨테이너를 실행

  • 이미지의 인스턴스
  • 이미지를 통해서 컨테이너를 생성하고 고립된 환경에서 실행한다.

참고 자료


https://peter-cho.gitbook.io/book/undefined/15-devops/docker

https://www.youtube.com/watch?v=LXJhA3VWXFA

https://www.youtube.com/watch?v=IiNI6XAYtrs

https://velog.io/@oneook/Docker로-React-개발-및-배포하기?utm_source=oneoneone

https://hanhyx.tistory.com/27

0개의 댓글