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

Docker 入門

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for Ranks Ranks
November 21, 2019

Docker 入門

初学者向けの Docker 解説スライドです。

Avatar for Ranks

Ranks

November 21, 2019

More Decks by Ranks

Other Decks in Technology

Transcript

  1. はじめに • 内容: Docker ◦ コンテナ ◦ Docker ◦ その他関連事項

    • 初学者むけ ◦ Docker使っている人は もの足りないかも ➢ 少し周りの話をいれた 2
  2. Microservices Architecture • サービス全体を機能ごとに分けてサービス化 • それぞれがそれぞれの仕様で作成 ◦ 言語,アーキテクチャ,ライブラリ • 各機能間は

    API で繋ぐ 4 Web アプリケーション 全体 単一 Web アプリケーション 全体 Function1 Function2 Function3 monolith microservices
  3. Microservices Architecture メリット/デメリット • メリット ◦ サービス・チームによって異なる技術を使える(最適な技術) ◦ 耐障害性が高い ◦

    スケーリングやデプロイが容易 • デメリット ◦ パフォーマンスの悪化 ▪ オーバーヘッドの増加 ◦ 運用・実装の難化 ◦ DB などのデータ整合性が難しい 5 Netflix の Microservices: 出典
  4. コンテナ型仮想化を使う! • コンテナ環境の利点 ◦ ホストOSを使用した仮想化 ◦ オーバーヘッドが少ない ◦ 多くの環境数を実行できる ◦

    他の環境でも実行できる 7 Hardware Hardware OS Container VM VM Lib GPU GPU Application Container VM OS Guest OS Lib App App アプリケーションをポータブルに! Microserviceと相性が良い! NIC NIC
  5. コンテナとは 10 構築 運送 実行 • 構築 ◦ 必要な環境を組立 •

    運送 ◦ 環境に移動 • 実行 ◦ 動作させる
  6. コンテナ型仮想化 • 構築 ◦ コードで書ける ◦ コンテナ内に依存関係をまとめられる • 運送 ◦

    イメージごとに移動できる • 実行 ◦ どこでも実行可能 ◦ ホストの環境によらない 11 Hardware Hardware OS Container VM VM Lib GPU GPU Application Container VM Hypervisor/OS Guest OS Lib App App NIC NIC
  7. コンテナの内部実装 • namespace(名前空間) ◦ コンテナを隔離する ◦ namespaceごとにアクセスできる ▪ プロセス ▪

    ネットワーク など • cgroups ◦ 使用するリソースの管理 ▪ CPU,メモリなど • UnionFS ◦ ファイルシステムをレイヤーごとに管理 12 Linux Kernel • namespace • cgroups ランタイム コンテナランタイム
  8. コンテナ型仮想化の種類 • System Container ◦ ハイパーバイザーの代用 ◦ 例: LXD •

    Application Container ◦ アプリケーションを動作させる ◦ 例: Docker 13
  9. 再掲: コンテナとは 14 構築 運送 実行 • 構築 ◦ 必要な環境を組立

    • 運送 ◦ 環境に移動 • 実行 ◦ 動作させる
  10. Docker • コンテナ型仮想化ソフトウェア ◦ Docker社が開発 ◦ コンテナの実行環境(ランタイム)と周辺ツール ◦ Go言語で書かれている •

    内部構成 ◦ containerd と runC • イメージでコンテナを管理 ◦ Dockerfileで記述 • 1コンテナ 1プロセス 16
  11. containerd • コンテナの管理を行う ◦ 実行状態管理 ◦ 監視 ◦ Docker Image

    の管理 • Hi-level runtime ◦ CRI の情報を受け取る ◦ runC へ OCI の情報を送る • 他には ◦ cri-o, gVisor, Frakti など 17 runC containerd OCIでやりとり
  12. runC • コンテナの実行や作成を行う ◦ プロセス実行 • Low-level runtime ◦ OCI

    ファイルを受け取り実行 • Docker では runC 以外の ランタイムも使える 18
  13. CRI と OCI • どちらもインターフェイス • Container Runtime Interface ◦

    オーケストレータからコンテナランタイムへ • Open Container Initiative ◦ コンテナランタイムからランタイムへ 19
  14. Dockerfile • DockerImageを記述するためのファイル 21 FROM centos:7 RUN yum -y update

    RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/ nginxrelease-centos-7-0.el7.ngx.noarch.rpm RUN yum install nginx –y ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"] レイヤー に分けて 保存
  15. Docker Image • コンテナを実行するのに必要なファイルシステム 22 • 内部はファイルの集まり • レイヤー構造 ◦

    UnionFS • 基本的にReadOnly ◦ 起動するとWriteできるレイヤーが構成される • docker history コマンドで見れる FROM CentOS RUN yum -y ... RUN rpm -ivh... RUN yum install ENTRYPOINT
  16. Docker Image は毎回つくるの? • 使えるレイヤーは使いまわす • ビルドキャッシュ ◦ すでにあるレイヤーはそのまま使う •

    DockerHub ◦ 公式のイメージレポジトリ ◦ 誰でもアップロード可能 ▪ セキュリティに不安 • プライベートリポジトリ ◦ ローカルにDockerHubを建てる 23
  17. Docker コマンド抜粋 • docker build ◦ Dockerfile からイメージを作る • docker

    start ◦ コンテナの起動 • docker run ◦ イメージの作成とコンテナの起動 • docker rm/rmi ◦ コンテナ/イメージの削除 • docker exec ◦ コンテナの中でコマンド実行 24
  18. Docker-compose • 複数のコンテナからなるアプリケーションを定義・実行 • 複数プロセス使うときに使用 25 version: '2' ## version

    指定 services: web: build: . ## 現在のディレクトリからビルド ports: - "5000:5000" ## 使用ポートは5000 volumes: - .:/code ## /codeでマウント depends_on: - redis ## redisサービスと接続 redis: image: redis ## DockerHub の Redis イメージ使用
  19. 参考文献(サイト) • LXD ◦ https://linuxcontainers.org/ja/lxd/introduction/ • Docker ◦ https://www.docker.com/ •

    CNCF ◦ https://landscape.cncf.io/selected=containerd • containerd ◦ https://containerd.io/ • runC ◦ https://github.com/opencontainers/runc 30