O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Docker 超入門
v18.09 対応版
日本仮想化技術株式会社
前提要件
• Docker CE 18.09以降のバージョン
• Managementコマンドを使う
• Docker Compose 1.24.1以降のバージョン
2
色々なDocker
• Docker Engine
• dockerコマンドで色々するそれ
• Docker Compose
• アプリケーションの展開
• Docker Machine
• Docker Engineをセットアップ
• Doc...
Dockerの概要
4
Dockerとは
• 「コンテナー」と呼ばれるOSレベルの仮想化環境を提供する
もの
• 利点はハイパーバイザー型仮想化ソフトウェアと比べて
1. すぐ使い始めることができる
2. 起動が速い
3. 異なる環境で動かすのが容易である
5
「仮想マシン」との比較
6
カーネル
ハイパーバイザー
OS
アプリ
カーネル
Docker Engine
OS
アプリ
OS
アプリ
OS
アプリ
カーネル
OS
アプリ
カーネル
OS
アプリ
カーネル
ハードウェア ハードウェア
仮想化の...
すぐ使い始めることができる
1. ハイパーバイザーのインストール
2. 仮想マシンの作成
3. 仮想マシンにOSのインストール
4. アプリケーション実行環境のインスト
ール
5. アプリケーションの配備
6. コンテンツの配備
1. Dock...
起動が速い
• インストール済の状態
• 仮想マシンを起動
• だいたい10秒
• イメージインポート済の状態
• コンテナーを作成
• だいたい1秒
8
仮想化の場合 Dockerの場合
異なる環境で動かすのが容易
• マシンのアーキテクチャーは考慮が必要(amd64、arm64)
• Aの環境で動いたものをBで動かすといったことはだいたい可能
9
カーネル
Docker Engine
カーネル
Docker Engine
OS...
Dockerの使いかた
10
Docker Engineの種類
• ディストリビューション標準のDockerパッケージ
• aptやyum、snapコマンドなどですぐインストール可能
• バージョンが古い(もしくは提供されていない)場合がある
• Docker CE
• 無...
Dockerのインストール
• CentOS 7 / Fedoraの場合
• sudo yum install docker
• sudo systemctl start docker
• sudo systemctl enable docke...
Docker利用の基本
• イメージを検索(search)
• イメージを取り込む(pull)
• イメージを使ってコンテナーを作成する(run)
• コンテナーをセットアップ
• 動かしたいアプリケーションを配置
• 適宜環境を修正(インスト...
Dockerコンテナーの検索
• 「docker search 〜」コマンドでコンテナーイメージを検索できる
• docker search centos
• docker search ubuntu
• 「-f」オプションでフィルターできる
...
Dockerイメージとセキュリティ
• Dockerのイメージは色々なユーザーが公開している
• セキュリティ的な穴があるかも?
• 脆弱性とかキーロガーとか
• 基本的にはDocker Certifiedもしくはオフィシャルイメージを使う
•...
Dockerとroot権限
• デフォルトはdockerコマンドはrootユーザーしか許可されていない
• ユーザーをdockerグループに追加するとsudoが不要になる
• sudo gpasswd -a $USER docker
• ただ、...
Dockerイメージのおすすめ
• busybox
• 一通りのコマンドが入っている
• テスト用およびベースイメージとして使うなど
• alpine
• 軽量かつパッケージ管理ツールでカスタム可能
• 他のイメージのalpineイメージもおす...
Dockerコンテナータグの検索
• 「docker search」コマンドではタグ(バージョン)までは確認できない
• 例えばCentOS 7とか、6とか
• curlで頑張るか、ブラウザーでDocker hubを検索
• ex1: curl...
Dockerコンテナーの作成
• 「docker container run」で新規作成
• 基本
• docker container run --name=cont1 -it busybox sh
• 実行して結果を出力したらコンテナーを削...
docker container run補足
• アプリケーションによって指定するオプションは異なる
• 基本の使いかたはこんな感じ
• コンテナー名を指定しない場合はランダム
20
docker container run -it--name...
作成したコンテナー一覧の表示
• 「docker container ls」で実行中のコンテナーを表示
• 「docker container ls -a」で存在するコンテナーを表示
• cont2は使い切りコンテナーとして作成したので一覧には...
Dockerコンテナーにアクセス
• 「docker container exec」コマンドで指定したコンテナーに入る
• 「docker container ls」で該当のコンテナーを検索
• コマンド「docker container ex...
docker container exec 補足
• 「docker container run」した時のオプションを指定する
23
docker container exec -it cont1 sh
コンテナにアクセス
する場合
対話モード...
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:80...
コンテナーを削除
• いらなくなったコンテナーはrmオプションで削除可能
• コンテナーを削除する前に停止が必要
• コマンド実行例
• 「docker container stop cont1」で停止
• 「docker container ...
コンテナーイメージを削除
• いらなくなったコンテナーイメージは削除可能
• コマンド実行例
• 「docker image ls」でイメージ一覧を出して
• 「docker image rm centos:7」でイメージを消す
28
Docker応用編
29
ディレクトリーをマウントして起動
• データを永続化したい時の手段の一つ
• -vオプションでコンテナーにローカルディレクトリーをマウント可能
• -wオプションでカレントディレクトリーを指定可能
• ローカルのディレクトリーのほか、NFS、i...
ディレクトリーのマウント実行例
• ローカルディレクトリーをコンテナーの/root/workにマウント
• docker container run -v /root/work:/root/work -w /root/work -
it pyt...
カスタムイメージ作成
• Dockerイメージは好きなようにカスタマイズして使える
• docker container commit
• 作成したコンテナーをイメージに変換
• docker image build
• dockerfileに...
docker container commitでイメージ化
• CentOS7 + Webサーバーコンテナーをイメージとしてコミット
• docker container run --privileged --name=cont1 -it ce...
docker container commitイメージを使う
• コミットしたイメージでWebサーバーを動かす例
• docker container run --privileged -d -p 50080:80 --name cont2
h...
docker image buildによるイメージ生成
• 作成したいコンテナーイメージはdockerfileに記述する
• インストールしたいパッケージ
• 設定
• 起動するプロセス
• ファイルコピー etc...
35
docker image build実行例
• docker image build --compress -t apache:latest -f dockerfile-
apache .
• docker container run --pr...
イメージ作成のHowto
• Alpineイメージを使うと軽量化できる
• 例えばPython3のイメージ
37
カスタムイメージの登録
• Docker Hubにカスタムイメージを登録できます。
• アカウントを作成(無料)します
• 作成したイメージをアップロード
• Gitにdockerfileを置いて、イメージの自動ビルドも可能
• 利用方法は「D...
ローカルリポジトリーの作成と利用
• Docker Hubに「Docker Registry」イメージがある
• https://hub.docker.com/_/registry
• http://docs.docker.jp/registr...
Docker Composeとは
• アプリケーションコンテナー作成を自動化するDockerのツール
• 環境構築を自動化
• 構築、停止、再構築が自由自在
• 冪等性
• サービスの状態を表示
• ログ出力
40
OS
MySQL Webサー...
docker-composeのインストール
• 方法はいくつかある
• yumやaptなどを使ってパッケージをインストール
• Pythonモジュールを使う
• バイナリーをGitHubからダウンロードして展開
41
Docker Composeの使いかた概要
• プロジェクトディレクトリーを作成
• 「docker-compose.yml」を作成して記述
• 「docker-compose up -d」で構築開始
• YAMLの内容に沿ってアプリケーション...
YAML記述例
version: '2'
services:
db:
image: mysql:5.7
volumes:
- "./.data/db:/var/lib/mysql"
restart: always
environment:
MY...
Docker Compose実行例
# tree docker-compose/
docker-compose/
└── docker-compose.yml ←デプロイするアプリケーションを定義したYAMLファイル
0 directories...
少々待てばデプロイ完了
45
まとめ
• Dockerは便利ですね
• シングルホストでDockerを活用するのは簡単
• マルチホストでは?...例えば
• Docker Swarm
• Kubernetes
• Rancher
46
Próximos SlideShares
Carregando em…5
×

Docker超入門

376 visualizações

Publicada em

Dockerとは、Dockerを使うには、Docker Composeを使うには...のHowto

Publicada em: Engenharia
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Docker超入門

  1. 1. Docker 超入門 v18.09 対応版 日本仮想化技術株式会社
  2. 2. 前提要件 • Docker CE 18.09以降のバージョン • Managementコマンドを使う • Docker Compose 1.24.1以降のバージョン 2
  3. 3. 色々なDocker • Docker Engine • dockerコマンドで色々するそれ • Docker Compose • アプリケーションの展開 • Docker Machine • Docker Engineをセットアップ • Docker Swarm • クラスター構成するときに使う 3 青字のコンポーネントが対象
  4. 4. Dockerの概要 4
  5. 5. Dockerとは • 「コンテナー」と呼ばれるOSレベルの仮想化環境を提供する もの • 利点はハイパーバイザー型仮想化ソフトウェアと比べて 1. すぐ使い始めることができる 2. 起動が速い 3. 異なる環境で動かすのが容易である 5
  6. 6. 「仮想マシン」との比較 6 カーネル ハイパーバイザー OS アプリ カーネル Docker Engine OS アプリ OS アプリ OS アプリ カーネル OS アプリ カーネル OS アプリ カーネル ハードウェア ハードウェア 仮想化の場合 Dockerの場合 カーネルは ホストと共存カーネルは ホストと独立
  7. 7. すぐ使い始めることができる 1. ハイパーバイザーのインストール 2. 仮想マシンの作成 3. 仮想マシンにOSのインストール 4. アプリケーション実行環境のインスト ール 5. アプリケーションの配備 6. コンテンツの配備 1. Dockerのインストール 2. アプリケーションを動かすためのイメ ージを使ってコンテナーを作成 3. コンテンツの配備 7 仮想化の場合 Dockerの場合 NGINX、Apache2、 Node.js、Python、Ruby、 PHP Golang、Java etc...
  8. 8. 起動が速い • インストール済の状態 • 仮想マシンを起動 • だいたい10秒 • イメージインポート済の状態 • コンテナーを作成 • だいたい1秒 8 仮想化の場合 Dockerの場合
  9. 9. 異なる環境で動かすのが容易 • マシンのアーキテクチャーは考慮が必要(amd64、arm64) • Aの環境で動いたものをBで動かすといったことはだいたい可能 9 カーネル Docker Engine カーネル Docker Engine OS アプリ ハードウェア ハードウェア ホストA ホストB OS アプリ
  10. 10. Dockerの使いかた 10
  11. 11. Docker Engineの種類 • ディストリビューション標準のDockerパッケージ • aptやyum、snapコマンドなどですぐインストール可能 • バージョンが古い(もしくは提供されていない)場合がある • Docker CE • 無料で使えるコミュニティー版 • Docker EE • 商用向け。有料 11
  12. 12. 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 ディストリビューション版 パッケージを使う場合
  13. 13. Docker利用の基本 • イメージを検索(search) • イメージを取り込む(pull) • イメージを使ってコンテナーを作成する(run) • コンテナーをセットアップ • 動かしたいアプリケーションを配置 • 適宜環境を修正(インストール&設定) • コンテナーの上でアプリケーションが動く 13
  14. 14. Dockerコンテナーの検索 • 「docker search 〜」コマンドでコンテナーイメージを検索できる • docker search centos • docker search ubuntu • 「-f」オプションでフィルターできる • 例えばオフィシャルイメージのみ表示するとか • docker search centos -f is-official=true 14
  15. 15. Dockerイメージとセキュリティ • Dockerのイメージは色々なユーザーが公開している • セキュリティ的な穴があるかも? • 脆弱性とかキーロガーとか • 基本的にはDocker Certifiedもしくはオフィシャルイメージを使う • かつメンテナンスがしっかりしているものを利用する • 自動ビルドイメージだとなお良し • 人の手によって作成されていない • イメージの透明性 15
  16. 16. Dockerとroot権限 • デフォルトはdockerコマンドはrootユーザーしか許可されていない • ユーザーをdockerグループに追加するとsudoが不要になる • sudo gpasswd -a $USER docker • ただ、上の設定の実行はあまりオススメしない • sudo docker 〜 • sudo -iを実行してからdockerコマンドを利用 16
  17. 17. Dockerイメージのおすすめ • busybox • 一通りのコマンドが入っている • テスト用およびベースイメージとして使うなど • alpine • 軽量かつパッケージ管理ツールでカスタム可能 • 他のイメージのalpineイメージもおすすめ • debian:stable-slim • slimつきイメージはサイズが小さい(約1/2) 17 Ubuntu、CentOS、Debian など色々イメージがある。 hub.docker.comで検索できる
  18. 18. 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
  19. 19. 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
  20. 20. docker container run補足 • アプリケーションによって指定するオプションは異なる • 基本の使いかたはこんな感じ • コンテナー名を指定しない場合はランダム 20 docker container run -it--name=cont1 sh コンテナを作成 する場合 対話モード (Interactive) ttyを開く コンテナ名 コマンド busybox Docker イメージ
  21. 21. 作成したコンテナー一覧の表示 • 「docker container ls」で実行中のコンテナーを表示 • 「docker container ls -a」で存在するコンテナーを表示 • cont2は使い切りコンテナーとして作成したので一覧にはない 21
  22. 22. Dockerコンテナーにアクセス • 「docker container exec」コマンドで指定したコンテナーに入る • 「docker container ls」で該当のコンテナーを検索 • コマンド「docker container exec -it cont1 sh」のように実行してコ ンテナーにアクセス 22
  23. 23. docker container exec 補足 • 「docker container run」した時のオプションを指定する 23 docker container exec -it cont1 sh コンテナにアクセス する場合 対話モード ttyを開く コンテナ名 コマンド
  24. 24. Dockerコンテナーを再開 • 終了状態のコンテナーは再利用(起動)可能 • コマンドとして「docker container start cont1」のように実行 24
  25. 25. Dockerコンテナーを停止 • 実行状態のコンテナーは停止可能 • コマンドとして「docker container stop cont1」のように実行 25
  26. 26. コンテナーでサービスを起動 • 例えばWebサーバーを実行するには • docker container run --name=cont4 -d -p 8080:80 -it httpd:alpine • http://localhost:8080 でコンテナーの80ポートを使っているWebサー バーにアクセス可能 26
  27. 27. コンテナーを削除 • いらなくなったコンテナーはrmオプションで削除可能 • コンテナーを削除する前に停止が必要 • コマンド実行例 • 「docker container stop cont1」で停止 • 「docker container rm cont1」で削除 • 「--force」オプションも使える • docker container rm cont1 --force 27
  28. 28. コンテナーイメージを削除 • いらなくなったコンテナーイメージは削除可能 • コマンド実行例 • 「docker image ls」でイメージ一覧を出して • 「docker image rm centos:7」でイメージを消す 28
  29. 29. Docker応用編 29
  30. 30. ディレクトリーをマウントして起動 • データを永続化したい時の手段の一つ • -vオプションでコンテナーにローカルディレクトリーをマウント可能 • -wオプションでカレントディレクトリーを指定可能 • ローカルのディレクトリーのほか、NFS、iSCSI、FCなどのボリューム をコンテナーにマウントも可能 • 「Docker Volume Plugins」で検索してみよう 30
  31. 31. ディレクトリーのマウント実行例 • ローカルディレクトリーをコンテナーの/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 カレントディレク トリーを指定
  32. 32. カスタムイメージ作成 • Dockerイメージは好きなようにカスタマイズして使える • docker container commit • 作成したコンテナーをイメージに変換 • docker image build • dockerfileに記述した通りのイメージを作る 32
  33. 33. 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 特権モード
  34. 34. 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
  35. 35. docker image buildによるイメージ生成 • 作成したいコンテナーイメージはdockerfileに記述する • インストールしたいパッケージ • 設定 • 起動するプロセス • ファイルコピー etc... 35
  36. 36. 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 最後にドットをつける
  37. 37. イメージ作成のHowto • Alpineイメージを使うと軽量化できる • 例えばPython3のイメージ 37
  38. 38. カスタムイメージの登録 • Docker Hubにカスタムイメージを登録できます。 • アカウントを作成(無料)します • 作成したイメージをアップロード • Gitにdockerfileを置いて、イメージの自動ビルドも可能 • 利用方法は「Docker Hub イメージ登録」などで検索 • https://docs.docker.com/docker-hub/ 38
  39. 39. ローカルリポジトリーの作成と利用 • Docker Hubに「Docker Registry」イメージがある • https://hub.docker.com/_/registry • http://docs.docker.jp/registry/toc.html • これを使うと独自のDockerリポジトリーを立ち上げられる • 繰り返し使うイメージのキャッシュ • 非公開にしたいイメージの管理 • 常時オンラインではない環境での利用 39
  40. 40. Docker Composeとは • アプリケーションコンテナー作成を自動化するDockerのツール • 環境構築を自動化 • 構築、停止、再構築が自由自在 • 冪等性 • サービスの状態を表示 • ログ出力 40 OS MySQL Webサーバー WordPressサイト
  41. 41. docker-composeのインストール • 方法はいくつかある • yumやaptなどを使ってパッケージをインストール • Pythonモジュールを使う • バイナリーをGitHubからダウンロードして展開 41
  42. 42. Docker Composeの使いかた概要 • プロジェクトディレクトリーを作成 • 「docker-compose.yml」を作成して記述 • 「docker-compose up -d」で構築開始 • YAMLの内容に沿ってアプリケーションをデプロイ • 「docker-compose logs」でログを確認 • 「docker-compose down」でアプリケーションを削除 42
  43. 43. 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サーバーをデプロイし ている。わかりやすい
  44. 44. 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. 45. 少々待てばデプロイ完了 45
  46. 46. まとめ • Dockerは便利ですね • シングルホストでDockerを活用するのは簡単 • マルチホストでは?...例えば • Docker Swarm • Kubernetes • Rancher 46

×