More Related Content More from Amazon Web Services Japan (20) 202109 AWS Black Belt Online Seminar Docker 入門1. © 2021, Amazon Web Services, Inc. or its Affiliates.
AWS 公式 Webinar
https://amzn.to/JPWebinar
過去資料
https://amzn.to/JPArchive
Docker ⼊⾨
AWS Black Belt Online Seminar
Amazon Web Services Japan K.K.
Solutions Architect
⻩ 光川
2021-September
2. © 2021, Amazon Web Services, Inc. or its Affiliates.
このセッションで扱うこと・学べること
o コンテナの歴史と Docker 登場以来の急速な発展
o Docker の主要な構成要素
o コンテナのオーケストレーション
o コンテナ開発・運⽤のベストプラクティス
注︓本セッションで扱う内容は、コンテナとしての Docker 技術になります。
Docker 社提供の各種ツールについての内容は含まれません。
2
3. © 2021, Amazon Web Services, Inc. or its Affiliates.
コンテナ技術の歴史
1982
Unix
chroot
2005
Solaris
Zone
OpenVZ
Parallels
2007
Linux
Cgroups
2008
Linux
LXC
2013
Docker
コンテナ = “リソース隔離を実現する技術”
2000
FreeBSD
jail
3
4. © 2021, Amazon Web Services, Inc. or its Affiliates.
Dockerとは
uアプリケーションをすばやく構築、テスト、デプロイする為の
プラットフォーム
ü Docker 社 (旧dotCloud社) が開発、2013年にオープンソース化
ü 現在は OCI (Open Container Initiative) で管理・標準化
uDocker の⾰新
ü OS仮想化ではなく、アプリケーションをパッケージングし、
ツールのエコシステムを通じて、スムーズな開発者
エクスペリエンスを提供する分野にある
uDocker のメリット
ü ソフトウェア出荷の数と速度を向上
ü オペレーションの標準化
ü シームレスに移動
ü コスト削減
4
5. © 2021, Amazon Web Services, Inc. or its Affiliates.
Docker 周りのエコシステムの急速な発展
Docker 登場以来の急速な発展
2013
Docker OSS化
5
OCI 発⾜
CNCF 発⾜
Amazon ECS
Amazon ECR
2015
Amazon EKS
2018
Moby Project 発表
AWS Fargate
2017
AWS App Runner
AWS Proton
EKS Anywhere
2021
EKS Distro
ECS Anywhere
Amazon Lightsail
AWS App2Container
AWS Copilot
2020
2014
Docker1.0
Docker Hub
Kubernetes OSS化
6. © 2021, Amazon Web Services, Inc. or its Affiliates.
仮想マシンと Docker ( Linux の例 )
Docker
- Linux の機能を利⽤してコン
テナを分離 (isolation)
- Linux カーネルを共有
- 迅速なスタート、最⼩限の
オーバーヘッド
- 柔軟な分離
仮想マシン (KVM)
- ハードウェアの仮想化
- 完全に分離されたカーネル
- Guest OS の起動が遅く、カーネ
ルを起動してハードウェアをセッ
トアップする必要がある
https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine
https://en.wikipedia.org/wiki/Docker_(software)
6
7. © 2021, Amazon Web Services, Inc. or its Affiliates.
Docker のアーキテクチャ
7
https://docs.docker.com/get-started/overview/
・Dockerは client-server アーキテクチャ
・Docker client は Docker daemon と通信 ( ソケット or REST API ) して各種指⽰
・Docker daemon がコンテナのビルド、実⾏、配布などを⾏う
8. © 2021, Amazon Web Services, Inc. or its Affiliates.
Docker の主要な構成要素
Docker デーモン
Docker クライアント
dockerdをリッスンし、イメージ、コンテナ、ネットワーク、
ボリュームなどの Docker オブジェクトを管理
Docker レジストリ Docker イメージを格納するレジストリ、
パブリック/プライベートで構築可能
ユーザが Docker と会話する主要⽅法、
Docker デーモンと通信するクライアント
Docker オブジェクト ・Docker イメージ︓OS やアプリを含むコンテナのテンプレート、
Docker レジストリに格納し、そこから取得
・Docker コンテナ︓プロセスとして起動するアプリの実⾏環境
Docker イメージから起動
・Dockerfile ︓ベース OS のイメージからアプリまでの
動作環境が記述されたテキストファイル
・ネットワーク、ボリューム、プラグイン、etc
8
9. © 2021, Amazon Web Services, Inc. or its Affiliates. 9
Docker コンテナの主なライフサイクル
実⾏
停⽌
Docker イメージ
⼀時停⽌
作成
削除
pause
unpause
start
run
stop
rm
start
create
Dockerfile build
rm
10. © 2021, Amazon Web Services, Inc. or its Affiliates.
PID:7777
PID:7777
PID:8888 PID:9999
10
Docker コンテナのプロセス
systemd
PID:1
Docker コンテナA Docker コンテナB Docker コンテナC
dockerd
PID:2345
nginx
PID:1
nginx
PID:1
nginx
PID:1
aaa
PID:2348
bbb
PID:3523
worker
PID:17
・namespace により、ファイルシステム、ネットワーク、プロセスツリーなどが分離
・cgroups により、CPU, memory, disk I/O, network などが制限される
PID:7777
worker
PID:17
PID:7777
worker
PID:18
11. © 2021, Amazon Web Services, Inc. or its Affiliates. 11
Docker のネットワーク
l none
l 外部と接続しない
l host
l ホストのネットワークスタックを
共有
l Bridge (デフォルト)
l ブリッジインターフェスと veth
ペア経由で、ブリッジの IP アド
レスでNATされる
l container:<name|id>
l <name|id>で指定したコンテナ
のネットワークスタックを共有
docker0 (ブリッジ)
bridge
vethペア
host
veth1
eth0
192.168.1.1
:80
192.168.1.1:32770
eth0
container:<name|id>
<name|id>で
指定したコンテ
ナのネットワー
クを共有
eth0
192.168.1.1:80
192.168.1.1
172.17.0.1/16
172.17.0.2
:80
lo
none
lo
4種類のネットワークモード
lo
lo
12. © 2021, Amazon Web Services, Inc. or its Affiliates.
Base image
Image
Image
親イメージ
の参照
a
d
d
c
o
d
e
a
d
d
n
o
d
e
j
s
U
b
u
n
t
u
Docker イメージ
・読み取り専⽤で、コンテナを起動するテンプレートとして利⽤される
・⼀般的に「ベースイメージ」と呼ばれる基本イメージの上に依存物やアプリケーションコードを
含めてレイヤー構造を持つ1つのイメージを作る
・create, commit, build などのイメージ作成⽅法がある
・⼀般的には再現性の為 Dockerfile を参照して build コマンドで作成し Docker レジストリに保存
Docker イメージ
Dockerfile
$ docker run -id ubuntu /bin/bash
$ docker exec –it <container> bash
<container># apt-get install nodejs
<container># git clone …
Docker レジストリ
コンテナ内で各種設定
FROM ubuntu:18.04
RUN apt-get update && ¥
apt-get install -y nodejs
COPY ./index.js .
EXPOSE 8080
CMD [“/usr/bin/node”, “index.js”]
12
commit
build
pull
push
create
13. © 2021, Amazon Web Services, Inc. or its Affiliates. 13
③
④
⑤
a
d
d
c
o
d
e
a
d
d
d
e
p
s
a
d
d
p
a
c
k
a
g
e
.
j
s
o
n
②
a
d
d
n
o
d
e
j
s
①
U
b
u
n
t
u
1
8
.
0
4
⑥
d
e
f
i
n
e
c
o
m
m
a
n
d
--- ①
--- ②
--- ③
--- ④
--- ⑤
--- ⑥
・Docker イメージはユニオンファイルシステム(Union file system)で、
複数のファイルやディレクトリ同⼠を透過的に重ねる
・イメージ作成を簡単かつ再現性⾼く⾏うために Dockerfile を書く
Dockerfile Docker イメージ
FROM ubuntu:18.04
RUN apt-get update && ¥
apt-get install -y nodejs
COPY ./package.json .
COPY ./node_modules ./node_modules
COPY ./index.js .
EXPOSE 8080
CMD [“/usr/bin/node”, “index.js”]
Dockerfile と Docker イメージ
14. © 2021, Amazon Web Services, Inc. or its Affiliates. 14
Docker のデータ管理
Base image
Image
Image
a
d
d
c
o
d
e
a
d
d
n
o
d
e
j
s
U
b
u
n
t
u
Container
W
r
i
t
a
b
l
e
・デフォルトでは、コンテナ内で作成されたすべてのファイルは、書き込み可能な
コンテナレイヤーに保存される
・コンテナレイヤーは、コンテナの停⽌と共に無くなる
・書き込みレイヤーは、Linux のユニオンファイルシステムを使うので、データボリュームより
オーバーヘッドが⼤きい
・Docker ボリュームを使うことでデータの永続化が可能
Docker コンテナ
読み取り専⽤
読み書き可能
(永続化出来ない)
Docker ボリューム
永続化ストレージ
15. © 2021, Amazon Web Services, Inc. or its Affiliates. 15
Docker ボリューム
データ永続化が可能なのは2種類
l bind マウント
l ホストの任意のディレクトリをマウント可能
l 例︓ホスト上のファイルを参照、依存させる場合
l volume (推奨)
l Docker の管理領域配下にディレクトリが⽣成され
る ( Linux の場合 /var/lib/docker/volumes/ )
l 複数のコンテナ間のデータ共有も可能
l tmpfs マウント
l メモリ領域を使⽤、データの永続化は出来ない
l 例︓秘密情報など⼀時的な展開領域、⾼いIO処理
l named pipes
l コンテナからDocker Engineにアクセスする時に
使⽤ (Windowsのみ)
/opt/source
/app
bind mount
/var/lib/dock
er/volumes/d
ata/_data/
/secret
tmpfs mount
/data
volume
16. © 2021, Amazon Web Services, Inc. or its Affiliates.
コンテナオーケストレーション
17. © 2021, Amazon Web Services, Inc. or its Affiliates.
Docker を利⽤した基本的ワークフロー
- コンテナ実⾏ -
17
18. © 2021, Amazon Web Services, Inc. or its Affiliates.
思っていたよりも⼿作業︖
• Docker の責務は同⼀サーバ上のコンテナライフサイクル管理
• 複数サーバやコンテナを束ねた概念に対するオペレーションはスコープ外
18
20. © 2021, Amazon Web Services, Inc. or its Affiliates.
「このEC2インスタンスの
クラスタでコンテナを
実⾏したいです」
「このコンテナを3つのAZに
分散させて10個デプロイして、
このロードバランサーに
つないでください」
Amazon ECS
20
21. © 2021, Amazon Web Services, Inc. or its Affiliates.
Amazon ECS Anywhere
Amazon Elastic Kubernetes
Service (Amazon EKS)
Amazon Elastic Container
Service (Amazon ECS)
AWS でのコンテナ運⽤
コンテナ関連サービス・ツール
コンテナオーケストレーションサービス
Amazon Elastic Container
Registry (Amazon ECR)
AWS Fargate Amazon EKS Anywhere Amazon EKS Distro Red Hat OpenShift
AWS Batch
Copilot CLI AWS App Mesh Amazon CloudWatch
Container Insights
AWS Proton
Amazon Elastic Compute
Cloud (Amazon EC2)
22. © 2021, Amazon Web Services, Inc. or its Affiliates.
ベストプラクティス
コンテナにフィットする開発・運⽤指針
23. © 2021, Amazon Web Services, Inc. or its Affiliates.
https://12factor.net/ja/
24. © 2021, Amazon Web Services, Inc. or its Affiliates.
コンテナにフィットする開発・運⽤指針 - https://12factor.net/ja/
The Twelve-Factor App
24
25. © 2021, Amazon Web Services, Inc. or its Affiliates.
コンテナにフィットする開発・運⽤指針 - https://12factor.net/ja/
The Twelve-Factor App
1. コードベース: バージョン管理されている1つのコードベースと複数のデプロイ
2. 依存関係: 依存関係を明⽰的に宣⾔し分離する
3. 設定: 設定を環境変数に格納する
4. バックエンドサービス: バックエンドサービスをアタッチされたリソースとして扱う
5. ビルド、リリース、実⾏: ビルド、リリース、実⾏の3つのステージを厳密に分離する
6. プロセス: アプリケーションを1つもしくは複数のステートレスなプロセスとして実⾏する
7. ポートバインディング: ポートバインディングを通してサービスを公開する
8. 並⾏性: プロセスモデルによってスケールアウトする
9. 廃棄容易性: ⾼速な起動とグレースフルシャットダウンで堅牢性を最⼤化する
10.開発/本番⼀致: 開発、ステージング、本番環境をできるだけ⼀致させた状態を保つ
11.ログ: ログをイベントストリームとして扱う
12.管理プロセス: 管理タスクを1回限りのプロセスとして実⾏する
25
26. © 2021, Amazon Web Services, Inc. or its Affiliates.
まとめ
o コンテナの歴史と Docker 登場以来の急速な発展
o アプリケーションとインフラを “分離” する事でアプリケーションのデリバリー
が素早くできる様になり、CI/CD, IaC, マイクロサービスへの取り組みなどの障
壁を下げた
o CNCF を主体として多くの⼤⼿ベンダーが開発・サポートに関わり、コンテナ周
りのエコシステムが開発されている
o Docker の主要な構成要素
o コンテナ、ネットワーク、イメージ、Dockerfile、ボリューム
o コンテナのオーケストレーション
o Amazon ECS、 Amazon EKS、他多数のコンテナ関連サービス・ツール
o コンテナ開発・運⽤のベストプラクティス
o The Twelve-Factor App
26
27. © 2021, Amazon Web Services, Inc. or its Affiliates.
本セッションの担当︓⻩ 光川(コウ コウセン)
o 所属︓
アマゾンウェブサービスジャパン 株式会社
ソリューションアーキテクト
o 経歴︓
・SIer -> iDC事業者 -> AdTech系企業 -> AWS
o 趣味︓
・サッカー、卓球、アクアリウム、酒、海
o 好きなAWSサービス︓
・Amazon EKS, Amazon Route 53
28. © 2021, Amazon Web Services, Inc. or its Affiliates.
AWS Black Belt Online Seminar とは
o 「サービス別」
「ソリューション別」
「業種別」のそれぞれのテーマに
分け、アマゾン ウェブ サービス ジャパン株式会社が主催する
オンラインセミナーシリーズです。
• AWSの技術担当者が、AWSの各サービスについてテーマごとに動画を公開します
• お好きな時間、お好きな場所でご受講いただけるオンデマンド形式です
• 動画を⼀時停⽌・スキップすることで、興味がある分野・項⽬だけの聴講も可能、
スキマ時間の学習にもお役⽴ていただけます
29. © 2021, Amazon Web Services, Inc. or its Affiliates.
内容についての注意点
• 本資料では2021年6⽉時点のサービス内容および価格についてご説明しています。最新の情報は
AWS公式ウェブサイト(http://aws.amazon.com)にてご確認ください。
• 資料作成には⼗分注意しておりますが、資料内の価格とAWS公式ウェブサイト記載の価格に相違が
あった場合、AWS公式ウェブサイトの価格を優先とさせていただきます。
• 価格は税抜表記となっています。⽇本居住者のお客様には別途消費税をご請求させていただきます。
• AWS does not offer binding price quotes. AWS pricing is publicly available and is subject to
change in accordance with the AWS Customer Agreement available at
http://aws.amazon.com/agreement/. Any pricing information included in this document is
provided only as an estimate of usage charges for AWS services based on certain
information that you have provided. Monthly charges will be based on your actual use of
AWS services, and may vary from the estimates provided.
30. © 2021, Amazon Web Services, Inc. or its Affiliates.
本資料に関するお問い合わせ・ご感想
o 技術的な内容に関しましては、有料のAWSサポート窓⼝へお問い合わせくだ
さい
o https://aws.amazon.com/jp/premiumsupport/
o 料⾦⾯でのお問い合わせに関しましては、カスタマーサポート窓⼝へお問い合
わせください(マネジメントコンソールへのログインが必要です)
o https://console.aws.amazon.com/support/home#/case/create?issueTy
pe=customer-service
o 具体的な案件に対する構成相談は、後述する個別技術相談会をご活⽤ください
ご感想はTwitterへ︕ハッシュタグは以下をご利⽤ください
#awsblackbelt
31. © 2021, Amazon Web Services, Inc. or its Affiliates.
AWS の⽇本語資料の場所「AWS 資料」で検索
https://amzn.to/JPArchive
32. © 2021, Amazon Web Services, Inc. or its Affiliates.
AWS のハンズオン資料の場所「AWS ハンズオン」で検索
https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-hands-on/
33. © 2021, Amazon Web Services, Inc. or its Affiliates.
で[検索]
AWS イベント
毎週”W-A個別技術相談会”を実施中
oAWSのソリューションアーキテクト(SA)に
対策などを相談することも可能
o申込みはイベント告知サイトから
(https://aws.amazon.com/jp/about-aws/events/)
AWS Well-Architected 個別技術相談会
34
34. © 2021, Amazon Web Services, Inc. or its Affiliates.
ご視聴ありがとうございました