Slide 1

Slide 1 text

(株)永和システムマネジメント @mtsmfm 松島 史秋 シュッと学ぶ Docker

Slide 2

Slide 2 text

松島 史秋 GitHub, Twitter @mtsmfm

Slide 3

Slide 3 text

興味あるもの - Docker - GraphQL

Slide 4

Slide 4 text

https://www.meetup.com/ja-JP/GraphQL-Tokyo/

Slide 5

Slide 5 text

勢いで作った

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

21 7

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

大事なことは 最初に

Slide 11

Slide 11 text

百聞は一見に 如かず

Slide 12

Slide 12 text

$ docker run \ hello-world

Slide 13

Slide 13 text

習うより慣れろ

Slide 14

Slide 14 text

想定読者 - Docker コマンドを 叩いたことがない - Git はわかる

Slide 15

Slide 15 text

1. Docker とは 2. なぜ必要か 3. 初手の使いどころ

Slide 16

Slide 16 text

Docker とは

Slide 17

Slide 17 text

雑に言うと

Slide 18

Slide 18 text

/ 以下全ファイルを $ git commit

Slide 19

Slide 19 text

そのファイル だけの世界で 指定したコマンドを 実行

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

hello-world という名前の Git リポジトリから リポジトリに設定された デフォルトのコマンド (/hello) を実行する

Slide 22

Slide 22 text

そのファイル だけの世界を 見てみる

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

hello-world リポジトリについてのメタ情報 コミット

Slide 25

Slide 25 text

コミットの中身 (/ 以下の全て)

Slide 26

Slide 26 text

/hello だけ

Slide 27

Slide 27 text

ほんとに?

Slide 28

Slide 28 text

Git リポジトリを 見に行こう

Slide 29

Slide 29 text

https://hub.docker.com/_/hello-world/

Slide 30

Slide 30 text

Dockerfile

Slide 31

Slide 31 text

~= git commit の 手順書

Slide 32

Slide 32 text

https://github.com/docker-library/hello-world/blob/bdee60d7ff6b98037657dc34a10e9ca4f fd6785f/hello-world/Dockerfile git init hello というファイ ルを / 以下に置いて コミット デフォルトのコマンドの設定

Slide 33

Slide 33 text

たしかに /hello だけっぽい

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

hello-world という名前の Git リポジトリから /hello を実行する

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

bash どころか ls すらない

Slide 38

Slide 38 text

ubuntu を見てみる

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

https://github.com/tianon/docker-brew-ubuntu-core/blob/fb06b03251856d9a3c143332398512b3895e33b6/xenial/ Dockerfile git init 配布されている Ubuntu のファイルを 展開してまるっとコミット rm, sed, mkdir など コマンドを 実行して起きたファイルの 変更をコミット

Slide 41

Slide 41 text

https://github.com/tianon/docker-brew-ubuntu-core/blob/fb06b03251856d9a3c143332398512b3895e33b6/xenial/ Dockerfile 1 2 3 4 5

Slide 42

Slide 42 text

1 2 3 4 5

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

なるほど 全部っぽい

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

作ったファイルが消えた?

Slide 49

Slide 49 text

おさらい

Slide 50

Slide 50 text

hello-world という名前の Git リポジトリから /hello を実行する

Slide 51

Slide 51 text

ubuntu という名前の Git リポジトリから bash を実行する ubuntu という名前の Git リポジトリから bash を実行する

Slide 52

Slide 52 text

ubuntu という名前の Git リポジトリから bash を実行する ubuntu という名前の Git リポジトリから bash を実行する どちらも一から実行

Slide 53

Slide 53 text

ubuntu docker run -it \ ubuntu bash touch hoge ls hoge docker run -it \ ubuntu bash

Slide 54

Slide 54 text

ubuntu docker run -it \ ubuntu bash touch hoge ls hoge docker run -it \ ubuntu bash Image Container

Slide 55

Slide 55 text

1. Docker とは 2. なぜ必要か 3. 初手の使いどころ

Slide 56

Slide 56 text

なぜ Docker が 必要か

Slide 57

Slide 57 text

https://www.docker.com/what-docker

Slide 58

Slide 58 text

”俺のマシンでは 動いたよ” 問題を無くす

Slide 59

Slide 59 text

- Ruby はどこにどうやって インストールされている? - 他に入っているものは? - ディレクトリ構成は? - 実行ユーザは?

Slide 60

Slide 60 text

しれっとあったりする依存

Slide 61

Slide 61 text

$ rails db:structure:load

Slide 62

Slide 62 text

https://github.com/rails/rails/blob/f73b845610931ddf0 3c756d804982776a3cc69a4/activerecord/lib/active_r ecord/tasks/postgresql_database_tasks.rb#L80 psql コマンドに依存している

Slide 63

Slide 63 text

プロジェクトで バージョン揃ってる?

Slide 64

Slide 64 text

アプリケーション サーバを動かすまで

Slide 65

Slide 65 text

1. 手元のマシンで開発する 2. 本番用のマシンを用意する 3. OS を入れる 4. アプリケーションの動作に必要なパッ ケージのインストールをする 5. デプロイ用のセットアップをする 6. デプロイする

Slide 66

Slide 66 text

B.C. (Before Container)

Slide 67

Slide 67 text

1. 手元のマシンで開発する 2. 本番用のマシンを用意する 3. OS を入れる 4. アプリケーションの動作に必要なパッ ケージのインストールをする 5. デプロイする 物理 CD 職人の手作業 職人の手作業

Slide 68

Slide 68 text

1. 手元のマシンで開発する 2. 本番用のマシンを用意する 3. OS を入れる 4. アプリケーションの動作に必要なパッ ケージのインストールをする 5. デプロイする IaaS OS のイメージ Capistrano Ansible

Slide 69

Slide 69 text

こういったツールは 今動いてる環境に 「うまく継ぎ足す」 ためのもの

Slide 70

Slide 70 text

ゼロから流すときと 今動いているものに 変更を加えるとき

Slide 71

Slide 71 text

全く同じになるかは わからない

Slide 72

Slide 72 text

特にロールバック

Slide 73

Slide 73 text

A.C. (After Container)

Slide 74

Slide 74 text

1. 手元のマシンで開発する 2. 本番用のマシンを用意する 3. OS を入れる 4. アプリケーションの動作に必要なパッ ケージのインストールをする 5. デプロイする IaaS Docker が動く何か Docker のクラスタ 管理する何か Docker

Slide 75

Slide 75 text

/ 以下をまるっと 入れかえるから 現在の状態を 気にしないで済む

Slide 76

Slide 76 text

/ 以下をまるっと 入れかえるから ロールバックも確実

Slide 77

Slide 77 text

Docker の Image と それを管理する 環境さえあれば それでいい

Slide 78

Slide 78 text

やりたいことは だいたい PaaS みたいなもの

Slide 79

Slide 79 text

1. Docker とは 2. なぜ必要か 3. 初手の使いどころ

Slide 80

Slide 80 text

1. 手元のマシンで開発する 2. 本番用のマシンを用意する 3. OS を入れる 4. アプリケーションの動作に必要なパッ ケージのインストールをする 5. デプロイする IaaS Docker が動く何か Docker のクラスタ 管理する何か Docker ここも Docker であるべき

Slide 81

Slide 81 text

開発環境は あまり Docker に やさしくない

Slide 82

Slide 82 text

エディタのサポート が乏しい

Slide 83

Slide 83 text

使いやすいところ

Slide 84

Slide 84 text

1. DB

Slide 85

Slide 85 text

DB のバージョン 揃ってますか

Slide 86

Slide 86 text

$ docker run \ -p 5432:5432 \ postgres:9.6.3 たったこれだけで 起動する

Slide 87

Slide 87 text

がんばって インストールする 必要などない

Slide 88

Slide 88 text

2. Selenium

Slide 89

Slide 89 text

https://groups.google.com/forum/#!topic/phantomjs/9aI5d-LDuNE

Slide 90

Slide 90 text

PhantomJS is dead

Slide 91

Slide 91 text

次は Headless Chrome

Slide 92

Slide 92 text

次は Headless Chrome 普通に Chrome 使え

Slide 93

Slide 93 text

PhantomJS の何が よかったか - (capybara-webkit より) インス コが楽 - ヘッドレスで邪魔にならない

Slide 94

Slide 94 text

PhantomJS の何が つらいか - PhantomJS でテストを通すため のハックが要るときが ある

Slide 95

Slide 95 text

PhantomJS が 一番確認されてる サポートブラウザに なっている!!!

Slide 96

Slide 96 text

Chrome が 邪魔にならずに 楽に使えれば それでいいはず

Slide 97

Slide 97 text

$ docker run \ -p 5900:5900 \ selenium/standalone-chrome-debug たったこれだけで起動する macOS だと finder から vnc://localhost:5900 でパスワード secret で 中が見れる

Slide 98

Slide 98 text

https://speakerdeck.com/eileencodes/building-the-new-rails-syste m-test-framework?slide=48

Slide 99

Slide 99 text

https://github.com/mtsmfm/rails-system-test-example

Slide 100

Slide 100 text

Headless Chrome だと 画面に描画しない分速いかも しれないが 速度で優位に立てないなら 微妙に違うブラウザを 使う意味はない

Slide 101

Slide 101 text

まとめ - Docker は / 以下を git commit 管理しているようなもの - Docker によって今すぐにでも楽 になる部分があるよ

Slide 102

Slide 102 text

開発環境がやさしくないのは Docker 使うのを サボってる人が多いから としか思えない

Slide 103

Slide 103 text

https://atom.io/packages/docker-linter-rubocop

Slide 104

Slide 104 text

https://github.com/mtsmfm/languageserver-ruby

Slide 105

Slide 105 text

Credits Background pattern from subtlepatterns.com Emoji provided free by Emoji One