SlideShare a Scribd company logo
Docker 超入門
v18.09 対応版
日本仮想化技術株式会社
前提要件
• Docker CE 18.09以降のバージョン
• Managementコマンドを使う
• Docker Compose 1.24.1以降のバージョン
2
色々なDocker
• Docker Engine
• dockerコマンドで色々するそれ
• Docker Compose
• アプリケーションの展開
• Docker Machine
• Docker Engineをセットアップ
• Docker Swarm
• クラスター構成するときに使う
3
青字のコンポーネントが対象
Dockerの概要
4
Dockerとは
• 「コンテナー」と呼ばれるOSレベルの仮想化環境を提供する
もの
• 利点はハイパーバイザー型仮想化ソフトウェアと比べて
1. すぐ使い始めることができる
2. 起動が速い
3. 異なる環境で動かすのが容易である
5
「仮想マシン」との比較
6
カーネル
ハイパーバイザー
OS
アプリ
カーネル
Docker Engine
OS
アプリ
OS
アプリ
OS
アプリ
カーネル
OS
アプリ
カーネル
OS
アプリ
カーネル
ハードウェア ハードウェア
仮想化の場合 Dockerの場合
カーネルは
ホストと共存カーネルは
ホストと独立
すぐ使い始めることができる
1. ハイパーバイザーのインストール
2. 仮想マシンの作成
3. 仮想マシンにOSのインストール
4. アプリケーション実行環境のインスト
ール
5. アプリケーションの配備
6. コンテンツの配備
1. Dockerのインストール
2. アプリケーションを動かすためのイメ
ージを使ってコンテナーを作成
3. コンテンツの配備
7
仮想化の場合 Dockerの場合
NGINX、Apache2、
Node.js、Python、Ruby、
PHP
Golang、Java etc...
起動が速い
• インストール済の状態
• 仮想マシンを起動
• だいたい10秒
• イメージインポート済の状態
• コンテナーを作成
• だいたい1秒
8
仮想化の場合 Dockerの場合
異なる環境で動かすのが容易
• マシンのアーキテクチャーは考慮が必要(amd64、arm64)
• Aの環境で動いたものをBで動かすといったことはだいたい可能
9
カーネル
Docker Engine
カーネル
Docker Engine
OS
アプリ
ハードウェア ハードウェア
ホストA ホストB
OS
アプリ
Dockerの使いかた
10
Docker Engineの種類
• ディストリビューション標準のDockerパッケージ
• aptやyum、snapコマンドなどですぐインストール可能
• バージョンが古い(もしくは提供されていない)場合がある
• Docker CE
• 無料で使えるコミュニティー版
• Docker EE
• 商用向け。有料
11
Dockerのインストール
• CentOS 7 / Fedoraの場合
• sudo yum install docker
• sudo systemctl start docker
• sudo systemctl enable docker
• Ubuntu / Debianの場合
• sudo apt update
• sudo apt install docker.io
12
ディストリビューション版
パッケージを使う場合
Docker利用の基本
• イメージを検索(search)
• イメージを取り込む(pull)
• イメージを使ってコンテナーを作成する(run)
• コンテナーをセットアップ
• 動かしたいアプリケーションを配置
• 適宜環境を修正(インストール&設定)
• コンテナーの上でアプリケーションが動く
13
Dockerコンテナーの検索
• 「docker search 〜」コマンドでコンテナーイメージを検索できる
• docker search centos
• docker search ubuntu
• 「-f」オプションでフィルターできる
• 例えばオフィシャルイメージのみ表示するとか
• docker search centos -f is-official=true
14
Dockerイメージとセキュリティ
• Dockerのイメージは色々なユーザーが公開している
• セキュリティ的な穴があるかも?
• 脆弱性とかキーロガーとか
• 基本的にはDocker Certifiedもしくはオフィシャルイメージを使う
• かつメンテナンスがしっかりしているものを利用する
• 自動ビルドイメージだとなお良し
• 人の手によって作成されていない
• イメージの透明性
15
Dockerとroot権限
• デフォルトはdockerコマンドはrootユーザーしか許可されていない
• ユーザーをdockerグループに追加するとsudoが不要になる
• sudo gpasswd -a $USER docker
• ただ、上の設定の実行はあまりオススメしない
• sudo docker 〜
• sudo -iを実行してからdockerコマンドを利用
16
Dockerイメージのおすすめ
• busybox
• 一通りのコマンドが入っている
• テスト用およびベースイメージとして使うなど
• alpine
• 軽量かつパッケージ管理ツールでカスタム可能
• 他のイメージのalpineイメージもおすすめ
• debian:stable-slim
• slimつきイメージはサイズが小さい(約1/2)
17
Ubuntu、CentOS、Debian
など色々イメージがある。
hub.docker.comで検索できる
Dockerコンテナータグの検索
• 「docker search」コマンドではタグ(バージョン)までは確認できない
• 例えばCentOS 7とか、6とか
• curlで頑張るか、ブラウザーでDocker hubを検索
• ex1: curl -s
https://registry.hub.docker.com/v1/repositories/centos/tags |
sed "s/,/¥n/g" | grep name | cut -d '"' -f 4
• ex2: curl -s
https://registry.hub.docker.com/v1/repositories/centos/tags | jq
18
要 GNU sed
要 jq
Dockerコンテナーの作成
• 「docker container run」で新規作成
• 基本
• docker container run --name=cont1 -it busybox sh
• 実行して結果を出力したらコンテナーを削除(使い切りコンテナー)
• docker container run --name=cont2 --rm -it busybox ping -c3 9.9.9.9
• 起動を継続(デーモンとして実行)するコンテナー
• docker container run --name=cont3 -d -it busybox sh
19
docker container run補足
• アプリケーションによって指定するオプションは異なる
• 基本の使いかたはこんな感じ
• コンテナー名を指定しない場合はランダム
20
docker container run -it--name=cont1 sh
コンテナを作成
する場合
対話モード
(Interactive)
ttyを開く
コンテナ名 コマンド
busybox
Docker
イメージ
作成したコンテナー一覧の表示
• 「docker container ls」で実行中のコンテナーを表示
• 「docker container ls -a」で存在するコンテナーを表示
• cont2は使い切りコンテナーとして作成したので一覧にはない
21
Dockerコンテナーにアクセス
• 「docker container exec」コマンドで指定したコンテナーに入る
• 「docker container ls」で該当のコンテナーを検索
• コマンド「docker container exec -it cont1 sh」のように実行してコ
ンテナーにアクセス
22
docker container exec 補足
• 「docker container run」した時のオプションを指定する
23
docker container exec -it cont1 sh
コンテナにアクセス
する場合
対話モード
ttyを開く
コンテナ名 コマンド
Dockerコンテナーを再開
• 終了状態のコンテナーは再利用(起動)可能
• コマンドとして「docker container start cont1」のように実行
24
Dockerコンテナーを停止
• 実行状態のコンテナーは停止可能
• コマンドとして「docker container stop cont1」のように実行
25
コンテナーでサービスを起動
• 例えばWebサーバーを実行するには
• docker container run --name=cont4 -d -p 8080:80 -it
httpd:alpine
• http://localhost:8080 でコンテナーの80ポートを使っているWebサー
バーにアクセス可能
26
コンテナーを削除
• いらなくなったコンテナーはrmオプションで削除可能
• コンテナーを削除する前に停止が必要
• コマンド実行例
• 「docker container stop cont1」で停止
• 「docker container rm cont1」で削除
• 「--force」オプションも使える
• docker container rm cont1 --force
27
コンテナーイメージを削除
• いらなくなったコンテナーイメージは削除可能
• コマンド実行例
• 「docker image ls」でイメージ一覧を出して
• 「docker image rm centos:7」でイメージを消す
28
Docker応用編
29
ディレクトリーをマウントして起動
• データを永続化したい時の手段の一つ
• -vオプションでコンテナーにローカルディレクトリーをマウント可能
• -wオプションでカレントディレクトリーを指定可能
• ローカルのディレクトリーのほか、NFS、iSCSI、FCなどのボリューム
をコンテナーにマウントも可能
• 「Docker Volume Plugins」で検索してみよう
30
ディレクトリーのマウント実行例
• ローカルディレクトリーをコンテナーの/root/workにマウント
• docker container run -v /root/work:/root/work -w /root/work -
it python:3.6-slim bash
• データボリュームコンテナーを作って別のコンテナーで利用
• docker container run -it -d -v /data --name datavol busybox
• docker container run -it --volumes-from datavol --name test
centos:7 bash
31
カレントディレク
トリーを指定
カスタムイメージ作成
• Dockerイメージは好きなようにカスタマイズして使える
• docker container commit
• 作成したコンテナーをイメージに変換
• docker image build
• dockerfileに記述した通りのイメージを作る
32
docker container commitでイメージ化
• CentOS7 + Webサーバーコンテナーをイメージとしてコミット
• docker container run --privileged --name=cont1 -it centos:7
bash
• yum install -y httpd && exit
• docker container commit cont1 httpd-template
33
特権モード
docker container commitイメージを使う
• コミットしたイメージでWebサーバーを動かす例
• docker container run --privileged -d -p 50080:80 --name cont2
httpd-template:latest /sbin/init
• docker container exec -it cont2 bash -c "systemctl start httpd"
• curl http://localhost:50080
34
docker image buildによるイメージ生成
• 作成したいコンテナーイメージはdockerfileに記述する
• インストールしたいパッケージ
• 設定
• 起動するプロセス
• ファイルコピー etc...
35
docker image build実行例
• docker image build --compress -t apache:latest -f dockerfile-
apache .
• docker container run --privileged -d --name=cont1 -p 58080:80 -it
apache:latest
• curl http://localhost:58080
36
FROM centos:7
RUN yum install -y httpd && ¥
yum clean all && ¥
systemctl enable httpd.service
CMD /sbin/init
EXPOSE 80
dockerfile-apache
最後にドットをつける
イメージ作成のHowto
• Alpineイメージを使うと軽量化できる
• 例えばPython3のイメージ
37
カスタムイメージの登録
• Docker Hubにカスタムイメージを登録できます。
• アカウントを作成(無料)します
• 作成したイメージをアップロード
• Gitにdockerfileを置いて、イメージの自動ビルドも可能
• 利用方法は「Docker Hub イメージ登録」などで検索
• https://docs.docker.com/docker-hub/
38
ローカルリポジトリーの作成と利用
• Docker Hubに「Docker Registry」イメージがある
• https://hub.docker.com/_/registry
• http://docs.docker.jp/registry/toc.html
• これを使うと独自のDockerリポジトリーを立ち上げられる
• 繰り返し使うイメージのキャッシュ
• 非公開にしたいイメージの管理
• 常時オンラインではない環境での利用
39
Docker Composeとは
• アプリケーションコンテナー作成を自動化するDockerのツール
• 環境構築を自動化
• 構築、停止、再構築が自由自在
• 冪等性
• サービスの状態を表示
• ログ出力
40
OS
MySQL Webサーバー
WordPressサイト
docker-composeのインストール
• 方法はいくつかある
• yumやaptなどを使ってパッケージをインストール
• Pythonモジュールを使う
• バイナリーをGitHubからダウンロードして展開
41
Docker Composeの使いかた概要
• プロジェクトディレクトリーを作成
• 「docker-compose.yml」を作成して記述
• 「docker-compose up -d」で構築開始
• YAMLの内容に沿ってアプリケーションをデプロイ
• 「docker-compose logs」でログを確認
• 「docker-compose down」でアプリケーションを削除
42
YAML記述例
version: '2'
services:
db:
image: mysql:5.7
volumes:
- "./.data/db:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
links:
- db
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
43
MySQLとWebサーバーをデプロイし
ている。わかりやすい
Docker Compose実行例
# tree docker-compose/
docker-compose/
└── docker-compose.yml ←デプロイするアプリケーションを定義したYAMLファイル
0 directories, 1 file
# docker-compose up -d ←デプロイ実行
# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
docker-compose_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
docker-compose_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8000->80/tcp
# docker-compose down ←アプリケーションの終了
44
少々待てばデプロイ完了
45
まとめ
• Dockerは便利ですね
• シングルホストでDockerを活用するのは簡単
• マルチホストでは?...例えば
• Docker Swarm
• Kubernetes
• Rancher
46

More Related Content

PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
PDF
Docker Compose 徹底解説
PDF
DockerとPodmanの比較
PDF
containerdの概要と最近の機能
PDF
Dockerからcontainerdへの移行
PPTX
Docker Tokyo
PDF
BuildKitの概要と最近の機能
PPTX
Dockerからcontainerdへの移行
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker Compose 徹底解説
DockerとPodmanの比較
containerdの概要と最近の機能
Dockerからcontainerdへの移行
Docker Tokyo
BuildKitの概要と最近の機能
Dockerからcontainerdへの移行

What's hot (20)

PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PDF
Pythonによる黒魔術入門
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
PDF
Dockerfile を書くためのベストプラクティス解説編
PPTX
本当は恐ろしい分散システムの話
PPTX
Redisの特徴と活用方法について
PDF
それはYAGNIか? それとも思考停止か?
PDF
例外設計における大罪
PDF
Dockerイメージの理解とコンテナのライフサイクル
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
PDF
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
PDF
WebSocket / WebRTCの技術紹介
PDF
Windowsコンテナ入門
PDF
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
PDF
Keycloak拡張入門
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PPTX
KeycloakでAPI認可に入門する
PDF
Docker道場オンライン#1 Docker基礎概念と用語の理解
コンテナの作り方「Dockerは裏方で何をしているのか?」
Pythonによる黒魔術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
Dockerfile を書くためのベストプラクティス解説編
本当は恐ろしい分散システムの話
Redisの特徴と活用方法について
それはYAGNIか? それとも思考停止か?
例外設計における大罪
Dockerイメージの理解とコンテナのライフサイクル
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
WebSocket / WebRTCの技術紹介
Windowsコンテナ入門
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Keycloak拡張入門
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
KeycloakでAPI認可に入門する
Docker道場オンライン#1 Docker基礎概念と用語の理解
Ad

Similar to Docker超入門 (20)

PDF
Docker入門: コンテナ型仮想化技術の仕組みと使い方
PDF
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
PDF
Docker handson
PDF
ゆるふわなDockerの使い方
PPTX
Docker & Kubernetes基礎
PDF
DockerとDocker Hubの操作と概念
PDF
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
PDF
Dockerでらくらく開発・運用を体感しよう
PDF
Docker事始めと最新動向 2015年6月
PPTX
コンテナの基本 ~Docker実践~
PDF
Docker社内勉強会
PPTX
Docker入門 OSC 2018 Tokyo/Spring
PDF
Docker入門
PDF
Dockerハンズオン
PDF
使ってわかる 今どきのdocker超入門
PPTX
今さら聞けない人のためのDocker超入門
PDF
VagrantユーザのためのDocker入門
PPTX
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
PDF
Dockerイメージ構築 実践テクニック
PDF
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker handson
ゆるふわなDockerの使い方
Docker & Kubernetes基礎
DockerとDocker Hubの操作と概念
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
Dockerでらくらく開発・運用を体感しよう
Docker事始めと最新動向 2015年6月
コンテナの基本 ~Docker実践~
Docker社内勉強会
Docker入門 OSC 2018 Tokyo/Spring
Docker入門
Dockerハンズオン
使ってわかる 今どきのdocker超入門
今さら聞けない人のためのDocker超入門
VagrantユーザのためのDocker入門
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
Dockerイメージ構築 実践テクニック
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Ad

More from VirtualTech Japan Inc. (20)

PDF
5G時代のアプリケーションとは 〜 5G+MECを活用した低遅延アプリの実現へ 〜
PPTX
エンジニアが幸せになれる会社を目指します
PDF
KubeVirt 201 How to Using the GPU
PDF
PDF
今からはじめる! Linuxコマンド入門
PDF
5G時代のアプリケーション開発とは - 5G+MECを活用した低遅延アプリの実現へ
PDF
Kubernetes雑にまとめてみた 2020年8月版
PDF
MS Teams + OBS Studio (+ OBS Mac Virtual Camera) でのオンラインセミナーのプロトタイプの構築
PDF
5G時代のアプリケーション開発とは
PDF
hbstudy#88 5G+MEC時代のシステム設計
PDF
通信への課題発掘ワークショップ 「5Gイノベーション」の取り組み
PDF
Kubernetes雑にまとめてみた 2019年12月版
PPTX
OpenStackを使用したGPU仮想化IaaS環境 事例紹介
PDF
5Gにまつわる3つの誤解 - 5G×ライブコンテンツ:5G時代の双方向コンテンツとは
PDF
KubeCon China & MWC Shangai 出張報告
PDF
NTT Docomo's Challenge looking ahead the world pf 5G × OpenStack - OpenStack最...
PDF
Introduction of private cloud in LINE - OpenStack最新情報セミナー(2019年2月)
PDF
Multi-access Edge Computing(MEC)における”Edge”の定義
PPTX
Edge Computing Architecture using GPUs and Kubernetes
PDF
OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料
5G時代のアプリケーションとは 〜 5G+MECを活用した低遅延アプリの実現へ 〜
エンジニアが幸せになれる会社を目指します
KubeVirt 201 How to Using the GPU
今からはじめる! Linuxコマンド入門
5G時代のアプリケーション開発とは - 5G+MECを活用した低遅延アプリの実現へ
Kubernetes雑にまとめてみた 2020年8月版
MS Teams + OBS Studio (+ OBS Mac Virtual Camera) でのオンラインセミナーのプロトタイプの構築
5G時代のアプリケーション開発とは
hbstudy#88 5G+MEC時代のシステム設計
通信への課題発掘ワークショップ 「5Gイノベーション」の取り組み
Kubernetes雑にまとめてみた 2019年12月版
OpenStackを使用したGPU仮想化IaaS環境 事例紹介
5Gにまつわる3つの誤解 - 5G×ライブコンテンツ:5G時代の双方向コンテンツとは
KubeCon China & MWC Shangai 出張報告
NTT Docomo's Challenge looking ahead the world pf 5G × OpenStack - OpenStack最...
Introduction of private cloud in LINE - OpenStack最新情報セミナー(2019年2月)
Multi-access Edge Computing(MEC)における”Edge”の定義
Edge Computing Architecture using GPUs and Kubernetes
OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料

Docker超入門

Editor's Notes

  • #2: PowerPoint版
  • #3: https://hub.docker.com/search/?type=edition&offering=community
  • #37: 円マークではなくバックスラッシュ