SlideShare a Scribd company logo
Docker入門-基礎編
いまから始めるDocker管理 v1.01
JAWS-UG CLI専門支部 #23 - ECS 入門
2015年7月6日(月)
@zembutsu
Technology Evangelist; Creationline, Inc.
Introduction to docker, basic management and operations
背景画像CREDIT:スフィア / PIXTA(ピクスタ)
2
このスライドで得られる知識
Docker入門-基礎編 いまから始めるDocker
‣ Docker概要と環境構築
なぜ Docker なのか? 速さと利便性。そして、Docker はコンテナではなくプラットフォーム。
‣ Dockerの基本操作コマンドの理解
コンテナのイメージ管理、起動、情報取得、ログ参照、Dockerfile、ボリューム操作
‣ 捕捉:Dockerとコンテナを取り巻く状況
DockerCon 2015 前後、Dockerのオーケストレーション Docker Machine, Swarm, Compose
This slide is an introduction of the basic concept and command of Docker. Because the main purpose uses Docker as a
tool. This is a Japanese document for community of the JAWS-UG CLI Branch held in Tokyo on July 6.
Are you interested in this English version? Please comment me or mention @zembutsu . Thank you.
3
このスライドで扱う基本コマンド
Docker を使い始めるための基本を、詳しく解説していきます
docker images
イメージ一覧表示
docker pull
イメージの取得
docker run
コンテナ実行
docker ps
実行・停止中の一覧
docker attach
コンテナにアタッチ
docker logs
標準出力の表示
docker stop
コンテナ停止
docker inspect
詳細情報の表示
docker rm
イメージ削除
diff | history
差分・履歴表示
docker commit
コンテナイメージ化
docker build
イメージの自動構築
さほど多くありません。
4
docker images … ローカルのイメージ確認
docker pull <レポジトリ:タグ> 例:docker pull centos:6
docker run <オプション> <イメージ> [コマンド] 例:docker run -it ubuntu:14.04 "Hey World"
docker ps or docker ps –a or docker ps -aq
docker run -d <レポジトリ:タグ>
docker attach <ID> --> デタッチはCtrl + P + Q
docker logs <ID> 例:docker logs --tail -f <ID>
docker stop|kill
docker inspect <ID>
docker rm <ID> で削除 例:docker rm $(docker ps -aq --filter='status=exited')
docker diff <ID>
docker history <ID>
doccker commit <オプション> <ID> <レポジトリ:タグ>
dokcer build . で Dockerfile ( FROM, RUN, ADD, CMD, ENTRYPOINT 等 ) を使った自動構築
docker run -p <ホストPort:コンテナPort> 例: docker run -p 8080:80 nginx
docker run -v <ホスト側パス:コンテナ内パス> 例:docker run -v /data:/var/www/html
基本コマンド使用例
5
スライドの目次
Index
‣ 1. ハンズオン概要
‣ 2. なぜDockerなのか?
‣ 3. Dockerの環境構築
‣ 4. Dockerイメージ
‣ 5. コンテナの起動と管理
‣ 6. イメージの構築
‣ 7. ネットワークとボリューム
‣ 8. 番外編の捕捉 - Docker Machine on EC2, Swarm, Compose
これからDockerを知る方の為の
概要から、実際の環境構築、
そしてコンテナやイメージ操作
を理解し、最後はWebサーバの
Nginxが動く環境を作ります。
※内容はAmazonECSに依存しておらず、
純粋にDocker導入という位置づけです。
6
本編前に自己紹介
‣ @zembutsu a.k.a. 前佛雅人
- Technology Evangelist; Creationline, Inc. – 1.5 yrs
- Data Center Operations Engineer – 15+ yrs
興味関心:運用監視自動化、趣味でOSSやクラウド系の検証・情報発信
- SlideShare http://slideshare.net/zembutsu
- Blog http://pocketstudio.jp/log3
書籍・記事
- Serf/Consulで管理を自動化! (Gihyo.jp)
http://gihyo.jp/admin/feature/01/serf-consul
- HashiCorpのツール群からみる
インフラ構築運用の未来 (Think IT)
http://thinkit.co.jp/book/2015/03/05/5700
Why am I here?
+MasahitoZembutsu
ISBN-10: 4774174416 ISBN-10: 4844338145 ISBN-10: 4798139785
このスライドは7月6日開催の
JAWS-UG CLI支部#23における
発表用資料です。参加者の皆
さん、お越しいただき&登壇
の機会ありがとうございます。
※ イ メ ー ジ で す 。
※ 効 用 ・ 効 果 に は 個 人 差 が あ り ま す 。
最近考えていること。
http://qiita.com/zembutsu
Blog http://pocketstudio.jp/log3
http://infrapre.connpass.com/event/16713/
エンジニアのためのプレゼン技術研究会
次回、第3回は 7/11 #infrapre
「私だけが知っている、
エンジニアのためのライフハック」
全員参加型、初心者歓迎!!
情報の発信はQiitaやblog。
みんなで発表を練習しよう
というコミュニティも主催
させて頂いています。
ご興味ありましたら、どうぞ。
● ○ ○ ○ ○ ○ ○ ○
10Introduction to Docker Basic Course
‣ 内容 http://qiita.com/zembutsu/items/891c7ffd2c36097400b1
コンテナ・イメージの確認と取得
コンテナの起動と停止
コンテナの詳細情報を確認
不要なコンテナの削除や変更差分
Dockerfile で wget・ping のコンテナを構築
Dockerfile で Nginx のコンテナを構築
ハンズオン概要
手順はQiitaで公開中です。
約15~30分程度の簡単なもの
なので、この資料を読むだけ
ではなく、ぜひ手を動かして
体感して頂ければと思います。
11Introduction to Docker Basic Course
‣ 番外編
Docker Machine を使った EC2 上の Docker 環境構築
もくもく自習
おまけ
ハンズオン概要
既にDockerをご存知の方への
追加メニューも用意しました。
● ● ○ ○ ○ ○ ○ ○
OpenStack
CloudStack
Mackerel
Amazon Web Services
Google Cloud Platform
Windows Azure
SoftLayer
Niftyクラウド
さくらのクラウド
Salesforce
Heroku
DigitalOcean
LinodeさくらのVPS
VMware
Circle CI
Jenkins
GitHub
Slack
NewRelic
Datadog
IaaS
パブリック・クラウド
日本国内
パブリック
クラウド
VPS
Monitoring
PagerDuty
Operations
CI
PaaS
Atlas
プライベート
クラウド
開発環境 SaaS
Cloud n
Docker
( Linux Containers)
クラウドを取り巻く業界俯瞰図 Dockerの登場は最近ですが、
OpenStack
CloudStack
Mackerel
Amazon Web Services
Google Cloud Platform
Windows Azure
SoftLayer
Niftyクラウド
さくらのクラウド
Salesforce
Heroku
DigitalOcean
LinodeさくらのVPS
VMware
Circle CI
Jenkins
GitHub
Slack
NewRelic
Datadog
IaaS
パブリック・クラウド
日本国内
パブリック
クラウド
VPS
Monitoring
PagerDuty
Operations
CI
PaaS
Atlas
プライベート
クラウド
開発環境 SaaS
Cloud n
Docker
( Linux Containers)
クラウドを取り巻く業界俯瞰図 気がつけば、色々な領域を
巻き込みつつあります。
なぜでしょうか?
物理時代
仮想化・クラウド時代
コンテナ時代
機
材
発
注
機
材
納
品
設
置
機
器
設
定
事
前
設
計
ク
リ
ッ
ク
見
積
も
り
O
S
設
定
環
境
構
築
試
験
利
用
開
始
試
験
開
発
試
験
運
用
利
用
開
始
…
…
事
前
設
計
ク
リ
ッ
ク
試
験
利
用
開
始
…
事
前
設
計
ク
リ
ッ
ク
試
験
利
用
開
始
…
開 発 段 階 検 証 段 階 本 番 段 階
すべてを迅速に、
一貫した環境で行いやすい← New
物理時代は調達から運用まで、
とにかく時間がかかりました。
仮想マシンの普及で、迅速に
使える環境を手に入れました。
しかし、環境によって動く・
動かないという問題が起こり
はじめます。そこでコンテナ。
社外開発環境 本番環境ステージング環境
社内共有開発環境
個人開発環境
社内テスト環境
社外開発環境 本番環境ステージング環境
CI/CD Docker レジストリ
Docker動作環境(docker machine)
開発や運用段階によって、別々のインフラを
用意することも→Dockerで全て共通・抽象化。
17Introduction to Docker Basic Course
‣ コンテナ化とは、ホストOS上のKernel機能を使い
複数の root ファイルシステムを実行できる。
各々の root ファイルシステムの事を「コンテナ」( container ) と呼称する。
これ何て chroot?と言われる所以。
‣ 各々のコンテナは各々のリソースを持つ
プロセス(計算資源)
メモリ
デバイス
ネットワーク
コンテナ?
18Introduction to Docker Basic Course
‣ 利点
開発者にとっての効率の良さ
すぐに利用できる点と、バージョン・コントロール、CI/CDの自動化。
アプリケーションのポータビリティ
開発をはじめ、テストやリリースに至るまで、コンテナを通して一環したインフラ環境を利用できる。
‣ ポイント
Dockerそのものが何かするのではない(仮想化・クラウドと同じ)
– Dockerは、あくまでも、利用者の利便性を向上する道具
(プラットフォームの役割)
Dockerはインフラを抽象化--developer’s efficiency and application portability
物理マシン 物理マシン 物理マシン
OS OS OS
HyperVisor HyperVisor HyperVisor
VM VM VM VM VM VM
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
物理マシン 仮想マシン クラウド
OS OS OS
Docker
Engine
Docker
Engine
Docker
Engine
App App App App App App
App App App App
仮想化・クラウド Dockerのコンテナ管理
なぜコンテナ管理用のプラットフォームが必要なの??
Dockerは管理用のシステム。
これまでと比較してみます。
物理マシン 物理マシン 物理マシン
OS OS OS
HyperVisor HyperVisor HyperVisor
VM VM VM VM VM VM
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
物理マシン 仮想マシン クラウド
OS OS OS
Docker
Engine
Docker
Engine
Docker
Engine
GUI
CLI
API
Docker Cluster 管理レイヤ
( ECS, Docker Swarm, rkt, Rancher …etc )
App App App App App App App App App App
まだクラスタ管理の部分は
機能として足りていません。
現状の大きな課題です。
仮想化・クラウド Dockerのコンテナ管理
物理マシン 物理マシン 物理マシン
OS OS OS
HyperVisor HyperVisor HyperVisor
VM VM VM VM VM VM
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
App App App App
物理マシン 仮想マシン クラウド
OS OS OS
Docker
Engine
Docker
Engine
Docker
Engine
App App App App App App
GUI
CLI
API
Docker Cluster 管理レイヤ
( ECS, Docker Swarm, rkt, Rancher …etc )
オーケストレーション
サービス検出・クラスタ管理
仮想化・クラウド Dockerのコンテナ管理
オーケストレーション技術で
インフラ層をまとめて管理・
抽象化できるかも・・・?
APCERA
Cloud Foundry
shippable
Google Container
Engine
Amazon EC2
Container Service
IBM Containers
on Bluemix
コンテナを取り巻く業界俯瞰図
開発環境
Build / Deploy
運用自動化
Orchestration
kitematic
Etcd
SkyDNS
Service Discovery
Docker
fleet
flannel
rkt
CoreOS
Tectonic
Mesosphere
Apache Auora
Marathon
Cluster Management
Kubernetes
構成管理
Docker Swarm
Docker Machine
Docker Compose
Docker特化OS
PaaS
Networking
コンテナ管理用プラットフォーム
コンテナ界隈だけでも様々な
プレイヤーが入り乱れ中。
パブリック・クラウド陣営
Google Container
Engine
Amazon EC2
Container Service
IBM Containers
on Bluemix Google Kubernetes
Tectonic
CoreOS
商用サポート/エンタープライズ
管理・効率化
Docker ネイティブサポート
最小環境
Docker
競合
オープンソース
コミュニティ
プラットフォーム周辺でも
わりとカオスでしたが…
24
DockerCon 2015
‣ Docker, Inc.主催
サンフランシスコ
6月22日・23日の2日間
セッション、ハンズオン、
トレーニング、ブース出展
http://www.dockercon.com/
DockerConの発表により、
状況が様変わりし始めます。
Google Kubernetes
CoreOS× libcontainer
The Open Container Project (OCP)
runC
Orchestration
PROJECT ORCA
appcは独自に継続
Linux
Foundation
事務局として協力
Google Container
Engine
IBM Containers
on Bluemix
OS LayerCloud Providers
Amazon ECS
( EC2 Container
Service )
協力 協力
協力
割と整理されつつあります。
Dockerいつ使うの?
今でしょ!的な…
● ● ● ○ ○ ○ ○ ○
27Introduction to Docker Basic Course
‣ 方法1:インストール用の汎用スクリプトを使用
wget -qO- https://get.docker.com/ | sh
service docker start
※ Ubuntu や Debian などは、こちらで Docker 社が提供する最新安定版をダウンロード可能
※ RHEL/CentOS の場合は、後述の個別パッケージをセットアップ
‣ 方法2:各ディストリビューション向けパッケージ
‣ 方法3:boot2docker を使う
※ Windows と Mac OS X は、VirtualBox 上の仮想サーバを使用
Dockerのセットアップ方法
その時点の最新版が使えます。
ディストリビューションや
バージョンで、パッケージの
名前が異なる場合があります。
28Introduction to Docker Basic Course
‣ Linux
Linux Kernel の機能を使うので、
インストールスクリプトかパッケージをセットアップすることで
すぐに使えます。
‣ Windows・Mac OS
boot2docker(VirtualBox)で Linux 環境を仮想マシン上に作り、
そこに Docker の動く環境をセットアップします。
クライアントは、PC上のコマンドライン(ターミナル)で動作します。
OSごとに違いが?
29Introduction to Docker Basic Course
‣ 方法1:Docker版 v1.7(最新版)docker-engine
sudo yum update
curl -O -sSL https://get.docker.com/rpm/1.7.0/centos-6/RPMS/x86_64/docker-
engine-1.7.0-1.el6.x86_64.rpm
sudo yum localinstall --nogpgcheck docker-engine-1.7.0-1.el6.x86_64.rpm
sudo service docker start
‣ 方法2: EPEL版 v1.6 パッケージ doker-io
curl -s https://get.docker.com | sudo sh
※参考 http://docs.docker.com/installation/centos/
RHEL/CentOS 7
30Introduction to Docker Basic Course
‣ 動作条件
RHEL/CentOS 6.5 以上かつ、Linux kernel 2.6.32-431 以上
※ Kernel のバグに起因する問題がある可能性のため、CentOS 7 の利用が推奨されています。
‣ 手順 ( EPEL 版 v1.5 )
sudo yum install epel-release
sudo yum install docker-io
sudo service docker start
※参考 http://docs.docker.com/installation/centos/
RHEL/CentOS 6.5
31Introduction to Docker Basic Course
‣ sudo docker version
‣ sudo 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.
(Assuming it was not already locally available.)
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
For more examples and ideas, visit:
http://docs.docker.com/userguide/
「hello-world」コンテナは
テストで使われるものです。
32Introduction to Docker Basic Course
‣ sudo を使わず docker コマンドを使う設定
docker グループに対象ユーザを追加する
– $ sudo usermod –aG docker <ユーザ名>
※注意:docker クライアントは /var/run/docker.sock にアクセスします。docker.sock の所有者は root、
グループが docker のためです。以下の方法は、グループに所属するユーザが事実上の root 権限を持つため
セキュリティには十分配慮ください。
docker グループについて
33Introduction to Docker Basic Course
‣ Mac OS X 環境について
boot2docker をセットアップする
コマンドラインのクライアントを通して、
VirtualBox 仮想マシン上の docker に接続
‣ セットアップ
Docker for OS Xのインストーラーを使う
• https://github.com/boot2docker/osx-installer/releases/latest
Mac OS X で Docker を使うには?
34Introduction to Docker Basic Course
‣ Boot2Docker-1.7.0.pkg のダウンロード
https://github.com/boot2docker/osx-installer/releases/download/v1.7.0/Boot2Docker-1.7.0.pkg
‣ セットアップ
Boot2Docker-1.7.0.pkg を実行し、インストーラーの指示に従
Dockの「Boot2Docker Start」を実行
• docker run hello-world 等が実行可能に
• 仮想マシンへのログインは「boot2docker ssh」
• ターミナルからも docker コマンドが利用可能
Docker for Mac OS X セットアップ手順
35Introduction to Docker Basic Course
‣ Windows 環境について
boot2docker をセットアップする
コマンドラインのクライアントを通して、
VirtualBox 仮想マシン上の docker に接続
‣ セットアップ
Docker for Windows のインストーラーを使う
• https://github.com/boot2docker/windows-installer/releases/latest
Windows で Docker を使うには?
36Introduction to Docker Basic Course
‣ docker-install.exe のダウンロード
https://github.com/boot2docker/windows-installer/releases/download/v1.7.0/docker-install.exe
‣ セットアップ
docker-install.exe を実行し、インストーラーの指示に従って設定
デスクトップの「Boot2Docker Start」を実行
• docker run hello-world 等が実行可能に
• 仮想マシンへのログインは「boot2docker ssh」
Docker for Windows セットアップ手順
● ● ● ● ○ ○ ○ ○
38Introduction to Docker Basic Course
‣ Docker Hub でイメージ検索
‣ 公式レポジトリ
‣ イメージとタグ
‣ Docker Hub から
イメージを取得
概要:Docker イメージ
DockerHub
(公開レポジトリ)
ローカル
pull
イメージの
ダウンロード
push
イメージの
アップロード
コンテナのイメージ群
まずはじめに「イメージ」を
扱います。仮想マシン構成の
イメージのようなものです。
39Introduction to Docker Basic Course
‣ https://hub.docker.com/
Docker Hub
# docker search wordpress
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
wordpress The WordPress rich content management syst... 358 [OK]
tutum/wordpress Wordpress Docker image - listens in port 8... 44 [OK]
tutum/wordpress-stackable Wordpress Docker image - listens in port 8... 23 [OK]
centurylink/wordpress Wordpress image with MySQL removed. 7
.
.
.
ブラウザ上で公式イメージを
含む様々な検索が可能です。
40Introduction to Docker Basic Course
‣ 公式レポジトリは Docker 社の認証・精査済み
‣ 様々なベンダから提供されている
NGINX, WordPress, Ubuntu, Red Hat, Redis, MySQL, Mariadb 等々
‣ 実際は、様々なイメージの合成
ベースイメージ:Linux の各ディストリビューション公式のもの
その上に、プログラミング言語、開発ツール、アプリケーション
公式レポジトリ
OS部分だけでなく、アプリや
ミドルウェア、データベース
など100の公式イメージや、
45,000件のイメージが公開・
配布されています。
41Introduction to Docker Basic Course
‣ 「docker images」の実行で、コンテナ一覧表示
コンテナ実行時には、ローカルにイメージがあるかどうか確認。無ければレポジトリからダウンロード。
‣ イメージは「レポジトリ名:タグ」の形式で管理
タグ省略時は latest (最新)が標準で適用
• Ubuntu 省略時は「ubuntu:latest」
• タグ「14.04」を指定するイメージは「ubuntu:14.04」
• CentOS 省略時は「centos:latest」
• タグ「6」を指定するイメージは「centos:6」
ローカルのイメージの表示
docker images
イメージ一覧表示
42Introduction to Docker Basic Course
‣ 「docker pull」でイメージを取得
docker pull は、ローカルにイメージを保存
docker run 時、ローカルに無ければ自動取得
‣ 例:
CentOS 最新版「docker pull centos」=「centos:7」
CentOS 6 を指定するには「docker pull centos:6」
イメージの取得
docker pull
イメージの取得
● ● ● ● ● ○ ○ ○
44Introduction to Docker Basic Course
‣ コンテナを起動する docker run
‣ コンテナにアクセスする方法
‣ コンテナの起動と停止方法
‣ コンテナのログ確認方法
‣ コンテナを見つける方法
‣ コンテナの詳細
コンテナの起動と管理:概要
ここからは、実際のコンテナ
操作に入っていきます。
45Introduction to Docker Basic Course
‣ コンテナの一生
イメージからコンテナ作成
特定の処理するコンテナの起動
プロセスを停止するとコンテナは停止
コンテナを破棄
コンテナのライフサイクル
docker run
コンテナ実行
docker stop
コンテナ停止
docker pull
イメージの取得
docker run
コンテナ実行
docker stop
コンテナ停止
docker commit
コンテナイメージ化
docker pull
イメージの取得
docker build
イメージの自動構築
docker attach
コンテナにアタッチ
docker logs
標準出力の表示
docker inspect
詳細情報の表示
docker rm
イメージ削除
docker images
イメージ一覧表示
diff | history
差分・履歴表示
典型的なライフサイクルです。
47Introduction to Docker Basic Course
‣ docker run コマンド
指定したイメージを使ったコンテナを作成
コンテナの実行
‣ 構文
docker run [オプション] [イメージ名] [コマンド] [引数]
• 例:docker run ubuntu:14.04 echo “Hey World!”
• 例:docker run Ubuntu:14.04 ps ax
コンテナの作成と実行
docker run
コンテナ実行
48Introduction to Docker Basic Course
‣ docker ps
– CONTAINER ID … コンテナ ID と呼ばれる、コンテナ毎にユニーク
– IMAGE … コンテナ・イメージの名称
– COMMAND … コンテナ内で PID 1 で実行中のコマンド
– CREATED … 作成時間
– STATUS … ステータス
– PORT … ポートマッピングの状態
– NAMES … コンテナの名前
‣ docker ps –l
– 直近(latest)のコンテナの情報を表示
コンテナの確認
コンテナID確認用に使います。
こちらも非常に使います。
49Introduction to Docker Basic Course
‣ docker ps –a
– 停止しているコンテナを含めて全て(all)表示
‣ docker -ps –q
– ショートID のみで表示
コンテナの確認
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
d6a33b8c0147 amazon/amazon-ecs-agent:latest "/agent" 38 minutes ago Up 38 minutes
127.0.0.1:51678->51678/tcp ecs-agent
c89b318326c9 centos "ps ax" 4 minutes ago Exited (0) 4 minutes ago
kickass_banach
c0963adcc32e centos "echo 'hello world'" 4 minutes ago Exited (0) 4 minutes ago
distracted_sammet
50Introduction to Docker Basic Course
‣ 2つのオプション
-i 標準入力(standard input)を有効化
-t 疑似ターミナル(pseudo-terminal)
‣ bash を実行する
docker run –i –t ubuntu:latest bash
‣ ターミナルの終了
CTRL + P + Q を押す ※ exit はコンテナを終了するので注意
コンテナのターミナル
「-it」や「-ti」も使えます。
51Introduction to Docker Basic Course
‣ ロング ID とショート ID
ショート ID は省略されたもの
コンテナ1つ1つにユニーク
‣ docker ps –q
docker ps –l, -aq ,-lq
--filter でフィルタも可能です
コンテナID
$ docker ps -aq
9f0bf0d6ad01
コンテナを操作するとき、ロ
ングID全てを入力する必要は
ありません。ショートIDか、
それより短かな部分一致する
文字列でも構いません。
例:IDが9f0bf0d6ad01…であ
れば、「docker attach 9f」
のように指定できます(部分
一致の適用)。IDの重複がな
ければ「docker attach 9」
のような指定もできますが、
被ることが多いので、2・3
桁なら間違いなさそうです。
52Introduction to Docker Basic Course
‣ 「-d」フラグでデタッチ指定
docker run –d centos:7 ping 127.0.0.1 –c 50
‣ コマンドラインからのアタッチ
docker attach <コンテナID>
再度デタッチするには CTRL+Q+P なので注意!
デタッチ・モードで起動
「デタッチ」detach とは、
コンテナに接続していない
状態を指定します。一般的に
デーモンとしての起動時に
多く見られます。
デタッチされたコンテナには
アタッチすることができます。
docker attach
コンテナにアタッチ
53Introduction to Docker Basic Course
‣ ポート・マッピング
docker run –d –P tomcat:7
docker run –d –P nginx
‣ docker exec でコマンド実行
docker exec –i –t [コンテナID] bash
その他のコマンド
対象コンテナでデフォルトの
ポートマッピングが自動的に
適用されます。あるいは、
小文字の「-p」オプションで
指定します。
注意点としては、コンテナの
起動時に指定します。
54Introduction to Docker Basic Course
‣ 標準出力の内容をコンテナ外から確認
docker logs [コンテナID]
docker logs –f [コンテナID]
docker logs –tail 10 [コンテナID]
docker logs –tail -10 –f [コンテナID]
ログの参照
docker logs
標準出力の表示
ログファイルの確認ではなく、
あくまでコンテナ上での状況
確認に使います。
55Introduction to Docker Basic Course
‣ docker stop
SIGTERM シグナルで停止
‣ docker kill
SIGKILL シグナルで停止
‣ docker start –a [コンテナID]
コンテナの停止
docker stop
コンテナ停止
デタッチモード(-d)で動作中
コンテナの停止に使います。
56Introduction to Docker Basic Course
‣ docker inspect
JSON 形式の出力
‣ --format オプションでフィルタ
コンテナの詳細確認
$ docker inspect $CONTAINER
[
{
"Id":
"7bc2a8876520d19c08d2f71641eacaf643910ebac2cfa79870e4a7ef50dc6815",
"Created": "2015-07-06T03:43:46.882917122Z",
"Path": "ping",
"Args": [
"127.0.0.1",
"-c",
"120"
],
"State": {
"Running": false,
"Paused": false,
...
docker inspect
詳細情報の表示
57Introduction to Docker Basic Course
‣ docker ps –aq でコンテナID把握
‣ docker rm <コンテナID> で削除
‣ docker rm $(docker ps –aq)
exit のものだけを一括指定
• docker rm $(docker ps -aq --filter='status=exited')
コンテナの停止と削除
コンテナを停止後もコンテナ
が使用していたイメージは、
ファイルとして残り続けます。
不要な場合「docker rm」で
削除が必要です。
便利な一括削除コマンドも
紹介します。
docker rm
イメージ削除
● ● ● ● ● ● ○ ○
59Introduction to Docker Basic Course
‣ イメージの層について理解
‣ コンテナに変更を加えて保存
‣ Dockerfile でコンテナを作るには?
イメージの構築:概要
これまではコンテナを動かす
だけでした。内容を保存した
り配布するために、イメージ
に対する理解が必要です。
簡単に見ていきましょう。
60Introduction to Docker Basic Course
Docker イメージのレイヤー?
kernel
ベース・イメージ
(CentOS)
ベース・イメージ
(Ubuntu)
変更内容 A
変更内容 B
変更内容 C
書き込み可能領域
書き込み可能領域
レイヤーとは、それぞれの層
にあたるコンテナイメージで
す。基本にディストリビュー
ション毎のイメージがあり、
変更が加えられたものが、
DockerHubで配布されていま
す。ここまで読み込み専用で、
変更を加えることはできませ
ん。
コンテナ起動時は、その上に、
書き込み可能な領域を作成し
ます。この変更内容は保存
(commit)しないと破棄される
ものです。
61Introduction to Docker Basic Course
‣ 既存のイメージに対する変更をコミットする
開発段階で多く用いられると思います。
‣ Dockerfile から作成する
別のマシン環境で環境を再現するときに便利な方法です。
‣ tar 形式のファイルからイメージを読み込む
環境移行時や、バックアップしているイメージの再利用に活用します。
イメージを構築するには
目的により、この3つの方法
を使い分けています。方法は
違いますが、イメージ作成と
いう意味では、共通です。
62Introduction to Docker Basic Course
‣ docker diff
‣ docker history
差分と履歴の確認
$ docker diff <コンテナID>
A /hello.txt
C /root
A /root/.bash_history
$ docker history $IMEGEID
IMAGE CREATED CREATED BY SIZE
COMMENT
1b07ddefe341 2 minutes ago bash 66 B
6d4946999d4f 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
9fd3c8c9af32 3 weeks ago /bin/sh -c sed -i 's/^#¥s*¥(deb.*universe¥)$/ 1.895 kB
435050075b3f 3 weeks ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 194.5 kB
428b411c28f0 3 weeks ago /bin/sh -c #(nop) ADD file:b3447f4503091bb6bb 188.1 MB
diff | history
差分・履歴表示
63Introduction to Docker Basic Course
‣ docker commit コマンド
docker commit [オプション] [コンテナID] [レポジトリ名:タグ]
コミットして変更内容を確定
$ docker commit $CONTAINER ecsdocker/myapp:1.0
1b07ddefe341abdae8f497a4dea24b2fef46a2a32621a0998fb0e7e8c2fbf666
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ecsdocker/myapp 1.0 1b07ddefe341 17 seconds ago 188.3 M
64Introduction to Docker Basic Course
‣ ルート(公式レポジトリ)
Ubuntu:14.04
nginx
‣ ユーザやグループ
zembutsu/testapp
‣ ローカルのレジストリ
registry.zem.jp:5000/zem-image
レポジトリ(イメージ)の名前空間
3つの使い方があります。
複数の利用者が居る場合は、
名前で分けるようにした方が
混同しなくてオススメです。
65Introduction to Docker Basic Course
‣ Dockerfile の役割
どのようなイメージにするか指示
• どのベース・イメージを使うのか?
• 何のプログラムをインストールするのか?
• どのようなコマンドを実行するのか
‣ docker build コマンドで構築
docker build –t <レポジトリ:タグ> <Dockerfileのパス>
Dockerfile
設定を自動的に行うための
命令をファイルに記述します。
内容はテキスト形式ファイル
なのでエディタで編集します。
66Introduction to Docker Basic Course
‣ FROM
ベースイメージの指定
• 例:FROM Ubuntu
• 例:FROM nginx
‣ RUN
コマンドの実行
• 例:RUN yum –y install nginx
基本命令
FORMは必須です。
67Introduction to Docker Basic Course
‣ CMD または ENTRYPOINTで実行コマンド指定
ENTRYPOINT使用時は、
• CMDで指定した項目がオプション適用
• コンテナ実行時にオプションがあれば、CMD指定よりも優先
‣ ADD でファイル/URL/ZIP からコンテナへ追加
‣ MAINTAINER で管理者の情報を追記
様々な命令
● ● ● ● ● ● ● ○
69Introduction to Docker Basic Course
‣ -p オプションで、ポートマッピング
例:-p 8080:80
• ホスト側の port 8080 をコンテナの port 80 へ
‣ -P (大文字) はデフォルト
ポートの指定
$ docker run -d -p 80:80 ecsdocker/web
010a5fbd22acbfab818541e3f07055b5338f9fa010ee9a26899423dd5944938c
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
010a5fbd22ac ecsdocker/web "nginx -g 'daemon of 3 seconds ago Up 2
seconds 0.0.0.0:80->80/tcp, 443/tcp determined_albattani
70Introduction to Docker Basic Course
‣ -v オプションは、領域をホストとコンテナで共有
例:-v /home/web:/usr/share/nginx/html
• ホスト側の「/home/web」をコンテナの「/usr/share/nginx/html」へ
ボリュームの設定
71Introduction to Docker Basic Course
Dockerfileの例
FROM ubuntu:14.04
RUN apt-get install -y wget
CMD /usr/bin/wget
FROM nginx
ADD ./contents /usr/share/nginx/html
どれもシンプルです。
● ● ● ● ● ● ● ●
73
Dockerと基本コマンド
docker run
コンテナ実行
docker stop
コンテナ停止
docker commit
コンテナイメージ化
docker pull
イメージの取得
docker build
イメージの自動構築
docker attach
コンテナにアタッチ
docker logs
標準出力の表示
docker inspect
詳細情報の表示
docker rm
イメージ削除
docker images
イメージ一覧表示
diff | history
差分・履歴表示
● ● ● ● ● ● ● ● + Extra
社外開発環境 本番環境ステージング環境
社内共有開発環境
個人開発環境
社内テスト環境
社外開発環境 本番環境ステージング環境
CI/CD Docker レジストリ
Docker動作環境(docker machine)
先ほどの図なのですが、
見なれないアイコンが
増えていませんか?
Dockerとツール群 (https://www.docker.com/products)
Docker Engine
Dockerコンテナの起動と実行
Docker Swarm
クラスタリングとスケジューリング
Docker Compose
複数のアプリケーションコンテナを定義
Docker Machine
共通したコンテナ実行環境
Kitematic
デスクトップ向け GUi
Docker Registry
コンテナの保管庫
Docker Hub Enterprise
仲間が増えました!
┌──────────────────────┐
│ドッカースウォームが あらわれた! │
│ドッカーコンポーズが あらわれた! │
│コマンド? │
│ ∨ │
└━━━━━━━━━━━━━━━━━━━━━━┘
┌────┐
│ていじで │
│かえろう │
└━━━━┘
┌──────コマンド─────┐
│ たたかう じゅもん │
│ にげる げんじつとうひ │
└━━━━━━━━━━━━━━━┘
>
やったね!
78Introduction to Docker Basic Course
‣ Docker 動作環境の自動作成
仮想サーバの起動と Docker のプロビジョニングを自動的に行う
‣ コマンドラインで使うツール
docker-machine –d <ドライバ> [option] マシン名 …のように、コマンドで操作
‣ Linux, Windows, Mac OS X に対応
‣ VirtualBox だけでなく、多くのクラウドに対応
Amazon Web Services, DigitalOcean, exoscale, Google Compute Engine, SoftLayer, Azure, Hyper-V,
OpenStack, RackSpace, VMwareFusion, VMwarea vCloud Air, VMware vSphere, SSH 可能なリモートホスト
Docker Machine
まだBETA版なので、本番での
利用は推奨されていません。
従来はboot2dockerが必要で
したが・・・
リモート・ローカル一括管理。
もちろんAmazon EC2にも対応
しています。任意のリージョ
ンで、任意のホストを自動的
に起動し、作業が終われば停
止することもコマンド1つで
簡単に行えます。
リモートも、ローカルも、
複数の仮想マシン環境を
自由に切り替えられるように
なりました(v0.3.0~)。
scpを使った転送も可能です。
Docker Machine上の名前をつ
かってやりとりできます。
※正確には、データはすべて
docker-machineコマンド実行
環境を経由します(v0.3.0+)。
84Introduction to Docker Basic Course
Docker Swarm
‣ Docker クラスタ管理ツール
Docker ホストの集まりを作成したり、アクセスできるようにするツールで、API を持つ
‣ コマンドラインで操作
docker-machine で環境を作り、docker run swarm create
‣ クラスタ形成
ディスカバリ(マネージャへの登録に、consul や etcd にも対応)
フィルタ(コンテナを配置する条件の設定は、Docker を抽象化)
ストラテジ(どこのノードにコンテナを自動配置するか方針設定)
まだBETA版なので、本番での
利用は推奨されていません。
85Introduction to Docker Basic Course
Docker Compose
‣ 複数コンテナのアプリケーション自動設定
Dockerfile を複数のコンテナに拡張したようなイメージ
‣ コマンドラインで操作
docker-compose docker-compose.yml
‣ Linux, Windows, Mac OS X に対応
‣ 構成情報を YAML 形式のファイルで定義
まだBETA版なので、本番での
利用は推奨されていません。
86
Docker Engine Docker Machine Docker Swarm Docker Compose
基礎編・おわり
最後までありがとうございました
今回は「基礎編」でした。
まだまだもちっと続くのですが、今回は時間的にこれまで。
続きは、またいずれか、どっかで
87
‣ Docker ドキュメント
http://docs.docker.com/
‣ Docker ドキュメントの日本語訳(仮)
http://qiita.com/zembutsu/items/444396b76e0db2c04c2b
(まとめて、どっかに整理するつもりです。)
参考情報

More Related Content

Docker入門 - 基礎編 いまから始めるDocker管理

  • 1. Docker入門-基礎編 いまから始めるDocker管理 v1.01 JAWS-UG CLI専門支部 #23 - ECS 入門 2015年7月6日(月) @zembutsu Technology Evangelist; Creationline, Inc. Introduction to docker, basic management and operations 背景画像CREDIT:スフィア / PIXTA(ピクスタ)
  • 2. 2 このスライドで得られる知識 Docker入門-基礎編 いまから始めるDocker ‣ Docker概要と環境構築 なぜ Docker なのか? 速さと利便性。そして、Docker はコンテナではなくプラットフォーム。 ‣ Dockerの基本操作コマンドの理解 コンテナのイメージ管理、起動、情報取得、ログ参照、Dockerfile、ボリューム操作 ‣ 捕捉:Dockerとコンテナを取り巻く状況 DockerCon 2015 前後、Dockerのオーケストレーション Docker Machine, Swarm, Compose This slide is an introduction of the basic concept and command of Docker. Because the main purpose uses Docker as a tool. This is a Japanese document for community of the JAWS-UG CLI Branch held in Tokyo on July 6. Are you interested in this English version? Please comment me or mention @zembutsu . Thank you.
  • 3. 3 このスライドで扱う基本コマンド Docker を使い始めるための基本を、詳しく解説していきます docker images イメージ一覧表示 docker pull イメージの取得 docker run コンテナ実行 docker ps 実行・停止中の一覧 docker attach コンテナにアタッチ docker logs 標準出力の表示 docker stop コンテナ停止 docker inspect 詳細情報の表示 docker rm イメージ削除 diff | history 差分・履歴表示 docker commit コンテナイメージ化 docker build イメージの自動構築 さほど多くありません。
  • 4. 4 docker images … ローカルのイメージ確認 docker pull <レポジトリ:タグ> 例:docker pull centos:6 docker run <オプション> <イメージ> [コマンド] 例:docker run -it ubuntu:14.04 "Hey World" docker ps or docker ps –a or docker ps -aq docker run -d <レポジトリ:タグ> docker attach <ID> --> デタッチはCtrl + P + Q docker logs <ID> 例:docker logs --tail -f <ID> docker stop|kill docker inspect <ID> docker rm <ID> で削除 例:docker rm $(docker ps -aq --filter='status=exited') docker diff <ID> docker history <ID> doccker commit <オプション> <ID> <レポジトリ:タグ> dokcer build . で Dockerfile ( FROM, RUN, ADD, CMD, ENTRYPOINT 等 ) を使った自動構築 docker run -p <ホストPort:コンテナPort> 例: docker run -p 8080:80 nginx docker run -v <ホスト側パス:コンテナ内パス> 例:docker run -v /data:/var/www/html 基本コマンド使用例
  • 5. 5 スライドの目次 Index ‣ 1. ハンズオン概要 ‣ 2. なぜDockerなのか? ‣ 3. Dockerの環境構築 ‣ 4. Dockerイメージ ‣ 5. コンテナの起動と管理 ‣ 6. イメージの構築 ‣ 7. ネットワークとボリューム ‣ 8. 番外編の捕捉 - Docker Machine on EC2, Swarm, Compose これからDockerを知る方の為の 概要から、実際の環境構築、 そしてコンテナやイメージ操作 を理解し、最後はWebサーバの Nginxが動く環境を作ります。 ※内容はAmazonECSに依存しておらず、 純粋にDocker導入という位置づけです。
  • 6. 6 本編前に自己紹介 ‣ @zembutsu a.k.a. 前佛雅人 - Technology Evangelist; Creationline, Inc. – 1.5 yrs - Data Center Operations Engineer – 15+ yrs 興味関心:運用監視自動化、趣味でOSSやクラウド系の検証・情報発信 - SlideShare http://slideshare.net/zembutsu - Blog http://pocketstudio.jp/log3 書籍・記事 - Serf/Consulで管理を自動化! (Gihyo.jp) http://gihyo.jp/admin/feature/01/serf-consul - HashiCorpのツール群からみる インフラ構築運用の未来 (Think IT) http://thinkit.co.jp/book/2015/03/05/5700 Why am I here? +MasahitoZembutsu ISBN-10: 4774174416 ISBN-10: 4844338145 ISBN-10: 4798139785 このスライドは7月6日開催の JAWS-UG CLI支部#23における 発表用資料です。参加者の皆 さん、お越しいただき&登壇 の機会ありがとうございます。
  • 7. ※ イ メ ー ジ で す 。 ※ 効 用 ・ 効 果 に は 個 人 差 が あ り ま す 。 最近考えていること。
  • 8. http://qiita.com/zembutsu Blog http://pocketstudio.jp/log3 http://infrapre.connpass.com/event/16713/ エンジニアのためのプレゼン技術研究会 次回、第3回は 7/11 #infrapre 「私だけが知っている、 エンジニアのためのライフハック」 全員参加型、初心者歓迎!! 情報の発信はQiitaやblog。 みんなで発表を練習しよう というコミュニティも主催 させて頂いています。 ご興味ありましたら、どうぞ。
  • 9. ● ○ ○ ○ ○ ○ ○ ○
  • 10. 10Introduction to Docker Basic Course ‣ 内容 http://qiita.com/zembutsu/items/891c7ffd2c36097400b1 コンテナ・イメージの確認と取得 コンテナの起動と停止 コンテナの詳細情報を確認 不要なコンテナの削除や変更差分 Dockerfile で wget・ping のコンテナを構築 Dockerfile で Nginx のコンテナを構築 ハンズオン概要 手順はQiitaで公開中です。 約15~30分程度の簡単なもの なので、この資料を読むだけ ではなく、ぜひ手を動かして 体感して頂ければと思います。
  • 11. 11Introduction to Docker Basic Course ‣ 番外編 Docker Machine を使った EC2 上の Docker 環境構築 もくもく自習 おまけ ハンズオン概要 既にDockerをご存知の方への 追加メニューも用意しました。
  • 12. ● ● ○ ○ ○ ○ ○ ○
  • 13. OpenStack CloudStack Mackerel Amazon Web Services Google Cloud Platform Windows Azure SoftLayer Niftyクラウド さくらのクラウド Salesforce Heroku DigitalOcean LinodeさくらのVPS VMware Circle CI Jenkins GitHub Slack NewRelic Datadog IaaS パブリック・クラウド 日本国内 パブリック クラウド VPS Monitoring PagerDuty Operations CI PaaS Atlas プライベート クラウド 開発環境 SaaS Cloud n Docker ( Linux Containers) クラウドを取り巻く業界俯瞰図 Dockerの登場は最近ですが、
  • 14. OpenStack CloudStack Mackerel Amazon Web Services Google Cloud Platform Windows Azure SoftLayer Niftyクラウド さくらのクラウド Salesforce Heroku DigitalOcean LinodeさくらのVPS VMware Circle CI Jenkins GitHub Slack NewRelic Datadog IaaS パブリック・クラウド 日本国内 パブリック クラウド VPS Monitoring PagerDuty Operations CI PaaS Atlas プライベート クラウド 開発環境 SaaS Cloud n Docker ( Linux Containers) クラウドを取り巻く業界俯瞰図 気がつけば、色々な領域を 巻き込みつつあります。 なぜでしょうか?
  • 15. 物理時代 仮想化・クラウド時代 コンテナ時代 機 材 発 注 機 材 納 品 設 置 機 器 設 定 事 前 設 計 ク リ ッ ク 見 積 も り O S 設 定 環 境 構 築 試 験 利 用 開 始 試 験 開 発 試 験 運 用 利 用 開 始 … … 事 前 設 計 ク リ ッ ク 試 験 利 用 開 始 … 事 前 設 計 ク リ ッ ク 試 験 利 用 開 始 … 開 発 段 階 検 証 段 階 本 番 段 階 すべてを迅速に、 一貫した環境で行いやすい← New 物理時代は調達から運用まで、 とにかく時間がかかりました。 仮想マシンの普及で、迅速に 使える環境を手に入れました。 しかし、環境によって動く・ 動かないという問題が起こり はじめます。そこでコンテナ。
  • 16. 社外開発環境 本番環境ステージング環境 社内共有開発環境 個人開発環境 社内テスト環境 社外開発環境 本番環境ステージング環境 CI/CD Docker レジストリ Docker動作環境(docker machine) 開発や運用段階によって、別々のインフラを 用意することも→Dockerで全て共通・抽象化。
  • 17. 17Introduction to Docker Basic Course ‣ コンテナ化とは、ホストOS上のKernel機能を使い 複数の root ファイルシステムを実行できる。 各々の root ファイルシステムの事を「コンテナ」( container ) と呼称する。 これ何て chroot?と言われる所以。 ‣ 各々のコンテナは各々のリソースを持つ プロセス(計算資源) メモリ デバイス ネットワーク コンテナ?
  • 18. 18Introduction to Docker Basic Course ‣ 利点 開発者にとっての効率の良さ すぐに利用できる点と、バージョン・コントロール、CI/CDの自動化。 アプリケーションのポータビリティ 開発をはじめ、テストやリリースに至るまで、コンテナを通して一環したインフラ環境を利用できる。 ‣ ポイント Dockerそのものが何かするのではない(仮想化・クラウドと同じ) – Dockerは、あくまでも、利用者の利便性を向上する道具 (プラットフォームの役割) Dockerはインフラを抽象化--developer’s efficiency and application portability
  • 19. 物理マシン 物理マシン 物理マシン OS OS OS HyperVisor HyperVisor HyperVisor VM VM VM VM VM VM Guest OS Guest OS Guest OS Guest OS Guest OS Guest OS 物理マシン 仮想マシン クラウド OS OS OS Docker Engine Docker Engine Docker Engine App App App App App App App App App App 仮想化・クラウド Dockerのコンテナ管理 なぜコンテナ管理用のプラットフォームが必要なの?? Dockerは管理用のシステム。 これまでと比較してみます。
  • 20. 物理マシン 物理マシン 物理マシン OS OS OS HyperVisor HyperVisor HyperVisor VM VM VM VM VM VM Guest OS Guest OS Guest OS Guest OS Guest OS Guest OS 物理マシン 仮想マシン クラウド OS OS OS Docker Engine Docker Engine Docker Engine GUI CLI API Docker Cluster 管理レイヤ ( ECS, Docker Swarm, rkt, Rancher …etc ) App App App App App App App App App App まだクラスタ管理の部分は 機能として足りていません。 現状の大きな課題です。 仮想化・クラウド Dockerのコンテナ管理
  • 21. 物理マシン 物理マシン 物理マシン OS OS OS HyperVisor HyperVisor HyperVisor VM VM VM VM VM VM Guest OS Guest OS Guest OS Guest OS Guest OS Guest OS App App App App 物理マシン 仮想マシン クラウド OS OS OS Docker Engine Docker Engine Docker Engine App App App App App App GUI CLI API Docker Cluster 管理レイヤ ( ECS, Docker Swarm, rkt, Rancher …etc ) オーケストレーション サービス検出・クラスタ管理 仮想化・クラウド Dockerのコンテナ管理 オーケストレーション技術で インフラ層をまとめて管理・ 抽象化できるかも・・・?
  • 22. APCERA Cloud Foundry shippable Google Container Engine Amazon EC2 Container Service IBM Containers on Bluemix コンテナを取り巻く業界俯瞰図 開発環境 Build / Deploy 運用自動化 Orchestration kitematic Etcd SkyDNS Service Discovery Docker fleet flannel rkt CoreOS Tectonic Mesosphere Apache Auora Marathon Cluster Management Kubernetes 構成管理 Docker Swarm Docker Machine Docker Compose Docker特化OS PaaS Networking コンテナ管理用プラットフォーム コンテナ界隈だけでも様々な プレイヤーが入り乱れ中。
  • 23. パブリック・クラウド陣営 Google Container Engine Amazon EC2 Container Service IBM Containers on Bluemix Google Kubernetes Tectonic CoreOS 商用サポート/エンタープライズ 管理・効率化 Docker ネイティブサポート 最小環境 Docker 競合 オープンソース コミュニティ プラットフォーム周辺でも わりとカオスでしたが…
  • 24. 24 DockerCon 2015 ‣ Docker, Inc.主催 サンフランシスコ 6月22日・23日の2日間 セッション、ハンズオン、 トレーニング、ブース出展 http://www.dockercon.com/ DockerConの発表により、 状況が様変わりし始めます。
  • 25. Google Kubernetes CoreOS× libcontainer The Open Container Project (OCP) runC Orchestration PROJECT ORCA appcは独自に継続 Linux Foundation 事務局として協力 Google Container Engine IBM Containers on Bluemix OS LayerCloud Providers Amazon ECS ( EC2 Container Service ) 協力 協力 協力 割と整理されつつあります。 Dockerいつ使うの? 今でしょ!的な…
  • 26. ● ● ● ○ ○ ○ ○ ○
  • 27. 27Introduction to Docker Basic Course ‣ 方法1:インストール用の汎用スクリプトを使用 wget -qO- https://get.docker.com/ | sh service docker start ※ Ubuntu や Debian などは、こちらで Docker 社が提供する最新安定版をダウンロード可能 ※ RHEL/CentOS の場合は、後述の個別パッケージをセットアップ ‣ 方法2:各ディストリビューション向けパッケージ ‣ 方法3:boot2docker を使う ※ Windows と Mac OS X は、VirtualBox 上の仮想サーバを使用 Dockerのセットアップ方法 その時点の最新版が使えます。 ディストリビューションや バージョンで、パッケージの 名前が異なる場合があります。
  • 28. 28Introduction to Docker Basic Course ‣ Linux Linux Kernel の機能を使うので、 インストールスクリプトかパッケージをセットアップすることで すぐに使えます。 ‣ Windows・Mac OS boot2docker(VirtualBox)で Linux 環境を仮想マシン上に作り、 そこに Docker の動く環境をセットアップします。 クライアントは、PC上のコマンドライン(ターミナル)で動作します。 OSごとに違いが?
  • 29. 29Introduction to Docker Basic Course ‣ 方法1:Docker版 v1.7(最新版)docker-engine sudo yum update curl -O -sSL https://get.docker.com/rpm/1.7.0/centos-6/RPMS/x86_64/docker- engine-1.7.0-1.el6.x86_64.rpm sudo yum localinstall --nogpgcheck docker-engine-1.7.0-1.el6.x86_64.rpm sudo service docker start ‣ 方法2: EPEL版 v1.6 パッケージ doker-io curl -s https://get.docker.com | sudo sh ※参考 http://docs.docker.com/installation/centos/ RHEL/CentOS 7
  • 30. 30Introduction to Docker Basic Course ‣ 動作条件 RHEL/CentOS 6.5 以上かつ、Linux kernel 2.6.32-431 以上 ※ Kernel のバグに起因する問題がある可能性のため、CentOS 7 の利用が推奨されています。 ‣ 手順 ( EPEL 版 v1.5 ) sudo yum install epel-release sudo yum install docker-io sudo service docker start ※参考 http://docs.docker.com/installation/centos/ RHEL/CentOS 6.5
  • 31. 31Introduction to Docker Basic Course ‣ sudo docker version ‣ sudo 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. (Assuming it was not already locally available.) 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 For more examples and ideas, visit: http://docs.docker.com/userguide/ 「hello-world」コンテナは テストで使われるものです。
  • 32. 32Introduction to Docker Basic Course ‣ sudo を使わず docker コマンドを使う設定 docker グループに対象ユーザを追加する – $ sudo usermod –aG docker <ユーザ名> ※注意:docker クライアントは /var/run/docker.sock にアクセスします。docker.sock の所有者は root、 グループが docker のためです。以下の方法は、グループに所属するユーザが事実上の root 権限を持つため セキュリティには十分配慮ください。 docker グループについて
  • 33. 33Introduction to Docker Basic Course ‣ Mac OS X 環境について boot2docker をセットアップする コマンドラインのクライアントを通して、 VirtualBox 仮想マシン上の docker に接続 ‣ セットアップ Docker for OS Xのインストーラーを使う • https://github.com/boot2docker/osx-installer/releases/latest Mac OS X で Docker を使うには?
  • 34. 34Introduction to Docker Basic Course ‣ Boot2Docker-1.7.0.pkg のダウンロード https://github.com/boot2docker/osx-installer/releases/download/v1.7.0/Boot2Docker-1.7.0.pkg ‣ セットアップ Boot2Docker-1.7.0.pkg を実行し、インストーラーの指示に従 Dockの「Boot2Docker Start」を実行 • docker run hello-world 等が実行可能に • 仮想マシンへのログインは「boot2docker ssh」 • ターミナルからも docker コマンドが利用可能 Docker for Mac OS X セットアップ手順
  • 35. 35Introduction to Docker Basic Course ‣ Windows 環境について boot2docker をセットアップする コマンドラインのクライアントを通して、 VirtualBox 仮想マシン上の docker に接続 ‣ セットアップ Docker for Windows のインストーラーを使う • https://github.com/boot2docker/windows-installer/releases/latest Windows で Docker を使うには?
  • 36. 36Introduction to Docker Basic Course ‣ docker-install.exe のダウンロード https://github.com/boot2docker/windows-installer/releases/download/v1.7.0/docker-install.exe ‣ セットアップ docker-install.exe を実行し、インストーラーの指示に従って設定 デスクトップの「Boot2Docker Start」を実行 • docker run hello-world 等が実行可能に • 仮想マシンへのログインは「boot2docker ssh」 Docker for Windows セットアップ手順
  • 37. ● ● ● ● ○ ○ ○ ○
  • 38. 38Introduction to Docker Basic Course ‣ Docker Hub でイメージ検索 ‣ 公式レポジトリ ‣ イメージとタグ ‣ Docker Hub から イメージを取得 概要:Docker イメージ DockerHub (公開レポジトリ) ローカル pull イメージの ダウンロード push イメージの アップロード コンテナのイメージ群 まずはじめに「イメージ」を 扱います。仮想マシン構成の イメージのようなものです。
  • 39. 39Introduction to Docker Basic Course ‣ https://hub.docker.com/ Docker Hub # docker search wordpress NAME DESCRIPTION STARS OFFICIAL AUTOMATED wordpress The WordPress rich content management syst... 358 [OK] tutum/wordpress Wordpress Docker image - listens in port 8... 44 [OK] tutum/wordpress-stackable Wordpress Docker image - listens in port 8... 23 [OK] centurylink/wordpress Wordpress image with MySQL removed. 7 . . . ブラウザ上で公式イメージを 含む様々な検索が可能です。
  • 40. 40Introduction to Docker Basic Course ‣ 公式レポジトリは Docker 社の認証・精査済み ‣ 様々なベンダから提供されている NGINX, WordPress, Ubuntu, Red Hat, Redis, MySQL, Mariadb 等々 ‣ 実際は、様々なイメージの合成 ベースイメージ:Linux の各ディストリビューション公式のもの その上に、プログラミング言語、開発ツール、アプリケーション 公式レポジトリ OS部分だけでなく、アプリや ミドルウェア、データベース など100の公式イメージや、 45,000件のイメージが公開・ 配布されています。
  • 41. 41Introduction to Docker Basic Course ‣ 「docker images」の実行で、コンテナ一覧表示 コンテナ実行時には、ローカルにイメージがあるかどうか確認。無ければレポジトリからダウンロード。 ‣ イメージは「レポジトリ名:タグ」の形式で管理 タグ省略時は latest (最新)が標準で適用 • Ubuntu 省略時は「ubuntu:latest」 • タグ「14.04」を指定するイメージは「ubuntu:14.04」 • CentOS 省略時は「centos:latest」 • タグ「6」を指定するイメージは「centos:6」 ローカルのイメージの表示 docker images イメージ一覧表示
  • 42. 42Introduction to Docker Basic Course ‣ 「docker pull」でイメージを取得 docker pull は、ローカルにイメージを保存 docker run 時、ローカルに無ければ自動取得 ‣ 例: CentOS 最新版「docker pull centos」=「centos:7」 CentOS 6 を指定するには「docker pull centos:6」 イメージの取得 docker pull イメージの取得
  • 43. ● ● ● ● ● ○ ○ ○
  • 44. 44Introduction to Docker Basic Course ‣ コンテナを起動する docker run ‣ コンテナにアクセスする方法 ‣ コンテナの起動と停止方法 ‣ コンテナのログ確認方法 ‣ コンテナを見つける方法 ‣ コンテナの詳細 コンテナの起動と管理:概要 ここからは、実際のコンテナ 操作に入っていきます。
  • 45. 45Introduction to Docker Basic Course ‣ コンテナの一生 イメージからコンテナ作成 特定の処理するコンテナの起動 プロセスを停止するとコンテナは停止 コンテナを破棄 コンテナのライフサイクル docker run コンテナ実行 docker stop コンテナ停止 docker pull イメージの取得
  • 46. docker run コンテナ実行 docker stop コンテナ停止 docker commit コンテナイメージ化 docker pull イメージの取得 docker build イメージの自動構築 docker attach コンテナにアタッチ docker logs 標準出力の表示 docker inspect 詳細情報の表示 docker rm イメージ削除 docker images イメージ一覧表示 diff | history 差分・履歴表示 典型的なライフサイクルです。
  • 47. 47Introduction to Docker Basic Course ‣ docker run コマンド 指定したイメージを使ったコンテナを作成 コンテナの実行 ‣ 構文 docker run [オプション] [イメージ名] [コマンド] [引数] • 例:docker run ubuntu:14.04 echo “Hey World!” • 例:docker run Ubuntu:14.04 ps ax コンテナの作成と実行 docker run コンテナ実行
  • 48. 48Introduction to Docker Basic Course ‣ docker ps – CONTAINER ID … コンテナ ID と呼ばれる、コンテナ毎にユニーク – IMAGE … コンテナ・イメージの名称 – COMMAND … コンテナ内で PID 1 で実行中のコマンド – CREATED … 作成時間 – STATUS … ステータス – PORT … ポートマッピングの状態 – NAMES … コンテナの名前 ‣ docker ps –l – 直近(latest)のコンテナの情報を表示 コンテナの確認 コンテナID確認用に使います。 こちらも非常に使います。
  • 49. 49Introduction to Docker Basic Course ‣ docker ps –a – 停止しているコンテナを含めて全て(all)表示 ‣ docker -ps –q – ショートID のみで表示 コンテナの確認 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d6a33b8c0147 amazon/amazon-ecs-agent:latest "/agent" 38 minutes ago Up 38 minutes 127.0.0.1:51678->51678/tcp ecs-agent c89b318326c9 centos "ps ax" 4 minutes ago Exited (0) 4 minutes ago kickass_banach c0963adcc32e centos "echo 'hello world'" 4 minutes ago Exited (0) 4 minutes ago distracted_sammet
  • 50. 50Introduction to Docker Basic Course ‣ 2つのオプション -i 標準入力(standard input)を有効化 -t 疑似ターミナル(pseudo-terminal) ‣ bash を実行する docker run –i –t ubuntu:latest bash ‣ ターミナルの終了 CTRL + P + Q を押す ※ exit はコンテナを終了するので注意 コンテナのターミナル 「-it」や「-ti」も使えます。
  • 51. 51Introduction to Docker Basic Course ‣ ロング ID とショート ID ショート ID は省略されたもの コンテナ1つ1つにユニーク ‣ docker ps –q docker ps –l, -aq ,-lq --filter でフィルタも可能です コンテナID $ docker ps -aq 9f0bf0d6ad01 コンテナを操作するとき、ロ ングID全てを入力する必要は ありません。ショートIDか、 それより短かな部分一致する 文字列でも構いません。 例:IDが9f0bf0d6ad01…であ れば、「docker attach 9f」 のように指定できます(部分 一致の適用)。IDの重複がな ければ「docker attach 9」 のような指定もできますが、 被ることが多いので、2・3 桁なら間違いなさそうです。
  • 52. 52Introduction to Docker Basic Course ‣ 「-d」フラグでデタッチ指定 docker run –d centos:7 ping 127.0.0.1 –c 50 ‣ コマンドラインからのアタッチ docker attach <コンテナID> 再度デタッチするには CTRL+Q+P なので注意! デタッチ・モードで起動 「デタッチ」detach とは、 コンテナに接続していない 状態を指定します。一般的に デーモンとしての起動時に 多く見られます。 デタッチされたコンテナには アタッチすることができます。 docker attach コンテナにアタッチ
  • 53. 53Introduction to Docker Basic Course ‣ ポート・マッピング docker run –d –P tomcat:7 docker run –d –P nginx ‣ docker exec でコマンド実行 docker exec –i –t [コンテナID] bash その他のコマンド 対象コンテナでデフォルトの ポートマッピングが自動的に 適用されます。あるいは、 小文字の「-p」オプションで 指定します。 注意点としては、コンテナの 起動時に指定します。
  • 54. 54Introduction to Docker Basic Course ‣ 標準出力の内容をコンテナ外から確認 docker logs [コンテナID] docker logs –f [コンテナID] docker logs –tail 10 [コンテナID] docker logs –tail -10 –f [コンテナID] ログの参照 docker logs 標準出力の表示 ログファイルの確認ではなく、 あくまでコンテナ上での状況 確認に使います。
  • 55. 55Introduction to Docker Basic Course ‣ docker stop SIGTERM シグナルで停止 ‣ docker kill SIGKILL シグナルで停止 ‣ docker start –a [コンテナID] コンテナの停止 docker stop コンテナ停止 デタッチモード(-d)で動作中 コンテナの停止に使います。
  • 56. 56Introduction to Docker Basic Course ‣ docker inspect JSON 形式の出力 ‣ --format オプションでフィルタ コンテナの詳細確認 $ docker inspect $CONTAINER [ { "Id": "7bc2a8876520d19c08d2f71641eacaf643910ebac2cfa79870e4a7ef50dc6815", "Created": "2015-07-06T03:43:46.882917122Z", "Path": "ping", "Args": [ "127.0.0.1", "-c", "120" ], "State": { "Running": false, "Paused": false, ... docker inspect 詳細情報の表示
  • 57. 57Introduction to Docker Basic Course ‣ docker ps –aq でコンテナID把握 ‣ docker rm <コンテナID> で削除 ‣ docker rm $(docker ps –aq) exit のものだけを一括指定 • docker rm $(docker ps -aq --filter='status=exited') コンテナの停止と削除 コンテナを停止後もコンテナ が使用していたイメージは、 ファイルとして残り続けます。 不要な場合「docker rm」で 削除が必要です。 便利な一括削除コマンドも 紹介します。 docker rm イメージ削除
  • 58. ● ● ● ● ● ● ○ ○
  • 59. 59Introduction to Docker Basic Course ‣ イメージの層について理解 ‣ コンテナに変更を加えて保存 ‣ Dockerfile でコンテナを作るには? イメージの構築:概要 これまではコンテナを動かす だけでした。内容を保存した り配布するために、イメージ に対する理解が必要です。 簡単に見ていきましょう。
  • 60. 60Introduction to Docker Basic Course Docker イメージのレイヤー? kernel ベース・イメージ (CentOS) ベース・イメージ (Ubuntu) 変更内容 A 変更内容 B 変更内容 C 書き込み可能領域 書き込み可能領域 レイヤーとは、それぞれの層 にあたるコンテナイメージで す。基本にディストリビュー ション毎のイメージがあり、 変更が加えられたものが、 DockerHubで配布されていま す。ここまで読み込み専用で、 変更を加えることはできませ ん。 コンテナ起動時は、その上に、 書き込み可能な領域を作成し ます。この変更内容は保存 (commit)しないと破棄される ものです。
  • 61. 61Introduction to Docker Basic Course ‣ 既存のイメージに対する変更をコミットする 開発段階で多く用いられると思います。 ‣ Dockerfile から作成する 別のマシン環境で環境を再現するときに便利な方法です。 ‣ tar 形式のファイルからイメージを読み込む 環境移行時や、バックアップしているイメージの再利用に活用します。 イメージを構築するには 目的により、この3つの方法 を使い分けています。方法は 違いますが、イメージ作成と いう意味では、共通です。
  • 62. 62Introduction to Docker Basic Course ‣ docker diff ‣ docker history 差分と履歴の確認 $ docker diff <コンテナID> A /hello.txt C /root A /root/.bash_history $ docker history $IMEGEID IMAGE CREATED CREATED BY SIZE COMMENT 1b07ddefe341 2 minutes ago bash 66 B 6d4946999d4f 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B 9fd3c8c9af32 3 weeks ago /bin/sh -c sed -i 's/^#¥s*¥(deb.*universe¥)$/ 1.895 kB 435050075b3f 3 weeks ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 194.5 kB 428b411c28f0 3 weeks ago /bin/sh -c #(nop) ADD file:b3447f4503091bb6bb 188.1 MB diff | history 差分・履歴表示
  • 63. 63Introduction to Docker Basic Course ‣ docker commit コマンド docker commit [オプション] [コンテナID] [レポジトリ名:タグ] コミットして変更内容を確定 $ docker commit $CONTAINER ecsdocker/myapp:1.0 1b07ddefe341abdae8f497a4dea24b2fef46a2a32621a0998fb0e7e8c2fbf666 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ecsdocker/myapp 1.0 1b07ddefe341 17 seconds ago 188.3 M
  • 64. 64Introduction to Docker Basic Course ‣ ルート(公式レポジトリ) Ubuntu:14.04 nginx ‣ ユーザやグループ zembutsu/testapp ‣ ローカルのレジストリ registry.zem.jp:5000/zem-image レポジトリ(イメージ)の名前空間 3つの使い方があります。 複数の利用者が居る場合は、 名前で分けるようにした方が 混同しなくてオススメです。
  • 65. 65Introduction to Docker Basic Course ‣ Dockerfile の役割 どのようなイメージにするか指示 • どのベース・イメージを使うのか? • 何のプログラムをインストールするのか? • どのようなコマンドを実行するのか ‣ docker build コマンドで構築 docker build –t <レポジトリ:タグ> <Dockerfileのパス> Dockerfile 設定を自動的に行うための 命令をファイルに記述します。 内容はテキスト形式ファイル なのでエディタで編集します。
  • 66. 66Introduction to Docker Basic Course ‣ FROM ベースイメージの指定 • 例:FROM Ubuntu • 例:FROM nginx ‣ RUN コマンドの実行 • 例:RUN yum –y install nginx 基本命令 FORMは必須です。
  • 67. 67Introduction to Docker Basic Course ‣ CMD または ENTRYPOINTで実行コマンド指定 ENTRYPOINT使用時は、 • CMDで指定した項目がオプション適用 • コンテナ実行時にオプションがあれば、CMD指定よりも優先 ‣ ADD でファイル/URL/ZIP からコンテナへ追加 ‣ MAINTAINER で管理者の情報を追記 様々な命令
  • 68. ● ● ● ● ● ● ● ○
  • 69. 69Introduction to Docker Basic Course ‣ -p オプションで、ポートマッピング 例:-p 8080:80 • ホスト側の port 8080 をコンテナの port 80 へ ‣ -P (大文字) はデフォルト ポートの指定 $ docker run -d -p 80:80 ecsdocker/web 010a5fbd22acbfab818541e3f07055b5338f9fa010ee9a26899423dd5944938c $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 010a5fbd22ac ecsdocker/web "nginx -g 'daemon of 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, 443/tcp determined_albattani
  • 70. 70Introduction to Docker Basic Course ‣ -v オプションは、領域をホストとコンテナで共有 例:-v /home/web:/usr/share/nginx/html • ホスト側の「/home/web」をコンテナの「/usr/share/nginx/html」へ ボリュームの設定
  • 71. 71Introduction to Docker Basic Course Dockerfileの例 FROM ubuntu:14.04 RUN apt-get install -y wget CMD /usr/bin/wget FROM nginx ADD ./contents /usr/share/nginx/html どれもシンプルです。
  • 72. ● ● ● ● ● ● ● ●
  • 73. 73 Dockerと基本コマンド docker run コンテナ実行 docker stop コンテナ停止 docker commit コンテナイメージ化 docker pull イメージの取得 docker build イメージの自動構築 docker attach コンテナにアタッチ docker logs 標準出力の表示 docker inspect 詳細情報の表示 docker rm イメージ削除 docker images イメージ一覧表示 diff | history 差分・履歴表示
  • 74. ● ● ● ● ● ● ● ● + Extra
  • 75. 社外開発環境 本番環境ステージング環境 社内共有開発環境 個人開発環境 社内テスト環境 社外開発環境 本番環境ステージング環境 CI/CD Docker レジストリ Docker動作環境(docker machine) 先ほどの図なのですが、 見なれないアイコンが 増えていませんか?
  • 76. Dockerとツール群 (https://www.docker.com/products) Docker Engine Dockerコンテナの起動と実行 Docker Swarm クラスタリングとスケジューリング Docker Compose 複数のアプリケーションコンテナを定義 Docker Machine 共通したコンテナ実行環境 Kitematic デスクトップ向け GUi Docker Registry コンテナの保管庫 Docker Hub Enterprise 仲間が増えました!
  • 77. ┌──────────────────────┐ │ドッカースウォームが あらわれた! │ │ドッカーコンポーズが あらわれた! │ │コマンド? │ │ ∨ │ └━━━━━━━━━━━━━━━━━━━━━━┘ ┌────┐ │ていじで │ │かえろう │ └━━━━┘ ┌──────コマンド─────┐ │ たたかう じゅもん │ │ にげる げんじつとうひ │ └━━━━━━━━━━━━━━━┘ > やったね!
  • 78. 78Introduction to Docker Basic Course ‣ Docker 動作環境の自動作成 仮想サーバの起動と Docker のプロビジョニングを自動的に行う ‣ コマンドラインで使うツール docker-machine –d <ドライバ> [option] マシン名 …のように、コマンドで操作 ‣ Linux, Windows, Mac OS X に対応 ‣ VirtualBox だけでなく、多くのクラウドに対応 Amazon Web Services, DigitalOcean, exoscale, Google Compute Engine, SoftLayer, Azure, Hyper-V, OpenStack, RackSpace, VMwareFusion, VMwarea vCloud Air, VMware vSphere, SSH 可能なリモートホスト Docker Machine まだBETA版なので、本番での 利用は推奨されていません。
  • 84. 84Introduction to Docker Basic Course Docker Swarm ‣ Docker クラスタ管理ツール Docker ホストの集まりを作成したり、アクセスできるようにするツールで、API を持つ ‣ コマンドラインで操作 docker-machine で環境を作り、docker run swarm create ‣ クラスタ形成 ディスカバリ(マネージャへの登録に、consul や etcd にも対応) フィルタ(コンテナを配置する条件の設定は、Docker を抽象化) ストラテジ(どこのノードにコンテナを自動配置するか方針設定) まだBETA版なので、本番での 利用は推奨されていません。
  • 85. 85Introduction to Docker Basic Course Docker Compose ‣ 複数コンテナのアプリケーション自動設定 Dockerfile を複数のコンテナに拡張したようなイメージ ‣ コマンドラインで操作 docker-compose docker-compose.yml ‣ Linux, Windows, Mac OS X に対応 ‣ 構成情報を YAML 形式のファイルで定義 まだBETA版なので、本番での 利用は推奨されていません。
  • 86. 86 Docker Engine Docker Machine Docker Swarm Docker Compose 基礎編・おわり 最後までありがとうございました 今回は「基礎編」でした。 まだまだもちっと続くのですが、今回は時間的にこれまで。 続きは、またいずれか、どっかで
  • 87. 87 ‣ Docker ドキュメント http://docs.docker.com/ ‣ Docker ドキュメントの日本語訳(仮) http://qiita.com/zembutsu/items/444396b76e0db2c04c2b (まとめて、どっかに整理するつもりです。) 参考情報