Docker History & Ecosystem

Daekwon Kim

propellerheaven@gmail.com

naycot

nacyot.jpeg

Shomney(Remotty)

pTWEwMw.png

Docker Seoul Meetup 지원

C2qgTng.png

Toc

  • Docker History
    • History
    • Roadmap
  • Docker Ecosystem
    • Registry
    • Docker Server
    • Docker Client
    • Monitoring
    • Clustering
    • PaaS
    • Service Discovery
    • Dynamic Configuration

Z25RDZ3.png

Docker

  • 격리된 프로세스 실행(공간, 자원)
    • 컨테이너
    • LXC, libcontainer, cgroup
    • 가상화 기술 / 빠름
  • 계층화된(Layered) 저장장치
    • AUFS, devicemapper, BTRFS
    • 모든 레이어는 이미지이자 공유 가능
    • Dockerfile로 관리 가능
  • 이미지 이동성(portability)
    • 어떠한 데이터나 어플리케이션도 이미지로 추상화
    • 도커 수준에서 이미지/컨테이너 조작 가능
    • Dokcer Hub / Private Docker Registry 지원

ALEg1bj.png

History(1)

  • 0.1.0 (2013-03-23)
  • W4xFMMC.png

History(2)

  • 0.1.0 (2013-03-23)
  • 76nTYha.png

History(3)

  • 0.1.0 (2013-03-23)
  • 0.2.0 (2013-04-23)
  • 0.3.0 (2013-05-06)
  • 0.4.0 (2013-06-03)
  • 0.5.0 (2013-07-17)
  • 0.6.0 (2013-08-22)

History(4)

  • 0.7.0 (2013-11-25)
    • Device Mapper 지원
    • 컨테이너 간 링크 기능 도입
    • 리다이렉트 기능 확장
    • 컨테이너 이름 도입
  • 0.8.0 (2014-02-04)
    • Dockerfile Add 캐시
    • Dockerfile Onbuild 지시자
    • BTRFS 지원
    • MacOSX 공식 지원(boot2docker)

Device Mapper

  • CentOS / RHEL 지원!

History(5)

  • 0.9.0 (2014-03-10)
    • LibContainer 도입(기본 드라이버)
  • 0.10.0 (2014-04-08)

LibContainer

5Ylb4Q2.png
  • 더 이상 LXC 의존적이지 않음
    • docker -d -e lxc

History(5)

  • 1.0.0 (2014-06-09)
    • DockerCon에서 발표
    • Docker Hub
    • Enterprise Support, Training, Consulting
    • 안정화(문서에서 경고 문구 사라짐)
    • pause / unpause
    • docker images filter 옵션 추가(dangling=true)
  • 1.1.0 (2014-07-03)
    • 로그 tail 기능
    • Commit 시 컨테이너 Pause 기능
    • 전체 파일 시스템 마운트
    • .dockerignore

History(6)

  • 1.1.2 (2014-07-23)
    • <<<— 지금 여기

Histroy(7)

Z25RDZ3.png

T7KaCcF.png

Roadmap

  • 권한
    • 권한 세부 정의
    • 장치 권한
  • 로그
    • 지원 로그 디바이스 추가
    • 로그 옵션 추가
  • 리스타트 기능
  • 리모트 볼륨

Roadmap(1)

  • --cad-add, --cap-drop 특정 권한 부여
    • --privileged 옵션은 모든 권한 부여
  • --device 옵션 추가
    • Host의 장비를 연동하려면 --privilegde 옵션이 필요했음
    • --device 옵션으로 특정 장비 연동 가능
  • --restart 컨테이너 자동 재시작 지원
    • --restart=always 종료되면 무조건 재시작
    • --restart=on-failure:5 종료되면 5번까지 재시도

Roadmap(2)

  • 리모트 볼륨 지원
    • boot2docker와 같은 환경에서 -v 옵션 사용 가능
  • 다중 명령어 지원(Spawning Multiple Commands)
    • docker exec ... 실행중인 컨테이너에 대해서 실행 가능
  • 새로운 로그 드라이버 추가
    • none, default, syslog
  • 로그 옵션 추가
    • --logging-opt truncation=20mb
    • --logging-opt rotation=1gb
  • 다이나믹 링크
  • 멀티 호스트 링크
  • 컨테이너 오케스트레이션

Docker 1.2 (2014-08-23)

  • --restart
  • --cap-add, --cap-drop
  • --device
  • /etc/hosts, /etc/hostname, /etc/resolve.conf 수정가능

Docker Ecosystem

Github Ecosystem

CbXbIMJ.png

Docker 성장

HTh66VU.png

특징

  • Docker Ecosystem 역시 급성장중
    • Docker 지원(확장)
    • Docker WebUI / 모니터링
    • 이미지 / 컨테이너 지원
    • Platform as a Service(PaaS)
    • Service Discovery
    • Ochestration
  • Docker 툴들은 Docker를 사용

Docker Image

  • Image Server
    • Docker Hub
    • Private Registry
    • Quay.io
  • Image Build
    • Packer

Docker Hub

  • Docker 공식 서비스
  • 이미지 공유
    • Public / Private
    • 도커 공식 이미지 지원
    • 다양한 오픈 소스 이미지
  • Github 지원
    • Dockerfile
    • 커밋에 따른 자동 빌드
  • Docker 클라이언트에 기본 연동

Docker Hub Process

build_ship_run.gif Announcing Docker Hub and Official Repositories

Docker Hub Usage(1)

http://hub.docker.co.kr 가입 후 저장소 생성

$ docker login
$ docker push <id>/<repo_name>

Docker Hub Usage(2)

okxxQxp.png

Private Registry

  • Self-hosted Docker Image Server
  • Docker Registry
  • 파이썬 기반 / 도커 이미지 지원
  • SSL 지원
  • Storage Driver
    • s3
    • file
    • elliptics / gcs / glance
  • 이미지 검색 지원

Docker Registry Usage(1)

Registry Server(1.1.1.1)

$ docker run \
         -e SETTINGS_FLAVOR=s3 \
         -e AWS_BUCKET=acme-docker \
         -e STORAGE_PATH=/registry \
         -e AWS_KEY=AKIAHSHB43HS3J92MXZ \
         -e AWS_SECRET=xdDowwlK7TJajV1Y7EoOZrmuPEJlHYcNP2k4j49T \
         -e SEARCH_BACKEND=sqlalchemy \
         -p 5000:5000 \
         registry

Docker Registry Usage(2)

Client

$ docker login 1.1.1.1

# push
$ docker rename ubuntu 1.1.1.1/ubuntu
$ docker push 1.1.1.1/ubuntu

# pull
$ docker rmi 1.1.1.1/ubuntu
$ docker pull 1.1.1.1/ubuntu

Packer

Docker Server

  • Virtual Machine
    • Boot2Docker
    • Vagrant
  • Cloud
    • Digital Ocean
    • Google Computer Engine
    • Google App Engine
    • Aws Beanstalk

Boot2Docker

  • 경량화된 리눅스 배포판
  • VirtualBox 기반
  • VM을 통해 Mac / Windows 지원
    • VM에서 Boot2Docker를 실행하고, Docker Server 실행
    • 이 때 Server는 http를 통해 api 조작 가능하도록 설정
    • Mac/Windows에서는 Docker Client로 VM의 서버 조작

Boot2Docker Usage

$ brew install docker boot2docker
$ export DOCKER_HOST=tcp://
$ boot2docker init
$ boot2docker up

Docker Client

  • WebUI
    • DockerUI
    • Shipyard
    • Docland
  • Client Extention
    • Fig
    • Centurium
    • Decking.io

DockerUI

  • Javascript 기반 / 도커 이미지 지원
  • Docker Image / Container 관리를 위한 WebUI
  • 단일 호스트 지원
$ docker run -d -p 9000:9000 \
             -v /var/run/docker.sock:/docker.sock \
             crosbymichael/dockerui -e /docker.sock
# Open http://0.0.0.0:9000

DockerUI

3XfB6C7.png

Fig

  • yml로 Docker 실행 명령 지원
  • 단일 호스트 내에서 여러 컨테이너 설정 가능
    • 의존 관계에 따라서 실행 순서 조절
  • Orchestration 지원?

Usage(1) fig.yml

Graphite fig.yml

whisper:
  image: nacyot/whisper

carboncache:
  image: nacyot/carbon-cache
  ports: 
    - "2003:2003"
    - "2004:2004"
    - "7002:7002"
  volumes_from:
    - whisper
  environment:
    - NOME_NAME=cache

graphiteweb:
  image: nacyot/graphite-web
  ports:
    - "8000:80"
  environment:
    - CARBONLINK_HOSTS=172.17.42.1:7002
  volumes_from:
    - whisper

Usage(2)

Fig 설치

$ curl -L https://github.com/docker/fig/releases/download/0.5.2/linux > /usr/local/bin/fig
$ chmod +x /usr/local/bin/fig

Fig 실행하기

# fig.yml이 있는 디렉토리에서
$ fig up

Monitoring

  • Logspout
  • cAdvisor
  • Datadog
  • Diamond(Cgroup)
    • Graphite / Grafana

Logspout

  • Docker Log Routing
  • Syslog 지원
    • 외부 로그 서비스 연동 용이(papertrail 등)
    • fluentd syslog plugin
  • HTTP api 지원 / 세부 조작 가능
  • STDOUT / STDERR만 처리 가능(Docker Spec)

Logspout Usage

http api로 로그 확인

$ docker run -d -p 8000:8000 \
    -v=/var/run/docker.sock:/tmp/docker.sock \
    progrium/logspout
$ curl 0.0.0.0:8000/logs

syslog 연동

b$ docker run -v=/var/run/docker.sock:/tmp/docker.sock \
    progrium/logspout syslog://logs.papertrailapp.com:55555

ITbBbOK.png

cAdvisor

  • 구글이 만든 lmctfy 모니터링 툴
  • Docker 지원
$ docker run \
    --volume=/var/run:/var/run:rw \
    --volume=/sys:/sys:ro \
    --volume=/var/lib/docker/:/var/lib/docker:ro \
    --publish=8080:8080 \
    --detach=true \
    --name=cadvisor \
    google/cadvisor:latest

cAdvisor 화면

JevY1Mt.png

Clustering

  • Ambassadord
  • CoreOS
  • Kubernates
  • Mesosphere

CoreOS

  • Docker 전용 OS
    • 메모리 114MB
  • systemd
  • etcd
    • Service Discovery
    • Docker 클러스터링
  • fleet
  • toolbox

CoreOs Usage

$ git clone git@github.com:coreos/coreos-vagrant.git
$ cd coreos-vagrant
$ vagrant up
$ vagrant ssh core-01
Last login: Sat Aug  9 09:30:27 2014 from 10.0.2.2
CoreOS (alpha)
core@core-01 ~ $

PaaS

  • Dokku
    • sh 스크립트로 구현한 mini-heroku
    • 작동 가능하지만, 실사용은 어려움
    • 단일 호스트 지원
  • Flynn
    • Docker 기반의 오픈소스 Heroku
    • Jeff Lindsay(Dokku), Jonathan Rudenberg 주도
    • 다중 호스트 지원
    • (거의) 모든 구현도 Docker 이미지/컨테이너로 모듈화
  • Deis
    • CoreOS 기반의 오픈소스 PaaS
    • 멀티 호트스 지원
  • Tsuru
  • Octohost

Service Discovery

  • SkyDock
  • Consul
  • etcd

Dynamic Configuration

  • Confd
    • etcd/consul의 데이터 스토어 기반
    • 환경 설정 템플릿
    • sh 실행 및 환경 설정 파일 재작성
  • (configurator)
  • (envconsul)
    • Consul의 데이터 스토어 기반 환경변수 설정

감사합니다.