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
240
2
Share
Instant learning docker
Fumiaki MATSUSHIMA
May 18, 2017
More Decks by Fumiaki MATSUSHIMA
See All by Fumiaki MATSUSHIMA
Learning from performance improvements on GraphQL Ruby
mtsmfm
1
1.3k
Ruby で作る Ruby (物理)
mtsmfm
1
260
GraphQL Ruby benchmark
mtsmfm
1
890
タイムアウトにご用心 / Timeout might break application state
mtsmfm
6
2.7k
Build REST API with GraphQL Ruby
mtsmfm
0
390
GraphQL Ruby をちょっとだけ速くした / Make graphql-ruby faster a bit
mtsmfm
1
770
Gaming PC on GCP
mtsmfm
0
800
How to introduce GraphQL to an existing React-Redux application
mtsmfm
1
300
Canary release in StudySapuri
mtsmfm
0
3.2k
Other Decks in Programming
See All in Programming
第3木曜LT会 #28
tinykitten
PRO
0
100
Exploring RuboCop with MCP
koic
0
690
JOAI2026 1st solution - heron0519 -
heron0519
0
130
PHP で mp3 プレイヤーを実装しよう
m3m0r7
PRO
0
270
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
3
130
t *testing.T は どこからやってくるの?
otakakot
1
540
アーキテクチャモダナイゼーションとは何か
nwiizo
17
5.1k
PDI: Como Alavancar Sua Carreira e Seu Negócio
marcelgsantos
0
120
「話せることがない」を乗り越える 〜日常業務から登壇テーマをつくる思考法〜
shoheimitani
4
790
2026-03-27 #terminalnight 変数展開とコマンド展開でターミナル作業をスマートにする方法
masasuzu
0
330
의존성 주입과 모듈화
fornewid
0
130
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
290
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
260
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
The Pragmatic Product Professional
lauravandoore
37
7.2k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
340
The SEO identity crisis: Don't let AI make you average
varn
0
440
HDC tutorial
michielstock
2
620
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.1k
Marketing to machines
jonoalderson
1
5.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
How STYLIGHT went responsive
nonsquared
100
6.1k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
890
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