Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dockerの基本的な話

 Dockerの基本的な話

グリー社内勉強会「Mini Tech Talk」発表資料 (20150327)

Dockerの基本的な話 / 足立 紘亮(@foostan)

※「Mini Tech Talk」とは、グリー社内で毎週金曜のランチタイムを利用して開催されている技術勉強会です

gree_tech

March 27, 2015
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. DOTCLOS BECOMING DOCKER, INC. • https://blog.docker.com/2013/10/dotcloud-is-becoming-docker-inc/ • http://blog.dotcloud.com/dotcloud-paas-joins-cloudcontrol 社名変更(dotcound, inc.

    -> docker, inc.) PaaS事業売却 dotCloudで利用されていたDockerを切り出して社名を変更 その後、dotCloudを売却し、Docker, Inc. はDockerに専念
  2. 隔離空間で実行 • Namespaceによる隔離 ◦ PID: プロセス空間の隔離 ◦ MNT: ファイルシステムのマウント空間の隔離 ◦

    IRC: 共有メモリやセマフォなどの隔離 ◦ UTS: uname() システムコールで取得できる情報の隔離 ◦ NET: ネットワークの隔離 • Cgroupによる隔離 ◦ cpu ◦ cpuset ◦ memory ◦ device 参考: http://blog.etsukata.com/2014/05/docker-linux-kernel.html
  3. https://www.docker.com/whatisdocker/ より転載 VMとの違い • VM: `マシン` を仮想化して、その上 にGuestOSをインストールしアプ リを動かす •

    Docker(コンテナ): 実行空間を隔離 してアプリを動かす • VMの良いところ ◦ 物理と同様の使い勝手 • Dockerの良いところ ◦ 軽量 ◦ 速い ◦ オーバーヘッドが少ない
  4. どのような用途で使われている か • Continuous Integration ◦ テスト(CI)を回すときに利用する事例 ◦ 依存しているライブラリやソフトウェアをパッケージ ングしておいて、クリーンな環境でのテストを瞬時に

    行う • Easy Application Deployment ◦ デプロイを簡易化する事例 ◦ パッケージングされたイメージをアップロードして起 動するだけで済む 参考: https://www.docker.com/resources/usecases/
  5. どのような用途で使われている か • Distributed applications to scale ◦ マイクロサービスと合わせる事例 ◦

    多くのサービスを容易にスケール可能としている • Platform-as-a-Service (PaaS) ◦ PaaSで提供するライブラリやソフトウェアをパッケー ジングしておいて、瞬時に提供することが可能 参考: https://www.docker.com/resources/usecases/
  6. • サブドメインと立ち 上げるブランチを指 定すると、そのサブ ドメインのURLで開 発環境がたちあがる $ curl http://docker.myapp.example.net/api/launch ¥

    -d subdomain=cool ¥ -d branch=feature/cool-cool-cool ¥ -d image=myapp:latest http://tech.kayac.com/archive/mirage_for_docker.html より転載 Dockerで非エンジニアでも開発環境を上げ下げできる、 mirageというツールを作りました(面白法人カヤック様)
  7. Mac/Windowsでとりあえず使うためには • Boot2Docker ◦ Virtual Box上にDocker用VMを立ち上げる ◦ API経由でMac/Windowns上でDockerが動いているように見せてる • Vagrantで任意のOS

    + Docker Provisioner ◦ Docker Provisionerで起動時(provision)に最新のDockerがインスト ールされる ◦ Dockerのインストールにそこそこ時間がかかる • VagrantでCoreOS ◦ CoreOSは標準でDockerが入っている(後述)
  8. DEMO: nginxを起動してみる $ docker run -d -p 10080:80 nginx $

    docker exec -it {コンテナID} /bin/bash docker-demo $ echo "Hello Docker." > /usr/share/nginx/html/index.html docker-demo $ exit $ curl 127.0.0.1:10080 Hello Docker!
  9. DEMO: Imageを作ってみる $ vim Dockerfile FROM golang WORKDIR /go RUN

    go get github.com/hashicorp/consul WORKDIR /go/src/github.com/hashicorp/consul RUN make ENTRYPOINT ["consul"] $ docker build -t consul . ~ 省略 ~ $ docker run -i --rm consul
  10. メリット • 最低限のパッケージで構成されている ◦ インストールや設定の作業時間が短い ◦ ベースOSのディスク使用量が少ない ◦ セキュリティーアップデートなどの運用負荷が少ない •

    最低限のサービス(機能)のみが動作する ◦ ベースOSのCPU、メモリ等のリソース使用量が少ない ◦ サービスが少ないため、脆弱性のリスクが軽減される • リソースの空き容量が多くなる ◦ より多くのコンテナを起動できる http://thinkit.co.jp/story/2015/03/06/5672 より転載
  11. 特徴 • パッケージの管理コマンドが存在しない Docker向けOSには、パッケージ管理コマンド(yumやapt)が存在しない。これは機能を追加する際には、パッケージのインスト ールではなく、コンテナを起動して実現することが前提となっているためと考えられる。この一般的なOSとの差異は、基本点に 全てのDocker向けのOSに共通する概念である。 • ファイルシステムの大部分が読み込み専用 ベースOSのファイルシステムは、コンテナを格納する領域以外の大部分が読み込み専用となっている。これも前項の前提と同じ で、必要な機能はコンテナの起動で実現するため、更新が不要なベースOS部分を保護するためにこのようになっていると考えら

    れる。 • Dockerを管理するための必要なコンポーネントが標準で提 供されている 必要なコンポーネントは(一部を除き)標準でインストールが行われる。Dockerのみではなく、Docker実行環境およびコンテナ の管理を行うコンポーネント群が自動でインストールされるのも、大きな特徴となっている。コンテナの可用性についての製品は、 製品ごとに独自の取り組みが行われており、他ベンダーの製品も積極的に利用されている。たとえばProject Atomicでは、Google が開発するKubernetesが選択されている。 http://thinkit.co.jp/story/2015/03/06/5672 より転載
  12. 代表的なOS - CoreOS - CoreOS, Inc. - https://coreos.com/ - Project

    Atomic - Red Hat, Inc. - http://www.projectatomic.io/ - Snappy Ubuntu Core - Canoncial UK Ltd. - http://developer.ubuntu.com/en/snappy/
  13. Dockerをシングルホストで動かす場合 proxy app db slave cache log db master -

    ◦ 単純で構築が用意 - ☓ 非冗長 - ホストが落ちればすべて落ちる - 負荷分散できない
  14. proxy app cache - ◦ 耐障害性の向上 - ◦ 負荷分散可能 -

    ◦ 1コンテナあたりのリソース増加 - ☓ 構成が複雑 Dockerをマルチホストで動かす場合 db slave proxy app app db master log db slave cache log
  15. proxy cache 各ホストで起動するコンテナを分散させたい db app db master log proxy app

    db cache log db master - 良い例: 各ホストにコンテナが分散されている - 悪い例: 1ホストにコンテナが集中している
  16. マルチホストを想定したDocker関連ツール - Kubernetes - Fleet (CoreOS + etcd) - Docker

    Machine / Swarm / Compose オーケストレーションツール
  17. Kubernetes - 複数のコンテナをマルチテナ ントに適切に自動配置する - ホストの増減にともなってコ ンテナの再配置する - 複数のコンテナを Pod/Controllerで集約

    - Pod/Controllerはラベルで管 理する - Podへのエンドポイントをサ ービスとして定義する http://kubernetes.io/ より転載
  18. proxy service app service db-s service db-m service cache service

    log service c c c c c c c c c c c c c c c c Pod/Controller/Serviceによるコンテナの抽象化
  19. - pod - イメージ: nginx - port: 80 - label:

    frontend - container - pods数: 3 - selector: frontend - label: frontend (※ 一部省略)
  20. Dockerfileの問題点と課題 - 複数のDockerfileを継承できない - Fromで指定できるのは一つだけ - ファイルの分割が出来ない - 独自フォーマット -

    Dockerfileの再現性が担保されない - 同一のDockerfileから同じイメージが出来ると は限らない 参考: http://deeeet.com/writing/2015/02/17/docker-bad-points/
  21. DockerHubの問題点と課題 - DockerHubには誰でもイメージをアップロード出来る - 悪意のあるイメージがアップロードされる可能性が ある - 悪意があるかどうかの判断は実際に起動するまでわ からない -

    docker pull するとイメージのダウンロード及び展開 まで行われる - ダウンロードが遅い - 海の向こう側でホストされているので速度が出ない 参考: http://deeeet.com/writing/2015/02/17/docker-bad-points/
  22. Docker, Inc の今後について - 以前まではシンプルな Docker Engine の開発に注力し ていた -

    今後は、Docker Machine / Swarm / Composeといった、 Dockerをより良く利用するためのツールが増えていく と考えられる - Kitematicを買収するなどして、GUIツールの開発も進 めていくのでは
  23. AppContainer / Rocket - Dockerの問題点や今後の方針を疑問視していた CoreOSが発表したもの - AppContainer - コンテナイメージの仕様

    - 標準化を視野に入れている - Dockerイメージからの変換が可能 - Rocket - AppContainerを動かすための実装 - 機能面でDockerに劣っているため、これからといっ た印象