SlideShare une entreprise Scribd logo
1  sur  62
Docker Compose入門
今日から始めるComposeの初歩からswarm mode対応まで
Engineer / Technology Evangelist, SAKURA Internet, Inc.
@zembutsu 前佛 雅人 ZEMBUTSU Masahito
2017年6月14日(水) #mastercloud
今日お伝えすること
Docker Compose 基本概念
Compose を YAML で動かす
docker stack と swarm mode
3
Compose とは?
基本概念と役割
Docker Compose
4
Introducing Moby Project: a new open-source project to advance the software containerization movement - Docker Blog
https://blog.docker.com/2017/04/introducing-the-moby-project/
A new upstream project to break up Docker into independent components by shykes · Pull Request #32691 · moby/moby
https://github.com/moby/moby/pull/32691
Docker と周辺ツールやプロジェクトとの関係性まとめ
references
2013
Docker
LXC
+
2014
libcontainer
ver0.9
デーモン
Linux向けコンテナ用
ライブラリ(当時開発中)
独自にライブラリを実装
2015
Docker Engine
デーモンの呼称を変更
補助ツール群の登場
Docker Swarm
Docker Compose
Docker Machine
2016 2017
runC
v1.11
OCI基準のランタイムの1つ
“docker”バイナリから
dockerd デーモンに代わり
Linux capabilityの管理
Engine (dockerd)
containerD
OCI準拠のランタイムを
動かすスーパーバイザ
v1.11
Docker独自規格
業界規格・共通技術
CNCF (Cloud Native
Computing Foundation)
の規格の1つに採用
v1.12
infrakit
v1.12
SwarmKit
platform agnostic
インフラの差違を埋めるためのツール
カーネルとユーザスペースを提供
イミュータブルなインフラのため
派生
swarm
モード
派生
hyperkit
vpnkit
datakit
コンテナシステムの組立に
特化したフレームワークを
開発するプロジェクト
https://github.com/mobyhttps://github.com/docker
5
“Compose is a tool for defining and running
multi-container Docker applications.”
複数コンテナのDockerアプリケーションを
定義し、実行するツールがCompose
6
“Compose is a tool for defining and running
multi-container Docker applications.”
複数コンテナのDockerアプリケーションを
定義し、実行するツールがCompose
docker-compose.yml
YAMLファイル
docker-compose
CLI
7
Why?
Docker Engine
8
エ ン ジ ン
$ docker run …
$ docker run …
$ docker run …
$ docker run …
Docker Swarm
9
ス ウ ォ ー ム
$ docker run …
$ docker run …
$ docker run …
$ docker run …
10
• 複数のコンテナを一斉に
操作できない
• 複数台のサーバ上で一斉に
操作できない
管理が
面倒
“Docker allows you to package an application
with all of its dependencies into a standardized
unit for software development.”
www.docker.com
11
全ての依存関係をパッケージ化して、コンテナとして動かす
12
“Fast, isolated development environments
using Docker”
www.fig.sh
13
“Fast, isolated development environments
using Docker”
www.fig.sh
Docker Compose
14
コ ン ポ ー ズ
“Compose is a tool for
defining and running
multi-container Docker
applications.”
15
16
17
Mastodon
18
Mastodon
19
version: "3"
services:
db:
restart: always
image: postgres:alpine
networks:
mastodon:
volumes:
- mastodon_postgres:/var/lib/postgresql/data
redis:
restart: always
image: redis:alpine
networks:
mastodon:
volumes:
- mastodon_redis:/data
frontend:
build:
context: ./frontend
dockerfile: Dockerfile.nginx
image: mastodon_frontend:alpine
ports:
- "80:80"
- "443:443"
depends_on:
- web
- streaming
networks:
mastodon:
volumes:
- /etc/localtime:/etc/localtime:ro
- certbot:/etc/letsencrypt
sidekiq:
restart: always
build: .
image: gargron/mastodon
env_file: .env.production
command: bundle exec sidekiq -q default -q mailers -q pull -q push
depends_on:
- db
- redis
networks:
mastodon:
volumes:
- system:/mastodon/public/system
mta:
restart: always
image: namshi/smtp
env_file: .env.smtp
networks:
mastodon:
volumes:
- /etc/localtime:/etc/localtime:ro
networks:
mastodon:
external: true
volumes:
certbot:
external: true
mastodon_postgres:
mastodon_redis:
assets:
packs:
system:
web:
restart: always
build: .
image: gargron/mastodon
env_file: .env.production
command: bundle exec rails s -p 3000 -b '0.0.0.0'
#ports:
# - "3000:3000"
depends_on:
- db
- redis
networks:
mastodon:
aliases:
- mastodon_web
volumes:
- assets:/mastodon/public/assets
- packs:/mastodon/public/packs
- system:/mastodon/public/system
streaming:
restart: always
build: .
image: gargron/mastodon
env_file: .env.production
command: npm run start
ports:
- "4000:4000"
networks:
mastodon:
aliases:
- mastodon_streaming
depends_on:
- db
- redis
docker-compose.yml
20
version: "3"
services:
db:
restart: always
image: postgres:alpine
networks:
mastodon:
volumes:
- mastodon_postgres:/var/lib/postgresql/data
redis:
restart: always
image: redis:alpine
networks:
mastodon:
volumes:
- mastodon_redis:/data
frontend:
build:
context: ./frontend
dockerfile: Dockerfile.nginx
image: mastodon_frontend:alpine
ports:
- "80:80"
- "443:443"
depends_on:
- web
- streaming
networks:
mastodon:
volumes:
- /etc/localtime:/etc/localtime:ro
- certbot:/etc/letsencrypt
sidekiq:
restart: always
build: .
image: gargron/mastodon
env_file: .env.production
command: bundle exec sidekiq -q default -q mailers -q pull -q push
depends_on:
- db
- redis
networks:
mastodon:
volumes:
- system:/mastodon/public/system
mta:
restart: always
image: namshi/smtp
env_file: .env.smtp
networks:
mastodon:
volumes:
- /etc/localtime:/etc/localtime:ro
networks:
mastodon:
external: true
volumes:
certbot:
external: true
mastodon_postgres:
mastodon_redis:
assets:
packs:
system:
web:
restart: always
build: .
image: gargron/mastodon
env_file: .env.production
command: bundle exec rails s -p 3000 -b '0.0.0.0'
#ports:
# - "3000:3000"
depends_on:
- db
- redis
networks:
mastodon:
aliases:
- mastodon_web
volumes:
- assets:/mastodon/public/assets
- packs:/mastodon/public/packs
- system:/mastodon/public/system
streaming:
restart: always
build: .
image: gargron/mastodon
env_file: .env.production
command: npm run start
ports:
- "4000:4000"
networks:
mastodon:
aliases:
- mastodon_streaming
depends_on:
- db
- redis
docker-compose.yml
21
22
コンテナ単位
Engine
(プロジェクト内の)
サービス単位
Compose
23
開発、テスト、ステージング
CI ワークフローに適している
• 単一ホスト上でも環境を分けたい場合に
• コンテナが作成したボリューム(データ領域)を
残したり、共有できる
• Compose ファイルを再利用できる
24
セットアップ方法
docker-compose CLI
Compose形式v1~v3
Composeを使う
フォーマット
25
セットアップ
https://github.com/docker/compose/releases
から、各OSに対応したバイナリのセットアップが簡単
curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m`¥
> /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
26
docker CLI風のコマンド群
27
docker-compose up
docker-compose ps
docker-compose stop
docker-compose logs
docker-compose rm
28
docker-compose.yml
version: '3.1'
services:
wordpress:
image: wordpress
ports:
- 80:80
environment:
WORDPRESS_DB_PASSWORD: example
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
• プロジェクトを定義・操作
• サービス、ネットワーク、
ボリュームを定義など、
アプリケーションに依存する
すべての情報を定義
• 必要なイメージ名やタグの情報
• 環境変数
• 外部(external)ネットワーク
• 外部(external)ボリューム
• などなど
29
より有効活用
するには…?
30
Orchestration
( ( )
Scheduling Cluster Management
複数のホスト・システム上を横
断するアプリケーションをス
ケール(拡大・縮小)できる機能
※コンテナに依存しない
• Marathon, chronos
• Docker swarm
• Deis
• fleet
• Apache Mesos
• DCOS (Mesosphere)
• Kubernetes
• Docker Engine
(swarm mode)
+ Docker Compose
• Rancher
• Nomad
設定ファイルをベースに
サービスを定義・維持
計算資源の抽象化
内部分散ステート・ストア
Internal Distrubuted State Store
マネージャ
Manager
マネージャ
Manager
マネージャ
Manager
ワーカ
Worker
ワーカ
Worker
ワーカ
Worker
ワーカ
Worker
ワーカ
Worker
ワーカ
Worker
internet
仮想マシン 仮想マシン 仮想マシン
ingress
Virtual Router
(IPVS)
タスク タスク タスク
Routing mesh
network
サービス作成
$ docker service create
「--constraint」でノードの指定
「--mode=global」で全ノードに展開
33
docker stack
34
docker stack deploy -c docker-compose.yml [NAME]
docker service は「サービス」単位
docker stack は「アプリケーション全体」かつ
swarm mode で Docker Compose 互換機能を提供
ポイント
35
docker stack deploy -c docker-compose.yml [NAME]
36
$ docker stack deploy -c docker-compose.yml web
Creating service web_web
$ docker stack ps web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE
ERROR PORTS
uhm1xxq1u70w web_web.1 zembutsu/docker-sample-nginx:latest frontend-01 Running Running 45
seconds ago
ccmokdadpjqx web_web.2 zembutsu/docker-sample-nginx:latest frontend-02 Running Running 28
seconds ago
cflckriidpt0 web_web.3 zembutsu/docker-sample-nginx:latest frontend-03 Running Running 33
seconds ago
$ docker stack services web
ID NAME MODE REPLICAS IMAGE PORTS
yunncblhngu6 web_web replicated 3/3 zembutsu/docker-sample-nginx:latest *:80->80/tcp
= docker service ps web
= docker service ls
37
version: '3'
services:
web:
image: zembutsu/docker-sample-nginx
deploy:
replicas: 3
resources:
limits:
cpus: "0.1"
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
internal:
aliases:
- web
volumes:
- /etc/localtime:/etc/localtime:ro
networks:
internal:
docker-compose.yml
Compose format は 3種類
v1 v2 v3
・ネットワーク非対応
・ボリューム非対応
・ネットワーク対応
・ボリューム対応
・スケール(swarm)
・リソース制限
Docker Swarm
Docker Compose
Docker Engine
swarm mode
docker
stack
Docker Swarm
Docker Compose
Docker Engine
swarm mode
docker
stack
Compose format
v3
swarm mode 基本コマンド
$ docker swarm init --listen-addr <host>:2377
$ docker swarm join <host>:<port>
$ docker service create ¥
--replicas N –p <公開port>:<内部> --name <名前> <イメージ>
$ docker service ls
$ docker service tasks <サービス名>
$ docker service update --replicas N <サービス名>
$ docker service update --image <イメージ> <サービス名>
$ docker service rm
クラスタ初期化
クラスタ参加
サービス作成
サービス一覧
タスク一覧
サービス更新
ローリング・アップデート
サービス削除
① Docker Engine “swarm モード” の初期化
マネージャ・ノード1 ワーカ・ノード1 ワーカ・ノード2
Docker Engine
(dockerd)
Manager node Worker node Worker node
Docker Engine のクラスタを「swarm」(”群れ”の意味)と呼ぶ
「docker swarm」コマンドはクラスタ上のサービスやタスクを管理する
はじめに「docker swarm init」コマンドでクラスタを初期する
192.168.39.1
(node-01)
192.168.39.2
(node-02)
192.168.39.3
(node-03)
docker swarm init –listen-addr 192.168.39.1:2377
クラスタの初期化
docker@node-01:~$ docker node ls
ID NAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS
dhrbvl6o9xqvprsq2uzq8o9ev * node-01 Accepted Ready Active Leader
各ホスト上では Docker Engine (dockerd)が
稼働している。通常の docker コマンド利用と
swarm モードは併用可能
Docker Engine
(dockerd)
Docker Engine
(dockerd)
ノードは swarm クラスタ内の Docker エンジンのこと
「docker node」はクラスタのノード管理するコマンド群で、マネージャ・ノードのみ実行可能
「docker node ls」は、マネージャ用のノード一覧を表示
swarm クラスタ
② swarm node join でクラスタに追加
マネージャ・ノード1 ワーカ・ノード1 ワーカ・ノード2
Manager node Worker node Worker node
swarm クラスタ
192.168.39.1
(node-01)
192.168.39.2
(node-02)
192.168.39.3
(node-03)
docker swarm join 192.168.39.1:2377
クラスタに worker (ワーカ)として参加
docker@node-01:~$ docker node ls
ID NAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS
6puvbl7tgxislfha5iaha40jm node-03 Accepted Ready Active
9zj16or3durdh5i7c6khlench node-02 Accepted Ready Active
dhrbvl6o9xqvprsq2uzq8o9ev * node-01 Accepted Ready Active Leader
「MANAGER STATUS」が無ければ、ワーカ・ノードとして動作
ただし、この例のマネージャはワーカも兼ねている
TCP Port 2377 は、クラスタ管理の通信用
TCP/UDP Port 7946 はノード間通信用
TCP/UDP Port 4789 はオーバレイ・ネットワーク用
ワーカはマネージャから
タスクを受け取る
マネージャでサービスを定義
タスクをワーカに割り振る
③ swarm service create でサービス作成
マネージャ・ノード1 ワーカ・ノード1 ワーカ・ノード2
Manager node Worker node Worker node
swarm クラスタ
192.168.39.1
(node-01)
192.168.39.2
(node-02)
192.168.39.3
(node-03)
$ docker service create --replicas 1 –name web -p 80:80 nginx
f218o6xshkyt7zzxujhnz1a2h
nginx イメージを使う web という名前のサービスを作成
docker@node-01:~$ docker service ls
ID NAME REPLICAS IMAGE COMMAND
13765buws9fr web 0/1 nginx
サービスはレプリカの期待数を定義
「0/1」は期待数は 1 だが現状は 0
レプリカ数:1
swarmのポート80をコンテナ内の80に割り当て
マネージャでサービスを定義
タスクをワーカに割り振る
ID NAME REPLICAS IMAGE COMMAND
13765buws9fr web 1/1 nginx
マネージャはノードにタスクを割り当て(スケジュールし)、
タスク(としてのコンテナ)が起動すると「1/1」になる
サービス タスク
(コンテナ)
nginxweb
スケジュール
コンテナ起動
④ ポートの公開と Ingress オーバレイ・ネットワーク
マネージャ・ノード1 ワーカ・ノード1 ワーカ・ノード2
Manager node Worker node Worker node
swarm クラスタ
192.168.39.1
(node-01)
192.168.39.2
(node-02)
192.168.39.3
(node-03)
サービス タスク
(コンテナ)
nginxweb
Port 80(tcp)
オーバレイ・ネットワーク
Port 80(tcp)
Ingress
Port 80(tcp)Port 80(tcp)
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
bbb5e37b01e8 bridge bridge local
6550c72b075f docker_gwbridge bridge local
84baeb90cbb2 host host local
9i5hmgqr20jh ingress overlay swarm
7ab4c321bbe5 none null local
⑤ Ingress Load Balancing
マネージャ・ノード1 ワーカ・ノード1 ワーカ・ノード2
Manager node Worker node Worker node
swarm クラスタ
192.168.39.1
(node-01)
192.168.39.2
(node-02)
192.168.39.3
(node-03)
タスク
(コンテナ)
nginx
Port 80(tcp)
オーバレイ・ネットワーク
Port 80(tcp)
Ingress
タスク
(コンテナ)
nginx
Port 80(tcp)
タスク
(コンテナ)
nginx
Port 80(tcp)
48
49
50
51
https://alpinelinux.org/
52
超小容量Linuxディストリビューション
Alpine Linux
$ docker images ls
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest a41a7446062d 11 days ago 3.96MB
53
54
FROM alpine:latest
RUN apk update && apk add openssl
Dockerfile
55
56
57
58
コンテナの
サービス群を
Composeで
梱包
する話でした。
サービスを梱包する話
Docker Compose 基本概念
Compose を YAML で動かす
docker stack と swarm mode
Compose
Compose v3 や
swarm モードを始めるなら
今が旬ではないでしょうか
私からは以上です
ありがとうございました
何か気になる所がありますか?
ご参考:Docker 日本語ドキュメント
http://docs.docker.jp/
http://slideshare.net/zembutsu
twitter: @zembutsu

Contenu connexe

Tendances

コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
コンテナ基盤であるLXC/LXDを 本番環境で運用する話
コンテナ基盤であるLXC/LXDを 本番環境で運用する話コンテナ基盤であるLXC/LXDを 本番環境で運用する話
コンテナ基盤であるLXC/LXDを 本番環境で運用する話Nobuhiro Fujita
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User NamespacesAkihiro Suda
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能Kohei Tokunaga
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Preferred Networks
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
RootlessコンテナAkihiro Suda
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話Yuta Shimada
 
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...Google Cloud Platform - Japan
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーションMasahito Zembutsu
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例kazuhcurry
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService PrincipalToru Makabe
 
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)NTT DATA Technology & Innovation
 

Tendances (20)

コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
コンテナ基盤であるLXC/LXDを 本番環境で運用する話
コンテナ基盤であるLXC/LXDを 本番環境で運用する話コンテナ基盤であるLXC/LXDを 本番環境で運用する話
コンテナ基盤であるLXC/LXDを 本番環境で運用する話
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
Rootlessコンテナ
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
 
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
 

En vedette

Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?Masahito Zembutsu
 
TectonicはKubernetesの構築・管理基盤である -概要の章-/-構築の章-
TectonicはKubernetesの構築・管理基盤である -概要の章-/-構築の章-TectonicはKubernetesの構築・管理基盤である -概要の章-/-構築の章-
TectonicはKubernetesの構築・管理基盤である -概要の章-/-構築の章-Masahito Zembutsu
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
開発環境をVagrantからdockerに移行してみた
開発環境をVagrantからdockerに移行してみた開発環境をVagrantからdockerに移行してみた
開発環境をVagrantからdockerに移行してみたpyar6329
 
Cloud Foundryの件について@OpenStack Days Tokyo 2015
Cloud Foundryの件について@OpenStack Days Tokyo 2015Cloud Foundryの件について@OpenStack Days Tokyo 2015
Cloud Foundryの件について@OpenStack Days Tokyo 2015Ken Ojiri
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
社内勉強会(Docker)
社内勉強会(Docker)社内勉強会(Docker)
社内勉強会(Docker)Shinya Sasaki
 
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?Masahito Zembutsu
 
コンテナで作れるFaaS
コンテナで作れるFaaSコンテナで作れるFaaS
コンテナで作れるFaaS真吾 吉田
 
プログラミング教育の基礎知識
プログラミング教育の基礎知識プログラミング教育の基礎知識
プログラミング教育の基礎知識Masahito Zembutsu
 
Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介Masahito Zembutsu
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Masahito Zembutsu
 
DockerとKubernetesが作る未来
DockerとKubernetesが作る未来DockerとKubernetesが作る未来
DockerとKubernetesが作る未来Kazuto Kusama
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Etsuji Nakai
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paiza
 
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking toolsNobuyuki Matsui
 
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~Kunihiro TANAKA
 
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Masahito Zembutsu
 

En vedette (20)

Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?
 
TectonicはKubernetesの構築・管理基盤である -概要の章-/-構築の章-
TectonicはKubernetesの構築・管理基盤である -概要の章-/-構築の章-TectonicはKubernetesの構築・管理基盤である -概要の章-/-構築の章-
TectonicはKubernetesの構築・管理基盤である -概要の章-/-構築の章-
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
開発環境をVagrantからdockerに移行してみた
開発環境をVagrantからdockerに移行してみた開発環境をVagrantからdockerに移行してみた
開発環境をVagrantからdockerに移行してみた
 
Cloud Foundryの件について@OpenStack Days Tokyo 2015
Cloud Foundryの件について@OpenStack Days Tokyo 2015Cloud Foundryの件について@OpenStack Days Tokyo 2015
Cloud Foundryの件について@OpenStack Days Tokyo 2015
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
社内勉強会(Docker)
社内勉強会(Docker)社内勉強会(Docker)
社内勉強会(Docker)
 
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
 
コンテナで作れるFaaS
コンテナで作れるFaaSコンテナで作れるFaaS
コンテナで作れるFaaS
 
プログラミング教育の基礎知識
プログラミング教育の基礎知識プログラミング教育の基礎知識
プログラミング教育の基礎知識
 
Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介
 
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴
 
DockerとKubernetesが作る未来
DockerとKubernetesが作る未来DockerとKubernetesが作る未来
DockerとKubernetesが作る未来
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺
 
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
 
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
 
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
 

Similaire à Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで

Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料teruyaono1
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Naoki Nagazumi
 
コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundryコンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud FoundryKazuto Kusama
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコムTomoyaTakegoshi
 
Docker handson
Docker handsonDocker handson
Docker handsonkoda3
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKazuyuki Mori
 
Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見るzhengen lin
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンRyo Nakamaru
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイoshiro_seiya
 
Rancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタRancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタTakashi Kanai
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西Masahide Yamamoto
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎Daisuke Hiraoka
 
Dockerを支える技術
Dockerを支える技術Dockerを支える技術
Dockerを支える技術Etsuji Nakai
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
DockerでAlmaLinux(web, php, pukiwiki)環境構築
DockerでAlmaLinux(web, php, pukiwiki)環境構築DockerでAlmaLinux(web, php, pukiwiki)環境構築
DockerでAlmaLinux(web, php, pukiwiki)環境構築Yoshihiro Mizoguchi
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
DockerクイックツアーEtsuji Nakai
 

Similaire à Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで (20)

Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
 
コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundryコンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundry
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム
 
Docker handson
Docker handsonDocker handson
Docker handson
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見る
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオン
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイ
 
Docker社内勉強会
Docker社内勉強会Docker社内勉強会
Docker社内勉強会
 
Rancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタRancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタ
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎
 
Dockerを支える技術
Dockerを支える技術Dockerを支える技術
Dockerを支える技術
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Fig
FigFig
Fig
 
DockerでAlmaLinux(web, php, pukiwiki)環境構築
DockerでAlmaLinux(web, php, pukiwiki)環境構築DockerでAlmaLinux(web, php, pukiwiki)環境構築
DockerでAlmaLinux(web, php, pukiwiki)環境構築
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
Dockerクイックツアー
 

Plus de Masahito Zembutsu

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

Plus de Masahito Zembutsu (20)

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

Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで

  • 1. Docker Compose入門 今日から始めるComposeの初歩からswarm mode対応まで Engineer / Technology Evangelist, SAKURA Internet, Inc. @zembutsu 前佛 雅人 ZEMBUTSU Masahito 2017年6月14日(水) #mastercloud
  • 2. 今日お伝えすること Docker Compose 基本概念 Compose を YAML で動かす docker stack と swarm mode
  • 4. 4 Introducing Moby Project: a new open-source project to advance the software containerization movement - Docker Blog https://blog.docker.com/2017/04/introducing-the-moby-project/ A new upstream project to break up Docker into independent components by shykes · Pull Request #32691 · moby/moby https://github.com/moby/moby/pull/32691 Docker と周辺ツールやプロジェクトとの関係性まとめ references 2013 Docker LXC + 2014 libcontainer ver0.9 デーモン Linux向けコンテナ用 ライブラリ(当時開発中) 独自にライブラリを実装 2015 Docker Engine デーモンの呼称を変更 補助ツール群の登場 Docker Swarm Docker Compose Docker Machine 2016 2017 runC v1.11 OCI基準のランタイムの1つ “docker”バイナリから dockerd デーモンに代わり Linux capabilityの管理 Engine (dockerd) containerD OCI準拠のランタイムを 動かすスーパーバイザ v1.11 Docker独自規格 業界規格・共通技術 CNCF (Cloud Native Computing Foundation) の規格の1つに採用 v1.12 infrakit v1.12 SwarmKit platform agnostic インフラの差違を埋めるためのツール カーネルとユーザスペースを提供 イミュータブルなインフラのため 派生 swarm モード 派生 hyperkit vpnkit datakit コンテナシステムの組立に 特化したフレームワークを 開発するプロジェクト https://github.com/mobyhttps://github.com/docker
  • 5. 5 “Compose is a tool for defining and running multi-container Docker applications.” 複数コンテナのDockerアプリケーションを 定義し、実行するツールがCompose
  • 6. 6 “Compose is a tool for defining and running multi-container Docker applications.” 複数コンテナのDockerアプリケーションを 定義し、実行するツールがCompose docker-compose.yml YAMLファイル docker-compose CLI
  • 8. Docker Engine 8 エ ン ジ ン $ docker run … $ docker run … $ docker run … $ docker run …
  • 9. Docker Swarm 9 ス ウ ォ ー ム $ docker run … $ docker run … $ docker run … $ docker run …
  • 11. “Docker allows you to package an application with all of its dependencies into a standardized unit for software development.” www.docker.com 11 全ての依存関係をパッケージ化して、コンテナとして動かす
  • 12. 12 “Fast, isolated development environments using Docker” www.fig.sh
  • 13. 13 “Fast, isolated development environments using Docker” www.fig.sh
  • 14. Docker Compose 14 コ ン ポ ー ズ “Compose is a tool for defining and running multi-container Docker applications.”
  • 15. 15
  • 16. 16
  • 19. 19 version: "3" services: db: restart: always image: postgres:alpine networks: mastodon: volumes: - mastodon_postgres:/var/lib/postgresql/data redis: restart: always image: redis:alpine networks: mastodon: volumes: - mastodon_redis:/data frontend: build: context: ./frontend dockerfile: Dockerfile.nginx image: mastodon_frontend:alpine ports: - "80:80" - "443:443" depends_on: - web - streaming networks: mastodon: volumes: - /etc/localtime:/etc/localtime:ro - certbot:/etc/letsencrypt sidekiq: restart: always build: . image: gargron/mastodon env_file: .env.production command: bundle exec sidekiq -q default -q mailers -q pull -q push depends_on: - db - redis networks: mastodon: volumes: - system:/mastodon/public/system mta: restart: always image: namshi/smtp env_file: .env.smtp networks: mastodon: volumes: - /etc/localtime:/etc/localtime:ro networks: mastodon: external: true volumes: certbot: external: true mastodon_postgres: mastodon_redis: assets: packs: system: web: restart: always build: . image: gargron/mastodon env_file: .env.production command: bundle exec rails s -p 3000 -b '0.0.0.0' #ports: # - "3000:3000" depends_on: - db - redis networks: mastodon: aliases: - mastodon_web volumes: - assets:/mastodon/public/assets - packs:/mastodon/public/packs - system:/mastodon/public/system streaming: restart: always build: . image: gargron/mastodon env_file: .env.production command: npm run start ports: - "4000:4000" networks: mastodon: aliases: - mastodon_streaming depends_on: - db - redis docker-compose.yml
  • 20. 20 version: "3" services: db: restart: always image: postgres:alpine networks: mastodon: volumes: - mastodon_postgres:/var/lib/postgresql/data redis: restart: always image: redis:alpine networks: mastodon: volumes: - mastodon_redis:/data frontend: build: context: ./frontend dockerfile: Dockerfile.nginx image: mastodon_frontend:alpine ports: - "80:80" - "443:443" depends_on: - web - streaming networks: mastodon: volumes: - /etc/localtime:/etc/localtime:ro - certbot:/etc/letsencrypt sidekiq: restart: always build: . image: gargron/mastodon env_file: .env.production command: bundle exec sidekiq -q default -q mailers -q pull -q push depends_on: - db - redis networks: mastodon: volumes: - system:/mastodon/public/system mta: restart: always image: namshi/smtp env_file: .env.smtp networks: mastodon: volumes: - /etc/localtime:/etc/localtime:ro networks: mastodon: external: true volumes: certbot: external: true mastodon_postgres: mastodon_redis: assets: packs: system: web: restart: always build: . image: gargron/mastodon env_file: .env.production command: bundle exec rails s -p 3000 -b '0.0.0.0' #ports: # - "3000:3000" depends_on: - db - redis networks: mastodon: aliases: - mastodon_web volumes: - assets:/mastodon/public/assets - packs:/mastodon/public/packs - system:/mastodon/public/system streaming: restart: always build: . image: gargron/mastodon env_file: .env.production command: npm run start ports: - "4000:4000" networks: mastodon: aliases: - mastodon_streaming depends_on: - db - redis docker-compose.yml
  • 21. 21
  • 23. 23 開発、テスト、ステージング CI ワークフローに適している • 単一ホスト上でも環境を分けたい場合に • コンテナが作成したボリューム(データ領域)を 残したり、共有できる • Compose ファイルを再利用できる
  • 27. 27 docker-compose up docker-compose ps docker-compose stop docker-compose logs docker-compose rm
  • 28. 28 docker-compose.yml version: '3.1' services: wordpress: image: wordpress ports: - 80:80 environment: WORDPRESS_DB_PASSWORD: example mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example • プロジェクトを定義・操作 • サービス、ネットワーク、 ボリュームを定義など、 アプリケーションに依存する すべての情報を定義 • 必要なイメージ名やタグの情報 • 環境変数 • 外部(external)ネットワーク • 外部(external)ボリューム • などなど
  • 30. 30 Orchestration ( ( ) Scheduling Cluster Management 複数のホスト・システム上を横 断するアプリケーションをス ケール(拡大・縮小)できる機能 ※コンテナに依存しない • Marathon, chronos • Docker swarm • Deis • fleet • Apache Mesos • DCOS (Mesosphere) • Kubernetes • Docker Engine (swarm mode) + Docker Compose • Rancher • Nomad 設定ファイルをベースに サービスを定義・維持 計算資源の抽象化
  • 31. 内部分散ステート・ストア Internal Distrubuted State Store マネージャ Manager マネージャ Manager マネージャ Manager ワーカ Worker ワーカ Worker ワーカ Worker ワーカ Worker ワーカ Worker ワーカ Worker
  • 32. internet 仮想マシン 仮想マシン 仮想マシン ingress Virtual Router (IPVS) タスク タスク タスク Routing mesh network サービス作成 $ docker service create 「--constraint」でノードの指定 「--mode=global」で全ノードに展開
  • 34. 34 docker stack deploy -c docker-compose.yml [NAME] docker service は「サービス」単位 docker stack は「アプリケーション全体」かつ swarm mode で Docker Compose 互換機能を提供 ポイント
  • 35. 35 docker stack deploy -c docker-compose.yml [NAME]
  • 36. 36 $ docker stack deploy -c docker-compose.yml web Creating service web_web $ docker stack ps web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS uhm1xxq1u70w web_web.1 zembutsu/docker-sample-nginx:latest frontend-01 Running Running 45 seconds ago ccmokdadpjqx web_web.2 zembutsu/docker-sample-nginx:latest frontend-02 Running Running 28 seconds ago cflckriidpt0 web_web.3 zembutsu/docker-sample-nginx:latest frontend-03 Running Running 33 seconds ago $ docker stack services web ID NAME MODE REPLICAS IMAGE PORTS yunncblhngu6 web_web replicated 3/3 zembutsu/docker-sample-nginx:latest *:80->80/tcp = docker service ps web = docker service ls
  • 37. 37 version: '3' services: web: image: zembutsu/docker-sample-nginx deploy: replicas: 3 resources: limits: cpus: "0.1" restart_policy: condition: on-failure ports: - "80:80" networks: internal: aliases: - web volumes: - /etc/localtime:/etc/localtime:ro networks: internal:
  • 40. Docker Swarm Docker Compose Docker Engine swarm mode docker stack
  • 41. Docker Swarm Docker Compose Docker Engine swarm mode docker stack Compose format v3
  • 42. swarm mode 基本コマンド $ docker swarm init --listen-addr <host>:2377 $ docker swarm join <host>:<port> $ docker service create ¥ --replicas N –p <公開port>:<内部> --name <名前> <イメージ> $ docker service ls $ docker service tasks <サービス名> $ docker service update --replicas N <サービス名> $ docker service update --image <イメージ> <サービス名> $ docker service rm クラスタ初期化 クラスタ参加 サービス作成 サービス一覧 タスク一覧 サービス更新 ローリング・アップデート サービス削除
  • 43. ① Docker Engine “swarm モード” の初期化 マネージャ・ノード1 ワーカ・ノード1 ワーカ・ノード2 Docker Engine (dockerd) Manager node Worker node Worker node Docker Engine のクラスタを「swarm」(”群れ”の意味)と呼ぶ 「docker swarm」コマンドはクラスタ上のサービスやタスクを管理する はじめに「docker swarm init」コマンドでクラスタを初期する 192.168.39.1 (node-01) 192.168.39.2 (node-02) 192.168.39.3 (node-03) docker swarm init –listen-addr 192.168.39.1:2377 クラスタの初期化 docker@node-01:~$ docker node ls ID NAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS dhrbvl6o9xqvprsq2uzq8o9ev * node-01 Accepted Ready Active Leader 各ホスト上では Docker Engine (dockerd)が 稼働している。通常の docker コマンド利用と swarm モードは併用可能 Docker Engine (dockerd) Docker Engine (dockerd) ノードは swarm クラスタ内の Docker エンジンのこと 「docker node」はクラスタのノード管理するコマンド群で、マネージャ・ノードのみ実行可能 「docker node ls」は、マネージャ用のノード一覧を表示 swarm クラスタ
  • 44. ② swarm node join でクラスタに追加 マネージャ・ノード1 ワーカ・ノード1 ワーカ・ノード2 Manager node Worker node Worker node swarm クラスタ 192.168.39.1 (node-01) 192.168.39.2 (node-02) 192.168.39.3 (node-03) docker swarm join 192.168.39.1:2377 クラスタに worker (ワーカ)として参加 docker@node-01:~$ docker node ls ID NAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS 6puvbl7tgxislfha5iaha40jm node-03 Accepted Ready Active 9zj16or3durdh5i7c6khlench node-02 Accepted Ready Active dhrbvl6o9xqvprsq2uzq8o9ev * node-01 Accepted Ready Active Leader 「MANAGER STATUS」が無ければ、ワーカ・ノードとして動作 ただし、この例のマネージャはワーカも兼ねている TCP Port 2377 は、クラスタ管理の通信用 TCP/UDP Port 7946 はノード間通信用 TCP/UDP Port 4789 はオーバレイ・ネットワーク用 ワーカはマネージャから タスクを受け取る マネージャでサービスを定義 タスクをワーカに割り振る
  • 45. ③ swarm service create でサービス作成 マネージャ・ノード1 ワーカ・ノード1 ワーカ・ノード2 Manager node Worker node Worker node swarm クラスタ 192.168.39.1 (node-01) 192.168.39.2 (node-02) 192.168.39.3 (node-03) $ docker service create --replicas 1 –name web -p 80:80 nginx f218o6xshkyt7zzxujhnz1a2h nginx イメージを使う web という名前のサービスを作成 docker@node-01:~$ docker service ls ID NAME REPLICAS IMAGE COMMAND 13765buws9fr web 0/1 nginx サービスはレプリカの期待数を定義 「0/1」は期待数は 1 だが現状は 0 レプリカ数:1 swarmのポート80をコンテナ内の80に割り当て マネージャでサービスを定義 タスクをワーカに割り振る ID NAME REPLICAS IMAGE COMMAND 13765buws9fr web 1/1 nginx マネージャはノードにタスクを割り当て(スケジュールし)、 タスク(としてのコンテナ)が起動すると「1/1」になる サービス タスク (コンテナ) nginxweb スケジュール コンテナ起動
  • 46. ④ ポートの公開と Ingress オーバレイ・ネットワーク マネージャ・ノード1 ワーカ・ノード1 ワーカ・ノード2 Manager node Worker node Worker node swarm クラスタ 192.168.39.1 (node-01) 192.168.39.2 (node-02) 192.168.39.3 (node-03) サービス タスク (コンテナ) nginxweb Port 80(tcp) オーバレイ・ネットワーク Port 80(tcp) Ingress Port 80(tcp)Port 80(tcp) $ docker network ls NETWORK ID NAME DRIVER SCOPE bbb5e37b01e8 bridge bridge local 6550c72b075f docker_gwbridge bridge local 84baeb90cbb2 host host local 9i5hmgqr20jh ingress overlay swarm 7ab4c321bbe5 none null local
  • 47. ⑤ Ingress Load Balancing マネージャ・ノード1 ワーカ・ノード1 ワーカ・ノード2 Manager node Worker node Worker node swarm クラスタ 192.168.39.1 (node-01) 192.168.39.2 (node-02) 192.168.39.3 (node-03) タスク (コンテナ) nginx Port 80(tcp) オーバレイ・ネットワーク Port 80(tcp) Ingress タスク (コンテナ) nginx Port 80(tcp) タスク (コンテナ) nginx Port 80(tcp)
  • 48. 48
  • 49. 49
  • 50. 50
  • 52. 52 超小容量Linuxディストリビューション Alpine Linux $ docker images ls REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest a41a7446062d 11 days ago 3.96MB
  • 53. 53
  • 54. 54 FROM alpine:latest RUN apk update && apk add openssl Dockerfile
  • 55. 55
  • 56. 56
  • 57. 57
  • 59. サービスを梱包する話 Docker Compose 基本概念 Compose を YAML で動かす docker stack と swarm mode Compose
  • 60. Compose v3 や swarm モードを始めるなら 今が旬ではないでしょうか