Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DockerとDocker Hubの操作と概念

13,796 views

Published on

Dockerコンテナとイメージの違いについて、コマンドを交えて解説。

JAWS-UG コンテナ支部 入門編#4 発表資料
2017年3月30日(木) 19:00-
#jawsug_ct #jawsug
https://jawsug-container.connpass.com/event/51776/

Published in: Technology
  • Be the first to comment

DockerとDocker Hubの操作と概念

  1. 1. 黒い画面が大好きなヒト向け コマンドで学ぶ DockerとDockerHubの 概念と操作 Engineer / Technology Evangelist @zembutsu 前佛 雅人 ZEMBUTSU Masahito JAWS-UG コンテナ支部 入門編 #4 2017年3月30日(木)
  2. 2. http://docs.docker.jp/ 2 このドキュメントの翻訳をしているヒト
  3. 3. 誰? • 運用系(サーバ) … データセンタの運用・サポート対応 • HashiCorp / Munin / Zabbix / Docker などに興味 • エンジニアのためのプレゼン研究会 • ドキュメント翻訳 • 稲作農家(富山県滑川市出身) • インターネットの力で普通の人が価値を高められる社会 3 Software Degisn 2017年2月号→ Authorized Docker Trainer (2016.6~)
  4. 4. 今日お伝えすること コンテナは技術、Dockerは仕様 DockerHubが中継点 コマンドでコンテナとイメージを操作
  5. 5. 技術と仕様
  6. 6. 6 技術と仕様 Technology Specification コンテナ Docker
  7. 7. 7 サービスを 提供したい 開発 環境 テスト 環境 準備 環境 本番 環境 都度、環境構築課題 異なるOS環境課題 都度、プロビジョニング課題 動かない課題 時間がかかる課題 遅い課題 面倒課題 アプリを 動かしたい コンテナ 開発 テスト 準備 本番
  8. 8. “Docker allows you to package an application with all of its dependencies into a standardized unit for software development.” www.docker.com 8 全ての依存関係をパッケージ化して、コンテナとして動かす
  9. 9. 9 コンテナ 20世紀最大の発明
  10. 10. 10
  11. 11. 11 技術と仕様 Technology Specification コンテナ Docker
  12. 12. 12 Linux kernelのコンテナ化技術 • 名前空間とコントロール・グループの制御により、 • プロセス環境を分離し、リソースも制限できる • この技術をDocker Engine (dockerd) で制御 namespace control group (cgroup) isolate
  13. 13. 13 Docker Engine とデーモンの変遷 Docker Engine Linux Kernel ・namespaces ・cgroups LXC libcontainer runC containerd v0.9~ v1.11~ Version 7 Unix chroot jail dockerd v1.12~ デーモン ライブラリ ランタイム docker daemon Docker: the container engine v1.11~
  14. 14. 14
  15. 15. 15 Docker はサーバ・クライアント型モデル OS ( Linux ) 物理/仮想サーバ Docker エンジン ( dockerd デーモン ) Linux kernel コンテナ コンテナ コンテナ リモート API docker クライアント TCP あるいは Unix ソケットドメイン containerd Runtime: runC (OCI規格準拠) ・docker コマンド Linux, Mac OS X, Windows ・Kitematic (GUI) Mac OS X, Windows ・Docker Compose ・Docker Swarm
  16. 16. 16 httpd PID 1 コンテナA コンテナB ruby PID 1 chris.rb PID 2 /sbin/init PID 1 containerd PID 5 httpd PID 6 ruby PID 7 chris.rb PID 8 alice PID 2 bob PID 3 PPID 1 PPID 1 PPID 4 PPID 5 PPID 5 PPID 7 PPID 1 dockerd PID 4 コンテナのプロセス
  17. 17. 17 コンテナAの ファイルシステム … … コンテナBの ファイルシステム /etc /bin /etc /bin / / / /etc /data /data/ubuntu /data/centos /bin コンテナのファイルシステム
  18. 18. 18 コンテナAの ファイルシステム … … コンテナBの ファイルシステム /etc (/data/ubuntu/etc) /bin (/data/ubuntu/bin) /etc (/data/centos/etc) /bin (/data/centos/bin) / / httpd PID 1 プロセスA プロセスB ruby PID 1 chris.rb PID 2 コンテナA コンテナB 名前空間の isolate ・プロセス ・ファイルシステム ・ネットワーク ・ホスト名 ・UID・GID リソース制限 ・CPU ・メモリ ・I/O ・ディスク・クォータ コンテナの実行
  19. 19. 19 技術と仕様 Technology Specification コンテナ Docker
  20. 20. 20 Dockerイメージ • イメージ・レイヤの積み重ね • 読み込み専用 Dockerコンテナ • イメージ・レイヤを1つのファイルシステムとみなす • 読み書き可能なイメージ・レイヤを持つ
  21. 21. 21 $ docker image pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu 203137e8afd5: Pull complet 2ff1bbbe9310: Pull complete 933ae2486129: Pull complete a3ed95caeb02: Pull complete Digest: sha256:1bea66e185d3464fec1abda32ffaf2a11de69833cfcf81bd2b9a5be147776814 Status: Downloaded newer image for ubuntu:latest/
  22. 22. 22 $ docker pull wordpress Using default tag: latest latest: Pulling from library/wordpress fdd5d7827f33: Already exists a3ed95caeb02: Download complete 8c80f2e38113: Download complete 2da85bfb1ac0: Download complete 1da50ec818af: Download complete b2799c7ad5c9: Downloading 1.113 MB/2.844 MB 4893554c0107: Download complete b1d739e1b940: Waiting bd103e3f6195: Waiting aa560ff33ce6: Waiting 1deabfa10759: Waiting 91e6991f7a34: Waiting 7234c82b998e: Waiting 6bf8bdf2e550: Waiting a5c7e6ead07c: Waiting fe011342f195: Waiting c6dd706ba27e: Waiting 35d564cafd69: Waiting 730edfa5d07f: Waiting Digest: sha256:bfd7e102741d73cce4ec58b2d937586c670f31df1c80aeaf4d5c525eb3c6ac06 Status: Downloaded newer image for wordpress:latest
  23. 23. ベース・イメージ (公式のubuntu等) イメージ層読み込み専用 (Read Only) Docker コンテナの実行とは
  24. 24. ベース・イメージ (公式のubuntu等) イメージ層読み込み専用 (Read Only) ・新しいイメージ・レイヤの 自動的な割り当て ・イメージ内のプログラムを 独立したプロセスで実行 (コンテナ化された状態) Docker コンテナの実行とは
  25. 25. 25
  26. 26. 26 ここまでのまとめ は 技術で の を して実行
  27. 27. 27 ここまでのまとめ は Docker Engine Linux Kernel 技術で の ファイル を Docker イメージ コンテナ化 して実行
  28. 28. 28 技術と仕様 Technology Specification コンテナ Docker
  29. 29. 29 でも、コンテナって 前からあったよね?
  30. 30. DockerHub
  31. 31. 31
  32. 32. 32
  33. 33. 33
  34. 34. 34
  35. 35. 35
  36. 36. 36 構築・移動・実行 Build Ship Run
  37. 37. 37 Dockerと愉快な仲間達 Build Run開 発 ・ 構 築 移 動 実 行 Ship “Build, Ship, Run, Any App Anywhere” Docker Engine for Linux / Commercial Support Docker for Mac, Windows, Windows Server 2016 Docker Trusted Registry Docker Hub Universal Control Plane Toolbox Kitematic Dev (開発) Ops (運用)
  38. 38. 38 Docker Hub Dockerイメージの保管と共有をするためのリポジトリ(倉庫)
  39. 39. docker クライアント docker エンジン docker container run hello-world OSに対してdocker プログラムの 実行を伝える Docker に対してコンテナに読み込む イメージの情報を伝える Docker コンテナを作成・実行 するためのサブコマンド $ docker container run hello-world run
  40. 40. docker クライアント docker エンジン $ docker container run hello-world run Docker Hub pull レジストリ latest イメージ タグ hello-world レポジトリ latest イメージ タグ latest コンテナ化した hello-worldの実行 Hello from Docker. This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker Hub account: https://hub.docker.com For more examples and ideas, visit: https://docs.docker.com/userguide/
  41. 41. $ docker container run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 03f4658f8b78: Pull complete a3ed95caeb02: Pull complete Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7 Status: Downloaded newer image for hello-world:latest Hello from Docker. This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. (省略) Share images, automate workflows, and more with a free Docker Hub account: https://hub.docker.com For more examples and ideas, visit: https://docs.docker.com/userguide/ ローカルにhello-worldイメージがない 公式イメージlibraryにある”hello-world”を取得 最新の”hello-world:latest”イメージを取得完了 hello-worldイメージを使ったコンテナの実行(run)を命令
  42. 42. 42 https://hub.docker.com
  43. 43. 43 イメージの自動構築機能 webhook
  44. 44. コマンドでコンテナ操作
  45. 45. 45 Dockerイメージ操作コマンド docker images イメージ・レイヤ(読み込み専用) コンテナ・レイヤ(読み書き可能) イメージ1の リポジトリ イメージ2の リポジトリ イメージnの リポジトリ … docker save docker load tartar docker import docker commit … Dockerfile docker build … docker tag docker rmi 削除したレイヤ docker inspect docker history レジストリ (Docker Hub) リポジトリ docker pull docker push 旧体系
  46. 46. 46 Dockerイメージ操作コマンド docker images イメージ・レイヤ(読み込み専用) コンテナ・レイヤ(読み書き可能) イメージ1の リポジトリ イメージ2の リポジトリ イメージnの リポジトリ … docker save docker load tartar docker import docker commit … Dockerfile docker build … docker tag docker rmi 削除したレイヤ docker inspect docker history レジストリ (Docker Hub) リポジトリ docker pull docker push 旧体系 v1.13~ docker image ls docker image push docker image pull docker image build docker image import docker image save docker image load docker image commit docker image tag docker image inspect docker image history docker image rm / prune
  47. 47. 47 Dockerコンテナ操作コマンド start イメージ・レイヤ(読み込み専用) コンテナ・レイヤ(読み書き可能) 削除したレイヤ イメージの リポジトリ コンテナ用 レイヤ作成 親子 関係 create diff プロセス (PID1) コンテナ内のプロセスやファイルシステム 追加 プロセ ス pause stop kill exec ps stats top attach logs inspect port restartrun ホスト上の コンテナ 全体を管理 ホストから 各コンテナを 管理・操作 docker events コンテナの PID1を操作 rm pull レジストリ 旧体系
  48. 48. 48 Dockerコンテナ操作コマンド start イメージ・レイヤ(読み込み専用) コンテナ・レイヤ(読み書き可能) 削除したレイヤ イメージの リポジトリ コンテナ用 レイヤ作成 親子 関係 create diff プロセス (PID1) コンテナ内のプロセスやファイルシステム 追加 プロセ ス pause stop kill exec ps stats top attach logs inspect port restartrun ホスト上の コンテナ 全体を管理 ホストから 各コンテナを 管理・操作 docker events コンテナの PID1を操作 rm pull レジストリ 旧体系 v1.13~ docker container top docker container inspect docker container attach docker container logs docker container run docker container start docker container create docker image pull docker container diff docker container pause docker container stop docker container kill docker container restart docker container rm / prune docker container exec docker container ls docker container port docker container stats docker events
  49. 49. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker ps … コンテナ一覧や状態の表示 docker rmi … コンテナイメージ削除 docker rm … コンテナ削除 docker images … 一覧 コンテナとイメージの典型的なライフサイクル
  50. 50. docker pull … イメージの取得
  51. 51. docker pull … イメージの取得 docker image pull ( docker pull ) イメージをリポジトリから取得
  52. 52. docker pull … イメージの取得 docker image ls ( docker images ) ローカルのイメージを一覧表示 $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest 690ed74de00f 6 months ago 960 B
  53. 53. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker pull … イメージの取得 docker run … コンテナの実行 docker container run ( docker run ) イメージをコンテナとして実行
  54. 54. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker pull … イメージの取得 docker run … コンテナの実行
  55. 55. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker pull … イメージの取得 docker run … コンテナの実行 docker container ls ( docker ps ) コンテナの状態を一覧表示
  56. 56. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker commit … イメージの作成 docker build… イメージの自動構築(自動commit)
  57. 57. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker commit … イメージの作成 docker build… イメージの自動構築(自動commit) docker image build ( docker build ) イメージの自動構築(ビルド)
  58. 58. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker commit … イメージの作成 docker build… イメージの自動構築(自動commit) docker container commit ( docker commit ) コンテナ用レイヤをイメージ化
  59. 59. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker history … イメージの履歴表示 docker diff… 元イメージとコンテナの差分表示 docker inspect… コンテナやイメージの調査
  60. 60. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker history … イメージの履歴表示 docker diff… 元イメージとコンテナの差分表示 docker inspect… コンテナやイメージの調査 docker container inspect ( docker inspect ) コンテナの詳細情報を表示 docker image inspect ( docker inspect ) イメージの詳細情報を表示
  61. 61. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker history … イメージの履歴表示 docker diff… 元イメージとコンテナの差分表示 docker inspect… コンテナやイメージの調査 docker container diff ( docker diff ) イメージとの差分を表示
  62. 62. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker history … イメージの履歴表示 docker diff… 元イメージとコンテナの差分表示 docker inspect… コンテナやイメージの調査 docker image history ( docker history ) イメージ・レイヤと履歴の表示
  63. 63. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker push … Dockerイメージの送信 docker login … ログイン docker tag … イメージをタグ付け docker search … 検索
  64. 64. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker push … Dockerイメージの送信 docker login … ログイン docker tag … イメージをタグ付け docker search … 検索 docker login Docker Hubにログイン
  65. 65. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker push … Dockerイメージの送信 docker login … ログイン docker tag … イメージをタグ付け docker search … 検索 イメージを送信 docker image push ( docker push )
  66. 66. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker ps … コンテナ一覧や状態の表示 docker rmi … コンテナイメージ削除 docker rm … コンテナ削除 docker images … 一覧
  67. 67. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker ps … コンテナ一覧や状態の表示 docker rmi … コンテナイメージ削除 docker rm … コンテナ削除 docker images … 一覧 コンテナを削除 docker container rm ( docker rm )
  68. 68. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker ps … コンテナ一覧や状態の表示 docker rmi … コンテナイメージ削除 docker rm … コンテナ削除 docker images … 一覧 イメージを削除 docker image rm ( docker rmi )
  69. 69. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker ps … コンテナ一覧や状態の表示 docker rmi … コンテナイメージ削除 docker rm … コンテナ削除 docker images … 一覧 不要なコンテナを削除 docker container prune 不要なイメージを削除 docker image prune
  70. 70. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker ps … コンテナ一覧や状態の表示 docker rmi … コンテナイメージ削除 docker rm … コンテナ削除 docker images … 一覧 不要なコンテナ、イメージ、 ネットワーク、ボリューム削除 docker system prune # docker system prune WARNING! This will remove: - all stopped containers - all volumes not used by at least one container - all networks not used by at least one container - all dangling images Are you sure you want to continue? [y/N] y Deleted Containers: 6612edf483662725e4b1147c16f5842c780d702f1ee2d3605cb6d2c49603f456 08c57b9fdb25db0705f20a6a4aaafd5ab2e367b5adbfe62b3a88e3d83327615f (snip) Total reclaimed space: 0 B
  71. 71. 71 バージョン情報等の表示 docker system info バージョン情報等の表示 docker system df # docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 4 4 1.345 GB 123 MB (9%) Containers 5 1 621.1 kB 0 B (0%) Local Volumes 3 3 432.6 MB 0 B (0%)
  72. 72. 72 詳しくはウェブで…! https://qiita.com/zembutsu
  73. 73. その他、運用面
  74. 74. Copy on Write(コピー・オン・ライト) 読み込み専用 (Read Only) • Read Only のイメージ層上の ファイルに対する変更は、 必ずコピー作業を行う • 内部実装はストレージ・ドラ イバに依存する(パフォーマ ンスに影響が出る) • CoWを回避するには ボリュームを使う 書き込む前に コピーしてから コンテナのレイヤ上に 変更を反映 捕 捉 イメージ、コンテナ、ストレージ・ドライバの理解 http://docs.docker.jp/engine/userguide/storagedriver/imagesandcontainers.html
  75. 75. AUFS AUFS ストレージ・ドライバを使う — Docker-docs-ja 1.10.0b ドキュメント http://docs.docker.jp/engine/userguide/storagedriver/aufs-driver.html
  76. 76. devicemapper Device Mapper ストレージ・ドライバを使う — Docker-docs-ja 1.10.0b ドキュメント http://docs.docker.jp/engine/userguide/storagedriver/device-mapper-driver.html
  77. 77. https://docs.docker.com/engine/userguide/storagedriver/selectadriver/
  78. 78. ボリュームはコンテナ用のレイヤとは分離 イメージ Read Only コンテナ用 レイヤ 読み書き可 • イメージ・レイヤの仕様(Copy on Write)を 回避できる • docker commit してもボリューム内容は反 映されない。 • 複数のコンテナでボリュームを共有できる • ホスト側のファイルやディレクトリをマウン ト可能 捕 捉 コンテナでデータを管理する http://docs.docker.jp/engine/userguide/containers/dockervolumes.html
  79. 79. 79 用途に応じた技術選択が鍵 1. 利用者は誰で、用途は何か? 2. インフラをどうするのか? 3. OSを何にするのか? 4. ディストリビューションを何にするのか? 5. ストレージ・ドライバを何にするのか? 6. ベースイメージは何にするのか? 7. セキュリティをどのように考慮すべきか? 8. 性能をどのように担保するのか?
  80. 80. 振り返り
  81. 81. 今日お伝えしたかったこと コンテナは技術、Dockerは仕様 DockerHubが中継点 コマンドでコンテナとイメージを操作
  82. 82. 何か気になる所がありますか? ご参考:Docker 日本語ドキュメント http://docs.docker.jp/ http://slideshare.net/zembutsu twitter: @zembutsu

×