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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
110
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
170
의존성 주입과 모듈화
fornewid
0
130
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
240
Going Multiplatform with Your Android App (Android Makers 2026)
zsmb
2
420
Alternatives to JPA 2026
debop
0
110
Don't Prompt Harder, Structure Better
kitasuke
0
760
ファインチューニングせずメインコンペを解く方法
pokutuna
0
310
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
4
3k
事業会社でのセキュリティ長期インターンについて
masachikaura
0
250
Swift Concurrency Type System
inamiy
0
520
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
240
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
180
Rails Girls Zürich Keynote
gr2m
96
14k
Utilizing Notion as your number one productivity tool
mfonobong
4
290
WENDY [Excerpt]
tessaabrams
10
37k
Between Models and Reality
mayunak
3
260
4 Signs Your Business is Dying
shpigford
187
22k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
770
Paper Plane
katiecoart
PRO
1
49k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
320
Ethics towards AI in product and experience design
skipperchong
2
260
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
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