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