Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Instant learning docker
Search
Fumiaki MATSUSHIMA
May 18, 2017
Programming
2
210
Instant learning docker
Fumiaki MATSUSHIMA
May 18, 2017
Tweet
Share
More Decks by Fumiaki MATSUSHIMA
See All by Fumiaki MATSUSHIMA
Learning from performance improvements on GraphQL Ruby
mtsmfm
1
1k
Ruby で作る Ruby (物理)
mtsmfm
1
190
GraphQL Ruby benchmark
mtsmfm
1
750
タイムアウトにご用心 / Timeout might break application state
mtsmfm
6
2.5k
Build REST API with GraphQL Ruby
mtsmfm
0
290
GraphQL Ruby をちょっとだけ速くした / Make graphql-ruby faster a bit
mtsmfm
1
680
Gaming PC on GCP
mtsmfm
0
690
How to introduce GraphQL to an existing React-Redux application
mtsmfm
1
220
Canary release in StudySapuri
mtsmfm
0
3k
Other Decks in Programming
See All in Programming
PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録
mashirou1234
0
420
Scaling your build logic
antalmonori
1
100
カンファレンス動画鑑賞会のススメ / Osaka.swift #1
hironytic
0
170
Оптимизируем производительность блока Казначейство
lamodatech
0
950
為你自己學 Python
eddie
0
520
最近のVS Codeで気になるニュース 2025/01
74th
1
100
PHPカンファレンス 2024|共創を加速するための若手の技術挑戦
weddingpark
0
140
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
550
月刊 競技プログラミングをお仕事に役立てるには
terryu16
1
1.2k
Simple組み合わせ村から大都会Railsにやってきた俺は / Coming to Rails from the Simple
moznion
3
2.2k
情報漏洩させないための設計
kubotak
5
1.3k
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
9
2.4k
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
335
57k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Building Adaptive Systems
keathley
38
2.4k
Done Done
chrislema
182
16k
The World Runs on Bad Software
bkeepers
PRO
66
11k
The Power of CSS Pseudo Elements
geoffreycrofte
74
5.4k
RailsConf 2023
tenderlove
29
970
Build your cross-platform service in a week with App Engine
jlugia
229
18k
A designer walks into a library…
pauljervisheath
205
24k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
960
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Transcript
(株)永和システムマネジメント @mtsmfm 松島 史秋 シュッと学ぶ Docker
松島 史秋 GitHub, Twitter @mtsmfm
興味あるもの - Docker - GraphQL
https://www.meetup.com/ja-JP/GraphQL-Tokyo/
勢いで作った
None
21 7
None
None
大事なことは 最初に
百聞は一見に 如かず
$ docker run \ hello-world
習うより慣れろ
想定読者 - Docker コマンドを 叩いたことがない - Git はわかる
1. Docker とは 2. なぜ必要か 3. 初手の使いどころ
Docker とは
雑に言うと
/ 以下全ファイルを $ git commit
そのファイル だけの世界で 指定したコマンドを 実行
None
hello-world という名前の Git リポジトリから リポジトリに設定された デフォルトのコマンド (/hello) を実行する
そのファイル だけの世界を 見てみる
None
hello-world リポジトリについてのメタ情報 コミット
コミットの中身 (/ 以下の全て)
/hello だけ
ほんとに?
Git リポジトリを 見に行こう
https://hub.docker.com/_/hello-world/
Dockerfile
~= git commit の 手順書
https://github.com/docker-library/hello-world/blob/bdee60d7ff6b98037657dc34a10e9ca4f fd6785f/hello-world/Dockerfile git init hello というファイ ルを / 以下に置いて コミット
デフォルトのコマンドの設定
たしかに /hello だけっぽい
None
hello-world という名前の Git リポジトリから /hello を実行する
None
bash どころか ls すらない
ubuntu を見てみる
None
https://github.com/tianon/docker-brew-ubuntu-core/blob/fb06b03251856d9a3c143332398512b3895e33b6/xenial/ Dockerfile git init 配布されている Ubuntu のファイルを 展開してまるっとコミット rm, sed,
mkdir など コマンドを 実行して起きたファイルの 変更をコミット
https://github.com/tianon/docker-brew-ubuntu-core/blob/fb06b03251856d9a3c143332398512b3895e33b6/xenial/ Dockerfile 1 2 3 4 5
1 2 3 4 5
None
None
なるほど 全部っぽい
None
None
作ったファイルが消えた?
おさらい
hello-world という名前の Git リポジトリから /hello を実行する
ubuntu という名前の Git リポジトリから bash を実行する ubuntu という名前の Git リポジトリから
bash を実行する
ubuntu という名前の Git リポジトリから bash を実行する ubuntu という名前の Git リポジトリから
bash を実行する どちらも一から実行
ubuntu docker run -it \ ubuntu bash touch hoge ls
hoge docker run -it \ ubuntu bash
ubuntu docker run -it \ ubuntu bash touch hoge ls
hoge docker run -it \ ubuntu bash Image Container
1. Docker とは 2. なぜ必要か 3. 初手の使いどころ
なぜ Docker が 必要か
https://www.docker.com/what-docker
”俺のマシンでは 動いたよ” 問題を無くす
- Ruby はどこにどうやって インストールされている? - 他に入っているものは? - ディレクトリ構成は? - 実行ユーザは?
しれっとあったりする依存
$ rails db:structure:load
https://github.com/rails/rails/blob/f73b845610931ddf0 3c756d804982776a3cc69a4/activerecord/lib/active_r ecord/tasks/postgresql_database_tasks.rb#L80 psql コマンドに依存している
プロジェクトで バージョン揃ってる?
アプリケーション サーバを動かすまで
1. 手元のマシンで開発する 2. 本番用のマシンを用意する 3. OS を入れる 4. アプリケーションの動作に必要なパッ ケージのインストールをする
5. デプロイ用のセットアップをする 6. デプロイする
B.C. (Before Container)
1. 手元のマシンで開発する 2. 本番用のマシンを用意する 3. OS を入れる 4. アプリケーションの動作に必要なパッ ケージのインストールをする
5. デプロイする 物理 CD 職人の手作業 職人の手作業
1. 手元のマシンで開発する 2. 本番用のマシンを用意する 3. OS を入れる 4. アプリケーションの動作に必要なパッ ケージのインストールをする
5. デプロイする IaaS OS のイメージ Capistrano Ansible
こういったツールは 今動いてる環境に 「うまく継ぎ足す」 ためのもの
ゼロから流すときと 今動いているものに 変更を加えるとき
全く同じになるかは わからない
特にロールバック
A.C. (After Container)
1. 手元のマシンで開発する 2. 本番用のマシンを用意する 3. OS を入れる 4. アプリケーションの動作に必要なパッ ケージのインストールをする
5. デプロイする IaaS Docker が動く何か Docker のクラスタ 管理する何か Docker
/ 以下をまるっと 入れかえるから 現在の状態を 気にしないで済む
/ 以下をまるっと 入れかえるから ロールバックも確実
Docker の Image と それを管理する 環境さえあれば それでいい
やりたいことは だいたい PaaS みたいなもの
1. Docker とは 2. なぜ必要か 3. 初手の使いどころ
1. 手元のマシンで開発する 2. 本番用のマシンを用意する 3. OS を入れる 4. アプリケーションの動作に必要なパッ ケージのインストールをする
5. デプロイする IaaS Docker が動く何か Docker のクラスタ 管理する何か Docker ここも Docker であるべき
開発環境は あまり Docker に やさしくない
エディタのサポート が乏しい
使いやすいところ
1. DB
DB のバージョン 揃ってますか
$ docker run \ -p 5432:5432 \ postgres:9.6.3 たったこれだけで 起動する
がんばって インストールする 必要などない
2. Selenium
https://groups.google.com/forum/#!topic/phantomjs/9aI5d-LDuNE
PhantomJS is dead
次は Headless Chrome
次は Headless Chrome 普通に Chrome 使え
PhantomJS の何が よかったか - (capybara-webkit より) インス コが楽 - ヘッドレスで邪魔にならない
PhantomJS の何が つらいか - PhantomJS でテストを通すため のハックが要るときが ある
PhantomJS が 一番確認されてる サポートブラウザに なっている!!!
Chrome が 邪魔にならずに 楽に使えれば それでいいはず
$ docker run \ -p 5900:5900 \ selenium/standalone-chrome-debug たったこれだけで起動する macOS
だと finder から vnc://localhost:5900 でパスワード secret で 中が見れる
https://speakerdeck.com/eileencodes/building-the-new-rails-syste m-test-framework?slide=48
https://github.com/mtsmfm/rails-system-test-example
Headless Chrome だと 画面に描画しない分速いかも しれないが 速度で優位に立てないなら 微妙に違うブラウザを 使う意味はない
まとめ - Docker は / 以下を git commit 管理しているようなもの -
Docker によって今すぐにでも楽 になる部分があるよ
開発環境がやさしくないのは Docker 使うのを サボってる人が多いから としか思えない
https://atom.io/packages/docker-linter-rubocop
https://github.com/mtsmfm/languageserver-ruby
Credits Background pattern from subtlepatterns.com Emoji provided free by Emoji
One