Home Docker
Post
Cancel

Docker

Intro


웹 기술을 주제로 하는 공통 프로젝트에서, 서비스의 배포와 Kurento 미디어 서버 실행을 위해 사용할 Docker에 대해 학습하려 한다.

Main


Docker란 ?

애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼

  • 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징한다.
  • 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장 가능하다.


Immutable Infrastructure

변경 불가능한 인프라

도커는 Immutable Infrastructure Paradigm (변경 불가능한 인프라 패러다임)이라는 개념을 기반으로 한다.

변경 불가능한 인프라란, 말 그대로 서버를 변경 불가능한 것으로 취급하는 개념이다. 변경사항이 생길 경우, 기존의 서버를 수정하기보다 아예 새로운 서버를 구축하여 서버를 항상 깨끗한 상태로 유지한다.


변경 가능한 인프라와의 차이점

기존에는 서버 교체비용이 많이들었기 때문에, 구축하고 난 뒤 유지보수하면서 서버를 최대한 오랫동안 사용하는 것이 일반적이었다. 장비 뿐 아니라 OS와 미들웨어 벤더까지, 인프라 관련 여러 구성요소를 변경하면서 운영관리 해왔다. 인프라 구축 규모가 크면 클수록 인프라 구성관리에 대한 부담도 늘어났다.

  1. 항상 운영 가능 상태

    변경 불가능한 인프라는 서버를 일회용 취급하여, 항상 운영가능한 상태를 유지할 수 있다. 기존처럼 하나의 서버를 유지보수하며 오래 쓰기보다, 변경사항이 생길때마다 새로 배포하는 개념으로 상태유지가 되는 것이다.

  2. 모든 서버를 동일한 상태로 유지가능

    서버들을 오랜시간동안 업데이트 및 패치를 거듭하며 자동화된 방식으로 관리하면, 관리의 효율성은 보장하지만 모든 서버들의 상태가 동일하게 유지된다고 할 수는 없다. 변경불가능한 인프라에서는 변경사항 발생 시 모든 서버의 이미지를 새로 만들기 때문에 모든 서버가 동일한 상태임이 보장된다.

  3. 테스트의 편의성

    변경불가능한 상태에서는 개발/스테이징/운영 단계에서 모든 서버 상태가 동일하게 보장되어 있기 때문에, CI를 통한 테스트에 대한 신뢰도가 높아진다.

  4. 애플리케이션 이식성 향상

    Docker Hub 를 통해 컨테이너 이미지를 공유 할 수 있기 때문에 전세계 누구나 동일한 시스템 사양이면 같은 환경의 서버를 구축 할 수 있다. 머신 이미지와 간단한 스크립트를 공유하면 손쉽게 개발환경을 공유 가능함.


🗣 한줄요약

인프라의 일관성과 안전성 보장 및 간단하고 예측 가능한 배포 프로세스의 포함


이미지와 컨테이너

Image

서비스 운영에 필요한 서버 프로그램소스코드 및 라이브러리컴파일된 실행 파일을 묶는 형태

이미지는 더 이상의 의존성 파일을 컴파일하거나 이것저것 설치할 필요 없는 상태의 파일을 의미한다. 예를 들어 Ubuntu이미지는 Ubuntu를 실행하기 위한 모든 파일을 가지고 있으며, Oracle 이미지는 Oracle을 실행하는데 필요한 파일과 실행명령어, port 정보 등을 모두 가지고 있다.

Dockerfile로 이미지를 만들게 되는데, 이 파일을 통해 이미지 생성과정을 보거나, 수정할 수 있다.

Container

응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징  or 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술

도커에서는 소프트웨어를 컨테이너 단위로 패키징 하여 배포한다. 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든것이 포함되어 있다.

🗣 이미지 vs 컨테이너 > 이미지 : 컨테이너 생성에 필요한 모든 파일 및 설정값 컨테이너 : 이미지를 실행한 상태

⇒ 도커는 하나의 이미지를 만들어 자장한 후 하나의 이미지에서 여러개의 컨테이너를 생성할 수 있다. 이미지 하나만 만들어두면, 각각의 독립된 가상공간에서 컨테이너를 실행가능하다.

Docker vs VM

게스트 OS의 유무 차이

image

가상머신은 호스트OS 위에 또다른 OS(게스트OS)를 가상화한다.

도커는, 같은 OS에서 프로세스를 격리 시켜 마치 독립적으로 실행하는 것처럼 사용한다.

이미지파일을 git처럼 변경분만 저장하기 때문에 컨테이너를 여러개 띄워도 추가적인 용량은 거의 0M정도 이다. 실제로 이미지를 원격 저장소에 저장할 때도 push, pull같은 명령어를 이용함.

VM은 추가될때마다 OS를 위한 자원할당이 필요하지만, 도커는 어플리케이션을 구동하는데 필요한 패키지만 있으면 컨테이너를 구동시킬 수 있다.

자원의 효율성과 속도(성능)차이에서 도커가 훨씬 좋다 !


무중단 배포

애플리케이션의 중단 없이 배포를 하는 것

이전 서비스를 종료하고 신버전의 서비스를 시작하기 전까지, 서비스가 중단되는 시간다운타임(downtime)이라고 한다. 도커로 컨테이너를 배포할 시에도 다운타임이 존재하고, 무중단 배포를 통해 이를 해결할 수 있다.

image

배포 기법에는 위와같이 대표적으로 세가지가 있지만, 도커의 Immutable Infrastructure이 배경이 되는 Blue/Green Deployment 를 사용하여 무중단 배포를 하자.

https://blog.kakaocdn.net/dn/XRBsk/btrjkiiLNDT/OO4IpUkXGRnSaOkp9t2aC1/img.gif

Blue-Green Deployment

주요 클라우드 환경에서 적용되는 배포 패턴으로, Blue는 구버전, Green은 신버전을 의미한다.

운영중인 구버전과 동일하게 신버전의 인스턴스를 구성한 후 로드밸런서를 통해 모든 트래픽을 한번에 신버전쪽으로 전환하는 방식이다.

  • 장점
    • 구버전의 인스턴스가 그대로 남아있어서 손쉬운 롤백 가능
    • 구버전의 환경을 다음 배포에 재사용 가능
    • 운영환경에 영향을 주지 않고 새버전 테스트 가능
  • 단점
    • 시스템 자원이 두배로 필요함
    • 새로운 환경에 대한 테스트 전제됨



Outro


요약 정리

도커를 사용하면,

  • 더 많은 소프트웨어를 더 빨리 제공
  • 운영 표준화 : 손쉽게 배포하고, 문제를 파악하고, 수정을 위해 롤백 가능
  • CI/CD 면에서, 환경을 표준화하고 언어 스택 및 버전 간의 충돌을 제거하여 빠른 배포 가능
  • 자원의 효율적인 사용으로 인한 비용절감

이 가능하다. 도커 짱 !



Docker란 무엇입니까?

Immutable infrastructure with Container

클라우드는 서버를 한번 쓰고 버린다고? Immutable infrastructure & Docker

This post is licensed under CC BY 4.0 by the author.