도커 소개

yoongyum·2022년 3월 28일
0

도커 공부하기 🐋

목록 보기
1/7
post-thumbnail

📚개념

Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.
클라우드 시대가 오면서 도커(Docker)의 인기는 계속해서 상승하고 있습니다. 클라우드 컴퓨팅으로 빠르게 인프라를 구축할 수 있고 서비스를 배포할 수 있게 해주는 게 도커입니다.

도커는 Immutable infrastructure(불변적 인프라) 패러다임 기반의 개념적 특징을 갖습니다.

불변적 인프라가 좋은 점

불변적(Immutable) 인프라가 왜 좋은지 알기 위해서, 그렇다면 가변적(Mutable) 인프라의 문제점은 무엇인가? 을 알아보겠습니다.

서버란 OS 설정 변경, 업데이트 또는 애플리케이션 배포가 자주 발생할 때에 서비스의 안정성에 큰 영향을 미치며, 서버 환경 자체가 파괴되는 일도 있습니다.

언제 어느 부분이 변경되었는지 이력 관리가 힘들고, 변경 정보 공유가 되지 않으면 시스템 작업 시에 문제가 발생하여도 대처하기 어렵습니다.

이러한 문제들을 해결하기 위해서 서버를 구축한 이후에는 변경, 업데이트를 할 수 없도록 하는게 불변적(Immutable) 인프라입니다.
만약 변경이 필요한 경우에는 새로운 서버를 구축하는 방법이 있습니다.

CD로 비교를 해보자면 CD로 소프트웨어를 배포할 때 소프트웨어에 변경 사항이 생기면 새로운 CD를 제작하는 개념입니다.
(어릴 때 하던 메탈슬러그 시리즈와 스타크래프트가 생각이 났습니다.)

즉 서비스 운영환경을 host OS와 분리한 후 이미지로 생성하여 서버에 배포하여 실행한다고 보시면 됩니다.
업데이트가 필요하면 이미지를 새로 생성하여 배포합니다.



🐳도커 아키텍처

도커는 클라이언트-서버 아키텍처를 사용합니다. Docker클라이언트는 Docker 컨테이너를 제작, 실행 및 배포하는 작업을 수행하는 Docker 데몬과 대화합니다. Docker 클라이언트와 데몬은 동일한 시스템에서 실행되거나 Docker 클라이언트를 원격 Docker 데몬에 연결할 수 있습니다.

이미지 출처: https://docs.docker.com/get-started/overview/


💿도커 이미지 (Image)

도커에서 서비스 운영에 필요한 서버프로그램, 소스코드 및 라이브러리, 컴파일된 실행파일을 묶은 형태를 이미지라고 합니다. 이미지가 있어야 컨테이너를 생성/실행할 수 있습니다. 더이상 의존성 파일을 컴파일하거나 추가적으로 새로운 것을 설치할 필요가 없는 상태를 의미합니다.

  • read-only
  • 가상머신(VM)에 비하면 굉장히 적은 용량
  • 불변성 (Immutable)

📜도커 파일 (Dockerfile)

도커 이미지를 만드는 명세서라고 생각하시면 편합니다.

  • 코드형태라서 버전관리가 용이
  • 이미지의 기능을 파악하기 쉬움

📦도커 컨테이너 (Container)

도커 이미지가 메모리 위에 상주하여 실제 코드가 수행되는 프로세스입니다.

  • 높은 격리성
  • 휘발성
  • 프로그램을 손쉽게 이동 / 배포 / 관리

🔧도커 데몬 (Docker Demon)

도커 데몬(Dockerd)은 도커 API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 도커 개체를 관리합니다. 또한 데몬은 다른 데몬과 통신하여 도커 서비스를 관리할 수 있습니다.

💽도커 레지스트리 (Registry)

도커 이미지를 저장하는 원격 저장소라고 생각하시면 됩니다.
도커는 기본적으로 도커 허브(DockerHub)에서 이미지를 찾도록 구성되어 있습니다.

  • github와 유사
  • public Registry
    • DockerHub
    • ECR (AWS)
    • GCR (GCP)
    • ACR (Azure)


도커가 갖는 장점

  • 표준화(Standard)
    도커를 사용하면 프로세스의 실행을 표준화시킬 수 있습니다.
    프로세스가 어떠한 방식으로 작동하든 상관없이 동일한 형식으로 프로세스를 실행하고 관리할 수 있습니다.

  • 이식성(Portability)
    프로그램이 어디서 어떻게 만들어졌는지 상관없이 도커 플랫폼 위에서 실행된다면 동일한 실행 환경으로 프로세스를 작동시킬 수 있습니다.

  • 가벼움(Lightweight)
    도커는 실행되는 애플리케이션별로 커널을 공유해서, 다른 가상화 제품에 비해 가볍습니다.

  • 강한 보안(Secure)
    컨테이너라는 고립된 환경에서 실행되므로 보안 측면에서 유리합니다.



VM과 컨테이너 비교

컨테이너와 가상머신은 리소스를 가상화하고 고립화시키는 측면에서는 동일하지만, 실제 동작 방식에서는 차이가 있습니다.
가상머신은 기존 하이퍼바이저를 설치하고, 그 위에 가상OS와 App을 패키징한 VM을 만들어 실행하는 방식인 하드웨어레벨의 가상화를 지원합니다.
반면 컨테이너는 운영체제를 제외한 나머지 애플리케이션 실행에 필요한 모든 파일을 패키징한다는 점에서 OS레벨 가상화를 지원합니다.

컨테이너는 게스트OS와 하이퍼바이저가 없기 때문에 이로인한 오버헤드를 줄임으로써 훨씬 더 가볍게 프로세스를 실행할 수 있고 컨테이너에 대한 복제와 배포가 더 쉽다.

이미지 출처: https://www.toptal.com/devops/getting-started-with-docker-simplifying-devops



이론은 심심하니 다음 포스트에서는 실습준비를 해보겠습니다.

0개의 댓글