Copyright © 2019. All rights reserved.
2020新卒 Docker研修
2020年4月3日
ハンズラボ株式会社
Welcome to HANDS LAB 🎉
2
3
講師の自己紹介
氏名: 矢澤 優 (やざわ すぐる)
社歴: 1年 (2019新卒)
所属: CRMのECチーム
使用言語: Python PHP Shell (Bash)
好きなDockerイメージ: distroless
1. 研修のゴール
2. Dockerってなに?
3. コマンド入門
4. Dockerfile入門
5. Dockerfile演習
6. docker-compose入門
7. docker-compose演習
0.アジェンダ
4
研修のゴール
5
Docker & docker-composeに関して...
分からないことが分からない
分からないことが分かる
分からないことを自力で調べて解決できる
カンゼンニリカイシタ
1.研修のゴール
6
Docker & docker-composeに関して...
分からないことが分からない
分からないことが分かる
分からないことを自力で調べて解決できる
カンゼンニリカイシタ
1.研修のゴール
7
● Dockerがどうやって動いているかなんとなく掴む
● 業務で使用するイメージを掴んでもらう
○ 道具として使えるようにする
1.研修のゴール
8
Dockerってなに?
9
● コンテナ
○ アプリケーションを隔離した環境で実行可能にした仮想
化技術
● Docker
○ コンテナ技術の代表ソフトウェア・エコシステム
○ コンテナイメージの作成・実行・共有を提供している
2.Dockerってなに? - 概要
10
2.Dockerってなに? - 仮想化との違い
11
Docker (コンテナ) Virtual Machine (VM)
Orientation and setupより
● アプリケーションの実行環境のコード化 (IaC)
○ Dockerfile
○ docker-compose.yml
● ポータビリティ
○ ローカルで動けばLinux・Unix上ならどこでも動く
● 軽量
2.Dockerってなに? - メリット
12
2.Dockerってなに? - エコシステムの全体像
13
Docker overviewより
2.Dockerってなに? - docker自体の仕組み
14
Docker overviewより
● ユーザからは一つのイメージに
見える
● 実は何層にもレイヤが積み重な
っている
● 基本的にレイヤが多いとイメー
ジサイズが大きくなる
2.Dockerってなに? - イメージの構造
15
イメージ、コンテナ、ストレージ・ドライバの理解 —
Docker-docs-ja 17.06.Beta ドキュメントより
16
Docker セットアップ
● Docker Desktop for Mac
● Install Docker Desktop on Mac
● 確認方法
$ docker version
$ docker info
休憩タイム
17
コマンド入門
18
● pull: イメージをDockerHubなどのレジストリから取得
● build: カスタムイメージ作成
● images: イメージの一覧表示
● run: コンテナの起動と実行
● start: コンテナの開始
● stop: コンテナの停止
● exec: コンテナでコマンドを実行
● rm: コンテナの削除
● logs: コンテナのログを表示
3.コマンド入門 - よく使うコマンド
19
3.コマンド入門 - ハンズオン1
20
1. イメージの確認
$ docker images
2. hello-worldというイメージを実行してみましょう
$ docker run hello-world
3. イメージの確認
$ docker images
3.コマンド入門 - ハンズオン2
21
1. イメージの取得
$ docker pull nginx:1.17-alpine
2. Nginxコンテナを起動・実行
$ docker run -p 127.0.0.1:8080:80 -d --name test
nginx:1.17-alpine
3. localhost:8080にアクセスしてみましょう
4. コンテナの停止・削除
$ docker rm -f test
Dockerfile入門
22
scratchイメージファイル
4.Dockerfile入門 - 構造
23
FROM scratch
COPY hello /
CMD ["/hello"]
hello-worldのDockerfile
hello-world/Dockerfile at master · docker-library/hello-world
helloファイルのコピー
helloファイルの実行
hello-worldのイメージ
● FROM: ベースイメージの指定
● RUN: イメージの新しいレイヤでコマンド実行して結果をコミット
● CMD: コンテナ起動後に実行するコマンド
● EXPOSE: コンテナ実行中にリッスンするネットワークポートを指定
● COPY: ファイルやディレクトリのコピー
● USER: RUNやCMDの実行ユーザを指定
● WORKDIR: RUNやCMDの作業ディレクトリ(=$PWD)を指定
4.Dockerfile入門 - よく使うInstruction
24
Dockerfile演習
25
5.Dockerfile演習
26
動かしてみたいアプリケーションのDockerfileを作成して、
自分だけのオリジナルイメージを作ってみましょう
● Vue.js / Django / Flask / Express etc…
● 公式リファレンス Dockerfile reference
● 余裕があればBest practices for writing Dockerfilesを参考にして改良し
てみましょう
docker-compose入門
27
6.docker-compose入門 - 概要
28
docker-composeとは...
1つ以上のコンテナを定義して
Docker上で実行するツール
6.docker-compose入門 - メリット
29
● コマンドの内容をファイルに記述できる
○ Shell Scriptを書かずに済む
● コマンドのミスがなくなる
● 複数のコンテナを1ファイルで管理できる
● 依存関係をコントロールできる
6.docker-compose入門 - よく使うコマンド
● up: コンテナの起動と実行
● ps: コンテナのプロセス確認
● logs: コンテナのログ確認
● exec: コンテナ上でコマンド実行
● stop: コンテナの停止
● down: コンテナの停止とリソース(ネットワークやボリュー
ム等)の削除
30
● version: composeのバージョン
● services: コンテナの設定ブロック
● build: Dockerfileがあるパスを指定
● ports: ポートバインド
● volumes: ホストパスのマウント
● depends_on: サービスの依存関係を
定義
● image: ビルド済み / 公開されているイ
メージを指定
6.docker-compose入門 - YAML設定ファイル
31
version: '3.7'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis
docker-compose.yml
Dockerfile演習で作成したDockerfileを
docker-composeで動かしてみましょう
● 公式リファレンス Compose file version 3 reference
6.docker-compose入門 - ハンズオン1
32
6.docker-compose入門 - ハンズオン2
33
Get started with Docker Composeをやってみましょう
● 構成
○ Flask (Pythonの軽量Web Framework)
○ Redis (インメモリ・キーバリューNoSQL)
● ハンズオン用リポジトリ
○ https://github.com/hands-lab/newcomer2020-docker-lesson
● 制約
○ Pythonのバージョンは3.7 → 3.8
○ requirements.txtはpipenvに置き換える
○ apk addを1行から複数行にする
○ Flaskの実行ユーザを変更
○ Redisは最新のタグを明示的に指定
6.docker-compose入門 - ハンズオン2
34
docker-compose演習
35
docker-composeを使って動かしてみましょう
● Vue.js / Django / MySQL / Express etc...
● 入門で作ったFlask+redisをFlask+MySQLにしてみる
7.docker-compose演習
36
● Docker overview
● Orientation and setup
● Reference documentation
● Best practices for writing Dockerfiles
● Compose file version 3 reference
リファレンス
37
Thank you!
38

Newcomer2020 Docker研修