Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Instant learning docker

Instant learning docker

Fumiaki MATSUSHIMA

May 18, 2017
Tweet

More Decks by Fumiaki MATSUSHIMA

Other Decks in Programming

Transcript

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

    View Slide

  2. 松島 史秋
    GitHub, Twitter
    @mtsmfm

    View Slide

  3. 興味あるもの
    - Docker
    - GraphQL

    View Slide

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

    View Slide

  5. 勢いで作った

    View Slide

  6. View Slide

  7. 21
    7

    View Slide

  8. View Slide

  9. View Slide

  10. 大事なことは
    最初に

    View Slide

  11. 百聞は一見に
    如かず

    View Slide

  12. $ docker run \
    hello-world

    View Slide

  13. 習うより慣れろ

    View Slide

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

    View Slide

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

    View Slide

  16. Docker とは

    View Slide

  17. 雑に言うと

    View Slide

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

    View Slide

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

    View Slide

  20. View Slide

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

    View Slide

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

    View Slide

  23. View Slide

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

    View Slide

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

    View Slide

  26. /hello だけ

    View Slide

  27. ほんとに?

    View Slide

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

    View Slide

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

    View Slide

  30. Dockerfile

    View Slide

  31. ~= git commit の
    手順書

    View Slide

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

    View Slide

  33. たしかに /hello
    だけっぽい

    View Slide

  34. View Slide

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

    View Slide

  36. View Slide

  37. bash どころか
    ls すらない

    View Slide

  38. ubuntu を見てみる

    View Slide

  39. View Slide

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

    View Slide

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

    View Slide

  42. 1
    2
    3
    4
    5

    View Slide

  43. View Slide

  44. View Slide

  45. なるほど
    全部っぽい

    View Slide

  46. View Slide

  47. View Slide

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

    View Slide

  49. おさらい

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  56. なぜ Docker が
    必要か

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  61. $ rails db:structure:load

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  66. B.C.
    (Before
    Container)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  72. 特にロールバック

    View Slide

  73. A.C.
    (After
    Container)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  83. 使いやすいところ

    View Slide

  84. 1. DB

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  88. 2. Selenium

    View Slide

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

    View Slide

  90. PhantomJS is dead

    View Slide

  91. 次は
    Headless Chrome

    View Slide

  92. 次は
    Headless Chrome
    普通に
    Chrome
    使え

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide