SlideShare a Scribd company logo
Docker イメージの理解と
コンテナのライフサイクル
JAWS-UGコンテナ支部 × JAWS-UG CLI専門支部 #1 発表資料
2016年3月22日(火)
@zembutsu
Technology Evangelist; Creationline, Inc.
What are Docker Images and Containers, and Container's life cycle.
背景画像CREDIT:スフィア / PIXTA(ピクスタ)
本資料の内容
• Docker とは何なのか?お復習い
• Docker イメージと Docker コンテナの違い
• Docker イメージとレイヤ
• コンテナのライフサイクルと主なコマンド
※ 内容は Docker 初心者の方(なんとなく Docker を知っているけれど、
コンテナとイメージの違いが分からないケース)を想定してます。
・
3
私は誰なのか?
‣ @zembutsu a.k.a. 前佛雅人
- Technology Evangelist; Creationline, Inc. – 2 yrs
- Technical Trainer; Docker Authorized Trainer – 0.8 yr
- Data Center Operations Engineer – 15+ yrs
興味:運用監視自動化、趣味でOSSやクラウド系の検証・情報発信
- SlideShare http://slideshare.net/zembutsu
- Blog http://pocketstudio.jp/log3
Why am I here?
+MasahitoZembutsu
4
Docker って何だったっけ?
‣ Docker
アプリケーションを開発・移動・実行するためのプラットフォーム
• 設計思想は、開発者が簡単にアプリケーションを動かす環境を作る
オープンソース・コミュニティ及び支援会社としての Docker, Inc.
• 2013年3月 Python Conference US のライトニング・トークで発表
– 前身は PaaS 事業者だった dotCloud 社(後に事業売却)
– https://github.com/docker/
• Open Container Initiative を通して各社と協調
– https://www.opencontainers.org/
developing, shipping, running
開発者が簡単にアプリケーションを開発・デプロイできる仕組み
プラットフォーム
6
Dockerコンテナ
‣ コンテナとは
ホスト OS の kernel 機能を使い、複数のルート・ファイルシステムを実行
• 各ルート・ファイルシステムをコンテナ (container) と呼ぶ
• コンテナは各々のリソースを持つ
– プロセス、メモリ、デバイス、ネットワーク
コンテナとは Linux カーネルの技術を使う
• Namespaces (名前空間によるプロセス間の隔離・分離;isolation)
• Cgroups(CPU・メモリ・Disk I/Oのリソース制限)
‣ コンテナの実行に必要な環境
• Docker Engine(エンジン)
– コンテナを移動・実行するための必要なプログラム(デーモン)
OS ( Linux )
物理/仮想サーバ
Docker エンジン
( docker デーモン )
Linux kernel
コンテナ コンテナ コンテナ
リモート
API
docker
クライアント
・docker コマンド
・Kitematic (GUI)
/sbin/init
PID 1
alice
PID 2
bob
PID 3
docker
PID 4
httpd
PID 1
コンテナA コンテナB
ruby
PID 1
chris.rb
PID 2
httpd
PID 5
chris.rb
PID 7
ruby
PID 6
Dockerコンテナはプロセスのア
イソレーション(isolation;分離・
独立)を実現します。コンテナ毎
にCPUやメモリ等のリソースや、
ネットワークを割り当て可能です。
プロセスはホスト上に普通に起
動していても、コンテナ内はホ
スト側や他のコンテナの状況を
見ることができません。
ホスト上のプロセス
/
/etc /bin /data
コンテナAのファイルシステム
… …
コンテナBのファイルシステム
/etc
(/data/ubuntu/etc)
/data/ubuntu /data/centos
/bin
(/data/ubuntu/bin)
/etc
(/data/ubuntu/etc)
/bin
(/data/ubuntu/bin)
/ /
ホスト上のファイルシステム
コンテナ内ではコンテナの中で
ルート・ディレクトリ(chroot風)を
それぞれマウントしています。
お互いのコンテナは、通常はそ
のまま相互に参照できません。
OS ( Linux )
物理/仮想サーバ
Docker エンジン
( docker デーモン )
Linux kernel
コンテナ コンテナ コンテナ
リモート
API
docker
クライアント
・docker コマンド
・Kitematic (GUI)
Docker
コンテナ
docker クライアント docker エンジン Docker Hub
$ docker run 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/
run pull
レジストリ
latest
イメージ
タグ
hello-world レポジトリ
latest
イメージ
タグ
コンテナ化した
hello-worldの実行
• Docker Engine は「docker
run」実行時にローカルにイ
メージがなければレジストリ
(DockerHubが標準)から
イメージをダウンロードする。
そのため初回実行時は時間
かかる場合がある
• hello-worldコンテナは画面
出力が終わると、プロセス
が停止(コンテナが停止)
$ docker 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/
「run」を実行すると、ホスト上に
イメージがなければ、自動的に
Docker Hub からダウンロードし
た後、コンテナを実行しています。
hello-worldコンテナを実行
コンテナを実行するファイルを含むイ
メージがないので取得(pull)する
最新のイメージを取得完了
タグを指定しなかったので「latest」
$ docker 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/
Docker
イメージ
14
Docker イメージ
‣ Dockerイメージは
コンテナを実行する時に必要な
ファイルシステム
• イメージ・レイヤ(層)の集合体
– ファイルの実体やメタ情報を含む
• レイヤには親子関係がある
• 差分情報のみを記録する
• Read Only で書き込みできない
共通するレイヤはイメージ間で共有できる
• ディスク容量の削減や高いポータビリティを実現する
$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
203137e8afd5: Pull complete
2ff1bbbe9310: Pull complete
933ae2486129: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:1bea66e185d3464fec1abda32ffaf2a11de69833cfcf81bd2b9a5be147776814
Status: Downloaded newer image for ubuntu:latest/
レイヤごとに
並列ダウンロード
$ 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
ダウンロード済みのレイヤ
なので再取得しない
ダウンロード中
ダウンロード済み
ダウンロード待ち
Nginx イメージの構造
902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB
9a61b6b1315e 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
aface2a79f55 3 months ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Mai 0 B
5dd2638d10a1 3 months ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 1.997 kB
97df1ddba09e 3 months ago /bin/sh -c echo "deb http://nginx.org/package 221 B
e7e7a55e9264 10 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.9.4-1~j 0 B
72b67c8ad0ca 10 weeks ago /bin/sh -c apt-get update && apt-get inst 7.695 MB
9108e25be489 10 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx/ 11 B
6dda3f3a8c05 10 weeks ago /bin/sh -c ln -sf /dev/stderr /var/log/nginx/ 11 B
42d2189f6cbe 10 weeks ago /bin/sh -c #(nop) VOLUME [/var/cache/nginx] 0 B
3cb7f49c6bc4 10 weeks ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0 B
a486da044a3f 10 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon o 0 B
$ docker history nginx
IMAGE CREATED CREATED BY SIZE COMMENT
docker history <image id/name>
コンテナ作成の履歴を辿るには
docker history コマンドが便利
ベース・イメージ
(公式イメージ等)
イメージ層
Docker コンテナを起動するとは
読み込み専用
(Read Only)
ベース・イメージ
(公式)
イメージ層
Docker コンテナを起動するとは
読み込み専用
(Read Only)
・新しいイメージ・レイヤの
自動的な割り当て
・イメージ内のバイナリを
隔離されたプロセスで起動
(コンテナ化された状態)
docker run <opts> <image:tag>
docker diff
Dockerコンテナとイメージのライフサイクル
イメージ
Read Only
コンテナ用
レイヤ
読み書き可
• Docker イメージとはイメージ・レイヤ
(rootファイルシステム)とメタデー
タ(何のコマンドを実行するのか、ど
のポートを開くかなどの管理情報)の
集合体であり、読み込み専用
• それぞれのレイヤは ID を持つ
• コンテナの起動とは、Dockerイメージ
上に読み書き可能なレイヤを追加し、
指定されたプロセスを隔離された状態
やシステムリソース上で実行すること
docker pull … イメージの取得
docker run … コンテナの実行
イメージ
Read Only
コンテナ用
レイヤ
読み書き可
• イメージを作成するには3つの方法
1. Docker Hub から取得する
2. コンテナの内容を手動でコミットし、
新しいイメージを作成する
3. Dockerfileを使ってイメージを自動構
築する(自動コミットの繰り返し)
docker commit … イメージの作成
docker build… イメージの自動構築(自動commit)
イメージ
Read Only
コンテナ用
レイヤ
読み書き可
docker history … イメージの履歴表示
docker diff… 元イメージとコンテナの差分表示
docker inspect… コンテナやイメージの調査
イメージ
Read Only
コンテナ用
レイヤ
読み書き可
docker push … Dockerイメージの送信
docker login … ログイン
docker tag … イメージをタグ付け
docker search … 検索
イメージ
Read Only
コンテナ用
レイヤ
読み書き可
Dockerコンテナとイメージのライフサイクル
docker ps … コンテナ一覧や状態の表示
docker rmi … コンテナイメージ削除
docker rm … コンテナ削除
docker images … 一覧
Copy on Write(コピー・オン・ライト)
読み込み専用
(Read Only)
• Read Only のイメージ層上
のファイルに対する変更は、
必ずコピー作業を行う
• 内部実装はストレージ・ドラ
イバに依存する(パフォーマ
ンスに影響が出る)
• CoWを回避するには
ボリュームを使う
書き込む前に
コピーしてから
コンテナのレイヤ上に
変更を反映
ボリュームはコンテナ用のレイヤとは分離
イメージ
Read Only
コンテナ用
レイヤ
読み書き可
• イメージ・レイヤの仕様(Copy on Write)を
回避できる
• docker commit してもボリューム内容は反
映されない。
• 複数のコンテナでボリュームを共有できる
• ホスト側のファイルやディレクトリをマウン
ト可能
まとめ
• Docker とはアプリケーションを開発・移動・実行する
プラットフォームの役割で、Linuxカーネル技術を使う
• Docker イメージはイメージ・レイヤの集合体
• Read Only のイメージを使って Docker コンテナを実行
• イメージ・レイヤの性質上コピー・オン・ライトの処理が
発生するが、ボリュームを使えば回避可能
29
何か気になる所はありますか?
Dockerイメージ入門とコンテナのライフサイクル
‣ 日本語ドキュメントはこちら
http://docs.docker.jp
30
‣ アーキテクチャの理解
http://docs.docker.jp/engine/understanding-docker.html
‣ イメージの構築
http://docs.docker.jp/engine/userguide/containers/dockerimages.html
‣ イメージ、コンテナ、ストレージ・ドライバの理解
http://docs.docker.jp/engine/userguide/storagedriver/imagesandcontainers.html
‣ ストレージ・ドライバの選択
http://docs.docker.jp/engine/userguide/storagedriver/selectadriver.html
‣ コンテナでデータを管理する
http://docs.docker.jp/engine/userguide/containers/dockervolumes.html
より詳しい情報

More Related Content

PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PDF
Docker道場オンライン#1 Docker基礎概念と用語の理解
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
Dockerfile を書くためのベストプラクティス解説編
PDF
DockerとPodmanの比較
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
PDF
Docker Compose 徹底解説
PDF
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
コンテナの作り方「Dockerは裏方で何をしているのか?」
Docker道場オンライン#1 Docker基礎概念と用語の理解
コンテナ未経験新人が学ぶコンテナ技術入門
Dockerfile を書くためのベストプラクティス解説編
DockerとPodmanの比較
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker Compose 徹底解説
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました

What's hot (20)

PDF
BuildKitの概要と最近の機能
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PDF
Dockerからcontainerdへの移行
PPTX
Dockerからcontainerdへの移行
PPTX
Docker Tokyo
PDF
Docker入門: コンテナ型仮想化技術の仕組みと使い方
PPTX
世界一わかりやすいClean Architecture
PPTX
コンテナネットワーキング(CNI)最前線
PDF
Dockerfileを改善するためのBest Practice 2019年版
PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
PDF
Ingressの概要とLoadBalancerとの比較
PDF
Javaのログ出力: 道具と考え方
PDF
3分でわかるAzureでのService Principal
PDF
SIerで幸せな技術キャリアを築くために
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
PPTX
ぱぱっと理解するSpring Cloudの基本
PDF
インフラCICDの勘所
PDF
Dockerイメージ管理の内部構造
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PPTX
本当は恐ろしい分散システムの話
BuildKitの概要と最近の機能
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Docker Tokyo
Docker入門: コンテナ型仮想化技術の仕組みと使い方
世界一わかりやすいClean Architecture
コンテナネットワーキング(CNI)最前線
Dockerfileを改善するためのBest Practice 2019年版
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
Ingressの概要とLoadBalancerとの比較
Javaのログ出力: 道具と考え方
3分でわかるAzureでのService Principal
SIerで幸せな技術キャリアを築くために
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
ぱぱっと理解するSpring Cloudの基本
インフラCICDの勘所
Dockerイメージ管理の内部構造
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
本当は恐ろしい分散システムの話
Ad

Viewers also liked (20)

PDF
Docker基礎+docker0.9, 0.10概要
PDF
Docker Swarm入門
PDF
Docker Machineを使ってみよう
PDF
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
PPTX
15分で分か(った気になれ)るDocker
PDF
第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)
PPTX
HDFSネームノードのHAについて #hcj13w
PDF
今だからこそ知りたい Docker Compose/Swarm 入門
PDF
Hadoop and Kerberos
PDF
Docker勉強会2017 実践編 スライド
PDF
Simplify and Secure your Hadoop Environment with Hortonworks and Centrify
PDF
Protocol Buffers 入門
PDF
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
PDF
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PPTX
Amazon Athena で実現する データ分析の広がり
PDF
DockerとKubernetesが作る未来
PDF
Redmineを快適に使うためのおすすめ初期設定
PDF
ブロックチェーン技術の基本と応用の可能性
PDF
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
PDF
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Docker基礎+docker0.9, 0.10概要
Docker Swarm入門
Docker Machineを使ってみよう
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
15分で分か(った気になれ)るDocker
第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)
HDFSネームノードのHAについて #hcj13w
今だからこそ知りたい Docker Compose/Swarm 入門
Hadoop and Kerberos
Docker勉強会2017 実践編 スライド
Simplify and Secure your Hadoop Environment with Hortonworks and Centrify
Protocol Buffers 入門
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Amazon Athena で実現する データ分析の広がり
DockerとKubernetesが作る未来
Redmineを快適に使うためのおすすめ初期設定
ブロックチェーン技術の基本と応用の可能性
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Ad

Similar to Dockerイメージの理解とコンテナのライフサイクル (20)

PDF
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
PDF
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
PDF
Dockerクイックツアー
PDF
Webアプリケーション開発者のためのDockerハンズオン
PDF
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
PDF
Docker最新動向2017秋+セキュリティの落とし穴
PDF
Webアプリケーション開発者のためのDockerハンズオン20210519
PDF
Docker社内勉強会
PDF
Docker実践入門
PDF
20150101勉強会 dokku alt
PDF
Dockerハンズオン
PDF
Docker入門 - 基礎編 いまから始めるDocker管理
PPTX
Docker & Kubernetes基礎
PDF
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
PDF
DockerとDocker Hubの操作と概念
PDF
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
PDF
ゆるふわなDockerの使い方
PDF
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
PDF
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
PDF
JAWS-UG コンテナ支部 Docker入門 ハンズオン
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
Dockerクイックツアー
Webアプリケーション開発者のためのDockerハンズオン
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker最新動向2017秋+セキュリティの落とし穴
Webアプリケーション開発者のためのDockerハンズオン20210519
Docker社内勉強会
Docker実践入門
20150101勉強会 dokku alt
Dockerハンズオン
Docker入門 - 基礎編 いまから始めるDocker管理
Docker & Kubernetes基礎
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
DockerとDocker Hubの操作と概念
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
ゆるふわなDockerの使い方
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
JAWS-UG コンテナ支部 Docker入門 ハンズオン

More from Masahito Zembutsu (20)

PDF
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
PDF
自由検証環境提供宣言+Docker Compose V2 GA
PDF
CentOS Linux 8 の EOL と対応策の検討
PDF
さくらインターネットのコミュニティ with COVID-19
PDF
Docker Chronicle 2021.09
PDF
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」
PDF
インターネットでウェブサイトを表示している裏側の話
PDF
3分で分かる「プログラミング教育・情報教育」
PDF
ようこそオンラインの展示会場へ
PDF
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020
PDF
オンライン発表で気を付けているポイント~姿勢編
PDF
Jitsi Meetとは?
PDF
Docker 9 tips~意外と知られていない日常で役立つ便利技
PDF
クリスマスに工場(Factorio)を作るゲームをしよう
PDF
2020年から始まる小学校プログラミング教育の話 #osc19os
PDF
CNCF Updates 2019 Winter version and Knative
PDF
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)
PDF
CNCFアップデート情報~2018年のCNCFを振り返る
PDF
コンテナ導入概要資料2018
PDF
DockerConの歩き方~海外カンファレンスに参加するには~
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
自由検証環境提供宣言+Docker Compose V2 GA
CentOS Linux 8 の EOL と対応策の検討
さくらインターネットのコミュニティ with COVID-19
Docker Chronicle 2021.09
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」
インターネットでウェブサイトを表示している裏側の話
3分で分かる「プログラミング教育・情報教育」
ようこそオンラインの展示会場へ
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020
オンライン発表で気を付けているポイント~姿勢編
Jitsi Meetとは?
Docker 9 tips~意外と知られていない日常で役立つ便利技
クリスマスに工場(Factorio)を作るゲームをしよう
2020年から始まる小学校プログラミング教育の話 #osc19os
CNCF Updates 2019 Winter version and Knative
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)
CNCFアップデート情報~2018年のCNCFを振り返る
コンテナ導入概要資料2018
DockerConの歩き方~海外カンファレンスに参加するには~

Dockerイメージの理解とコンテナのライフサイクル

  • 1. Docker イメージの理解と コンテナのライフサイクル JAWS-UGコンテナ支部 × JAWS-UG CLI専門支部 #1 発表資料 2016年3月22日(火) @zembutsu Technology Evangelist; Creationline, Inc. What are Docker Images and Containers, and Container's life cycle. 背景画像CREDIT:スフィア / PIXTA(ピクスタ)
  • 2. 本資料の内容 • Docker とは何なのか?お復習い • Docker イメージと Docker コンテナの違い • Docker イメージとレイヤ • コンテナのライフサイクルと主なコマンド ※ 内容は Docker 初心者の方(なんとなく Docker を知っているけれど、 コンテナとイメージの違いが分からないケース)を想定してます。 ・
  • 3. 3 私は誰なのか? ‣ @zembutsu a.k.a. 前佛雅人 - Technology Evangelist; Creationline, Inc. – 2 yrs - Technical Trainer; Docker Authorized Trainer – 0.8 yr - Data Center Operations Engineer – 15+ yrs 興味:運用監視自動化、趣味でOSSやクラウド系の検証・情報発信 - SlideShare http://slideshare.net/zembutsu - Blog http://pocketstudio.jp/log3 Why am I here? +MasahitoZembutsu
  • 4. 4 Docker って何だったっけ? ‣ Docker アプリケーションを開発・移動・実行するためのプラットフォーム • 設計思想は、開発者が簡単にアプリケーションを動かす環境を作る オープンソース・コミュニティ及び支援会社としての Docker, Inc. • 2013年3月 Python Conference US のライトニング・トークで発表 – 前身は PaaS 事業者だった dotCloud 社(後に事業売却) – https://github.com/docker/ • Open Container Initiative を通して各社と協調 – https://www.opencontainers.org/ developing, shipping, running
  • 6. 6 Dockerコンテナ ‣ コンテナとは ホスト OS の kernel 機能を使い、複数のルート・ファイルシステムを実行 • 各ルート・ファイルシステムをコンテナ (container) と呼ぶ • コンテナは各々のリソースを持つ – プロセス、メモリ、デバイス、ネットワーク コンテナとは Linux カーネルの技術を使う • Namespaces (名前空間によるプロセス間の隔離・分離;isolation) • Cgroups(CPU・メモリ・Disk I/Oのリソース制限) ‣ コンテナの実行に必要な環境 • Docker Engine(エンジン) – コンテナを移動・実行するための必要なプログラム(デーモン)
  • 7. OS ( Linux ) 物理/仮想サーバ Docker エンジン ( docker デーモン ) Linux kernel コンテナ コンテナ コンテナ リモート API docker クライアント ・docker コマンド ・Kitematic (GUI)
  • 8. /sbin/init PID 1 alice PID 2 bob PID 3 docker PID 4 httpd PID 1 コンテナA コンテナB ruby PID 1 chris.rb PID 2 httpd PID 5 chris.rb PID 7 ruby PID 6 Dockerコンテナはプロセスのア イソレーション(isolation;分離・ 独立)を実現します。コンテナ毎 にCPUやメモリ等のリソースや、 ネットワークを割り当て可能です。 プロセスはホスト上に普通に起 動していても、コンテナ内はホ スト側や他のコンテナの状況を 見ることができません。 ホスト上のプロセス
  • 9. / /etc /bin /data コンテナAのファイルシステム … … コンテナBのファイルシステム /etc (/data/ubuntu/etc) /data/ubuntu /data/centos /bin (/data/ubuntu/bin) /etc (/data/ubuntu/etc) /bin (/data/ubuntu/bin) / / ホスト上のファイルシステム コンテナ内ではコンテナの中で ルート・ディレクトリ(chroot風)を それぞれマウントしています。 お互いのコンテナは、通常はそ のまま相互に参照できません。
  • 10. OS ( Linux ) 物理/仮想サーバ Docker エンジン ( docker デーモン ) Linux kernel コンテナ コンテナ コンテナ リモート API docker クライアント ・docker コマンド ・Kitematic (GUI) Docker コンテナ
  • 11. docker クライアント docker エンジン Docker Hub $ docker run 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/ run pull レジストリ latest イメージ タグ hello-world レポジトリ latest イメージ タグ コンテナ化した hello-worldの実行 • Docker Engine は「docker run」実行時にローカルにイ メージがなければレジストリ (DockerHubが標準)から イメージをダウンロードする。 そのため初回実行時は時間 かかる場合がある • hello-worldコンテナは画面 出力が終わると、プロセス が停止(コンテナが停止)
  • 12. $ docker 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/ 「run」を実行すると、ホスト上に イメージがなければ、自動的に Docker Hub からダウンロードし た後、コンテナを実行しています。 hello-worldコンテナを実行 コンテナを実行するファイルを含むイ メージがないので取得(pull)する 最新のイメージを取得完了 タグを指定しなかったので「latest」
  • 13. $ docker 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/ Docker イメージ
  • 14. 14 Docker イメージ ‣ Dockerイメージは コンテナを実行する時に必要な ファイルシステム • イメージ・レイヤ(層)の集合体 – ファイルの実体やメタ情報を含む • レイヤには親子関係がある • 差分情報のみを記録する • Read Only で書き込みできない 共通するレイヤはイメージ間で共有できる • ディスク容量の削減や高いポータビリティを実現する
  • 15. $ docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu 203137e8afd5: Pull complete 2ff1bbbe9310: Pull complete 933ae2486129: Pull complete a3ed95caeb02: Pull complete Digest: sha256:1bea66e185d3464fec1abda32ffaf2a11de69833cfcf81bd2b9a5be147776814 Status: Downloaded newer image for ubuntu:latest/ レイヤごとに 並列ダウンロード
  • 16. $ 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 ダウンロード済みのレイヤ なので再取得しない ダウンロード中 ダウンロード済み ダウンロード待ち
  • 17. Nginx イメージの構造 902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB 9a61b6b1315e 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B aface2a79f55 3 months ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Mai 0 B 5dd2638d10a1 3 months ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 1.997 kB 97df1ddba09e 3 months ago /bin/sh -c echo "deb http://nginx.org/package 221 B e7e7a55e9264 10 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.9.4-1~j 0 B 72b67c8ad0ca 10 weeks ago /bin/sh -c apt-get update && apt-get inst 7.695 MB 9108e25be489 10 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx/ 11 B 6dda3f3a8c05 10 weeks ago /bin/sh -c ln -sf /dev/stderr /var/log/nginx/ 11 B 42d2189f6cbe 10 weeks ago /bin/sh -c #(nop) VOLUME [/var/cache/nginx] 0 B 3cb7f49c6bc4 10 weeks ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0 B a486da044a3f 10 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon o 0 B $ docker history nginx IMAGE CREATED CREATED BY SIZE COMMENT docker history <image id/name> コンテナ作成の履歴を辿るには docker history コマンドが便利
  • 21. イメージ Read Only コンテナ用 レイヤ 読み書き可 • Docker イメージとはイメージ・レイヤ (rootファイルシステム)とメタデー タ(何のコマンドを実行するのか、ど のポートを開くかなどの管理情報)の 集合体であり、読み込み専用 • それぞれのレイヤは ID を持つ • コンテナの起動とは、Dockerイメージ 上に読み書き可能なレイヤを追加し、 指定されたプロセスを隔離された状態 やシステムリソース上で実行すること docker pull … イメージの取得 docker run … コンテナの実行
  • 22. イメージ Read Only コンテナ用 レイヤ 読み書き可 • イメージを作成するには3つの方法 1. Docker Hub から取得する 2. コンテナの内容を手動でコミットし、 新しいイメージを作成する 3. Dockerfileを使ってイメージを自動構 築する(自動コミットの繰り返し) docker commit … イメージの作成 docker build… イメージの自動構築(自動commit)
  • 23. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker history … イメージの履歴表示 docker diff… 元イメージとコンテナの差分表示 docker inspect… コンテナやイメージの調査
  • 24. イメージ Read Only コンテナ用 レイヤ 読み書き可 docker push … Dockerイメージの送信 docker login … ログイン docker tag … イメージをタグ付け docker search … 検索
  • 25. イメージ Read Only コンテナ用 レイヤ 読み書き可 Dockerコンテナとイメージのライフサイクル docker ps … コンテナ一覧や状態の表示 docker rmi … コンテナイメージ削除 docker rm … コンテナ削除 docker images … 一覧
  • 26. Copy on Write(コピー・オン・ライト) 読み込み専用 (Read Only) • Read Only のイメージ層上 のファイルに対する変更は、 必ずコピー作業を行う • 内部実装はストレージ・ドラ イバに依存する(パフォーマ ンスに影響が出る) • CoWを回避するには ボリュームを使う 書き込む前に コピーしてから コンテナのレイヤ上に 変更を反映
  • 27. ボリュームはコンテナ用のレイヤとは分離 イメージ Read Only コンテナ用 レイヤ 読み書き可 • イメージ・レイヤの仕様(Copy on Write)を 回避できる • docker commit してもボリューム内容は反 映されない。 • 複数のコンテナでボリュームを共有できる • ホスト側のファイルやディレクトリをマウン ト可能
  • 28. まとめ • Docker とはアプリケーションを開発・移動・実行する プラットフォームの役割で、Linuxカーネル技術を使う • Docker イメージはイメージ・レイヤの集合体 • Read Only のイメージを使って Docker コンテナを実行 • イメージ・レイヤの性質上コピー・オン・ライトの処理が 発生するが、ボリュームを使えば回避可能
  • 30. 30 ‣ アーキテクチャの理解 http://docs.docker.jp/engine/understanding-docker.html ‣ イメージの構築 http://docs.docker.jp/engine/userguide/containers/dockerimages.html ‣ イメージ、コンテナ、ストレージ・ドライバの理解 http://docs.docker.jp/engine/userguide/storagedriver/imagesandcontainers.html ‣ ストレージ・ドライバの選択 http://docs.docker.jp/engine/userguide/storagedriver/selectadriver.html ‣ コンテナでデータを管理する http://docs.docker.jp/engine/userguide/containers/dockervolumes.html より詳しい情報