Docker Study Review

Youngbin Han <sukso96100@gmail.com>

한영빈

  • 성공회대학교 소프트웨어공학과 16학번
  • SSS 활동중
  • 이것저것 여러가지 합니다(...)
  • sukso96100@gmail.com
  • github.com/sukso96100
  • youngbin.xyz

Index

  • Docker 가 뭐죠?
  • 스터디에서 한 것과 배운 것
  • 프로젝트에 적용한 사례 소개
  • Live Demonstration

Docker 가 뭐죠?

클라우드 컴퓨팅 이전...

  • 물리적인 머신으로 서버를 운영
  • 장비를 구입하고 설치하는데 시간과 비용이 많이 듬
  • 소프트웨어 설치/설정 자동화는 스크립트 등을 이용

클라우드 컴퓨팅 이후

  • 가상머신을 대여하여 사용
  • 기존 물리적 머신보다 유지보수가 용이함
  • 클릭 몇번이면, 가상머신 수백~수천대를 만들고 지울 수 있음
  • 가상머신 수백~수천대는 스크립트로는 한계가 있음

Immutable Infrastructure

  • 서버안의 얽히고 섥힌 의존성 관리하기 귀찮다! 하지 말자!
  • 대신 운영 환경을 통째로 이미지로 만들고
  • 이미지로부터 가상 머신(운영 환경) 수백~수천대를 만들자!
  • 업데이트 해야 한다면?
    • 이미지를 새로 만들고
    • 기존 가상머신 부수고
    • 새 이미지로부터 가상 머신을 만들자!

함정 : 무겁고 느리다.

가상머신(Virtual Machine)

가상머신의 단점

  • 완전한 하나의 머신
    • 항상 가상 머신 안에 OS 가 설치되어 있어야 함
    • 이미지로 만들면 이미지 용량이 매우 커짐
    • 용량이 커서 네트워크를 통해 주고 받기도 부담스러움
  • 하드웨어 까지 전부 다 가상화 함
    • 물리적인 머신에 비해 성능이 떨어짐
    • 다양한 가상화 방식이 나왔지만 성능은 여전히 부족함

컨테이너(Container)

컨테이너(Container)

  • 리눅스 커널 단계에서 지원하는 가상의 격리된 공간을 만들어 내는 기능이자, 경량화된 가상화 방식.
    • LinuX Container(LXC) 라는 이름으로 제공됨.
  • 이미지에는 필요한 라이브러리와 소프트웨어만 포함.
    • OS 가 포함되지 않아 훨씬 용량이 작음.
  • 하드웨어를 가상화 하지 않음.
    • 대신 호스트의 커널을 사용.
    • 가상 머신에 비해 월등히 빠름.
  • 격리된 환경에 항상 동일한 환경 보장.
    • 저는 잘 되는대요? 같은 말을 하게 되는 경우가 사라짐.

Docker

  • 리눅스 컨테이너는 격리된 공간만 제공할 뿐, 서버 운영 등에 필요한 부가적인 기능이 부족함.
  • Docker 는 컨테이너를 기반으로, 이미지를 편리하게 생성, 관리, 배포 할 수 있게 하는 컨테이너 엔진.
  • 이미지 생성과 관리에 특화된 기능과 서비스를 제공함.
    • Docker Hub(hub.docker.com)
      • Docker 이미지 공유 서비스

스터디에서

한 것과 배운것

왜 참여했나요?

  • Docker 를 기반으로 하는 PaaS 도구인 Dokku 를 사용해 옴.
    • 좀 불안정하고, 설정이 꼬이는 경우가 있음.
    • git 으로 push 해서 배포 하는건 좋은데, 배포 성공 할때 까지 지켜봐야 함(...)
      • 그동안 다른 작업을 못함.
  • 그냥 Docker 를 공부해서 쓰는것이 나을 것이라고 판단.
  • 때마침 우분투 커뮤니티에서 Docker Study 계획을 발표함.
  • 어쩌다 보니 스터디 리더가 되었다(...)

스터디 개요

  • 2016.07.29 ~ 2016.09.21
  • 매주 수요일 저녁 7:30 ~ 9:30
  • 토즈 홍대점에서 진행
  • 책 : 가장 빨리 만나는 Docker
    • 원고가 공개되어 있음
    • pyrasis.com/docker.html
  • 미리 공부해와서 질문/답변 주고 받는 방식으로 진행
  • 1주차 - (1~5장) 설치, 컨테이너 사용, 이미지 생성 등
  • 2주차 - (5~7장) 데이터 볼륨, Dockerfile 등
  • 3주차 - (8~9장) 도커로 앱 배포, 도커 모니터링
  • 4주차 - (10~15장) 클라우드에서 도커 사용하기, 도커 허브, 도커 리모트 API
  • 5주차 - (16~20장) Core OS, 도커로 앱 구축 등 (책 진도 끝)
  • 6주차 - 도커로 안드로이드 앱 돌리기
  • 7주차 - LXD 와 도커 비교해보기
  • 8주차 - 도커 네트워크, 스토리지, 보안

몇가지 배운 점들

Docker 는

Immutable Infrastructure 를 철저히 지향함

  • 컨테이너를 업데이트 하는 기능이 없음
    • 대신, 기존 컨테이너를 부수고 최신 이미지로부터 컨테이너를 새로 만들면 됨.
  • 컨테이너에 직접 접속하여, 읽기/쓰기 작업을 하거나 업데이트를 하는 것은 안티 패턴.
    • ​이미 컨테이너 내부에 복잡한 의존성이 설정되어 있고, 컨테이너에 접속하여 이를 관리 하거나 수정 하는 것은 매우 복잡하고 어려움.
    • 파일 시스템 접근이 필요하면, 데이터 볼륨 기능을 이용

완벽히 격리된 환경을

제공하지는 않음

  • 데이터 볼륨 기능을 이용하면, 호스트에서 컨테이너의 파일에 접근하여 쉽게 읽기/쓰기 작업을 할 수 있음.
    • 이는 장점이 되기도 하지만, 보안 문제로 이어질 수도 있다는 단점이 있기도 함.
  • 컨테이너가 가지는 Capability 에 따라, 더 격리된 컨테이너가 될 수도 있고, 덜 격리된 컨테이너가 될 수도 있음.

Remote API

  • Remote API 를 이용하면, REST API 를 통해 Docker 를 제어할 수 있음.
  • 잘 활용하면 원격 제어가 가능할 뿐만 아니라, 자동화도 가능.
  • 정작 본인은 Remote API 를 별로 공부하지 않음(...)

스터디의 끝 == 치킨 + 맥주

프로젝트에

적용한 사례 소개

  • Foressst 앱의 서버측 소스코드 관리에 GitLab.com 을 사용함.
  • GitLab.com 에서 무료로 제공하는
  • 내장된 서비스나 기능이 많아 이를 활용함.

활용한 무료 서비스/기능들

  • 비공개 저장소(무료, 제한없음)
  • 지속적 통합(Continuous Integration)
    • GitLab CI 라는 이름으로 제공됨
  • Docker Registry
    • GitLab Container Registry 라는 이름으로 제공됨
    • Docker Image 보관에 사용

CI, Docker Registry, Docker 를 이용한 서버측 코드 배포

  • CI(지속적 통합) 을 이용하여 Docker Image 생성 자동화
  • 생성된 Docker Image 는 Docker Registry 에 보관
  • 서버측 코드를 배포할 서버에서는 Docker 를 설치하고, Docker Image 를 받아(pull) 이미지로부터 새로운 컨테이너로 만들어 실행(run)

이러한 방식을 통해 얻은 이점

  • Docker Image 빌드 자동화
    • 자동으로 빌드 되는 동안 딴짓을 하거나 다른 작업을 계속 할 수 있음.
  • Docker Registry, Docker 를 이용한 배포
    • 서버측 코드 실행을 위해 뭘 설치하고 설정해야 하나 고민할 필요 없이, Docker 설치하고 Docker Registry 에서 이미지를 받아 바로 배포하면 됨. 이미지 안에 이미 의존성이 모두 포함되어 있음.
    • 항상 격리된 환경에 같은 환경 이므로, 테스트 서버에서는 잘 되다가 실제 서버에서는 안되는 등의 문제가 사라짐.
    • 배포 과정이 더 빠르고 단순해짐(서버 이전도 마찬가지)

Docker Compose

  • 컨테이너간의 연결 설정, 포트 설정, 실행할 컨테이너 갯수 등을 미리 하나의 설정 파일에 정의하고. 설정 파일에 따라 한번에 여러개의 컨테이너를 켜고 끌 수 있게 해줌.
  • 로드 벨런싱을 하거나, DB 컨테이너와 연결설정을 하는 등, 다수의 컨테이너로 하나의 서비스를 구성하여 실행할 때 유용함.

Live Demonstration

감사합니다!

Docker Study Review

By sukso96100

Docker Study Review

  • 612