Dockerの使い方

 Dockerの使い方

2019/03/24 相模原 Docker&その他いろいろMeetUpでの発表資料です。Dockerのイメージ作成からコンテナとして動かすまでの概要を解説しています。

2b3af8a2652d7e6c9caf92e6b1fe7c34?s=128

hashimotosyuta

March 24, 2019
Tweet

Transcript

  1. Docker の使い方 hashimoto syuta syuta.hashimoto@gmail.com

  2. 2 今日の内容 • あるある1 あるある2 • イメージとコンテナ • イメージの作り方 • イメージの搬送

    • コンテナを動かす
  3. 自己紹介

  4. 4 橋本 修太 • openSUSE ユーザ会で主に活動中 • その他、小江戸 LUG などの LUG

    に出没 • 最近は国際協力関連のイベントにも参加 Twitter @syuta_openSUSE FB: syutah 海に出よう >
  5. あるある1

  6. 6 Web アプリを作ってみた Assets Node.js Ruby Rails カーネル

  7. 7 Web アプリをもう一個作ってみた Assets Node.js Ruby Rails Assets Rails カーネル

  8. 8 すると・・・ バージョンがあわない 等々 Assets Node.js Ruby Rails Assets Rails カーネル

  9. 9 そこである人考えた Assets Node.js Ruby Rails Assets Rails Node.js Ruby

    カーネル 必要なライブラリを一式セットにしたらいいんじゃないか
  10. 10 それがコンテナ Assets Node.js Ruby Rails Assets Rails Node.js Ruby

    カーネル これ
  11. あるある2

  12. 12 ちょっとアプリを試してみたい データをビジュアル化してくれるアプリケーション これ

  13. 13 依存ライブラリが結構ある データをビジュアル化してくれるアプリケーション python libizon これら

  14. 14 でも、既に自分の PC にある lib と、 バージョンや設定が合わない データをビジュアル化してくれるアプリケーション python libizon

    python libizon カーネル
  15. 15 そこである人考えた データをビジュアル化してくれるアプリケーション python libizon python libizon カーネル 必要なライブラリとセットにした一式で試したらいいんじゃないか

  16. イメージと コンテナ

  17. 17 イメージとコンテナ OS Ruby プロセス Node.js プロセス OS Ruby プロセス

    Node.js プロセス よし、動いているプロセスを コンテナ化して、 一気にこっちの OS へ移動だ!
  18. 18 コンテナを動かす? OS Ruby プロセス Node.js プロセス OS Ruby プロセス

    Node.js プロセス よし、動いているプロセスを コンテナ化して、 一気にこっちの OS へ移動だ! まだそこまで技術は進歩していません 参照するアセットも不明
  19. 19 イメージからコンテナをつくる イメージ Ruby プロセス Node.js プロセス OS イメージ Asset

    Ruby プロセス Node.js プロセス Asset
  20. イメージの 作り方

  21. 21 イメージからコンテナをつくる イメージ Ruby プロセス Node.js プロセス OS イメージ Asset

    Ruby プロセス Node.js プロセス Asset
  22. 22 イメージの作り方 $> docker build -t syuta/mynginx . $> ls

    Dockerfile 「 Dockerfile 」というファイルのあるディレクトリで行う 「 Docker build 」というコマンドがイメージを作成 • -t で名前( tag 名)を付与 • 「 . 」で、カレントディレクトリを指定 これでカレントディレクトリにある Dockerfile が 参照される
  23. 23 Dockerfile FROM debian RUN apt update && apt install

    -y nginx EXPOSE 22 80 CMD ["/usr/sbin/nginx", "-g", "daemon off;"] イメージ作成書 debian をベースにする nginx インストール 22 と 80 番のポートを開放 nginx を実行: docker はプロセスが フォアグラウンドでないと終了してしまう
  24. 24 【余談1】イメージの構成 FROM debian ① RUN apt update && apt

    install -y nginx ② EXPOSE 22 80 CMD ["/usr/sbin/nginx", "-g", "daemon off;"] ① ベースイメージ ② レイヤー: RO レイヤー: RW 「イメージ」は、読み込み専用のレイヤーを積み重ねている RUN ・ COPY ・ ADD の時作成されるとの事 イメージの 内部構成
  25. 25 【余談2】イメージの生成ログとレイヤー Sending build context to Docker daemon 3.072kB Step

    1/4 : FROM debian ---> 0af60a5c6dd0 Step 2/4 : RUN apt update && apt install -y nginx ---> Using cache ---> ef4a9b7e6bee Step 3/4 : EXPOSE 22 80 ---> Running in 60daac0028ae Removing intermediate container 60daac0028ae ---> a55d92c45762 Step 4/4 : CMD ["/usr/sbin/nginx", "-g", "daemon off;"] ---> Running in 6e3c37a7e131 Removing intermediate container 6e3c37a7e131 ---> 137104d9176b Successfully built 137104d9176b Successfully tagged syuta/mynginx:latest ① ベースイメージ ② レイヤー: RO レイヤー: RW ① ② ※ ログは二回目 生成時なので キャッシュ使ってます
  26. 26 イメージ完成 手元にあるイメージを確認 $> docker images 手元にあるイメージを確認 REPOSITORY TAG IMAGE

    ID CREATED SIZE syuta/mynginx latest 137104d9176b 2 hours ago 177MB 生成されている なお、イメージはファイルのように、ドラッグ&ドロップで移動、とか、 SCP で転送、とか、できません。では、どうするかというと・・・
  27. イメージの 搬送

  28. 28 イメージからコンテナをつくる イメージ Ruby プロセス Node.js プロセス OS イメージ Asset

    Ruby プロセス Node.js プロセス Asset
  29. 29 イメージの管理場所 基本は Docker Hub イメージ Docker Hub イメージ イメージ

    $> docker login $> docker push syuta/mynginx Docker Hub の、 syuta アカウントに イメージを push ※ アカウント名は例です。
  30. 30 イメージの管理場所は他にもある GitLab や Portus など、 registry は色々あります イメージ GitLab

    ・ Portus 等々 イメージ イメージ イメージを管理する所をレジストリ ( registry )と呼んでいます。 一般的に、 docker login でレジストリ にログインして、イメージ名の頭に レジストリの URL を付けて、 push します。
  31. コンテナを 動かす

  32. 32 イメージからコンテナをつくる イメージ Ruby プロセス Node.js プロセス OS イメージ Asset

    Ruby プロセス Node.js プロセス Asset
  33. 33 コンテナを動かす $> docker run -d -p 80:80 syuta/nginx •

    -d バックグラウンド動作モード(デタッチ) • -p ホストのポートと繋げる syuta/nginx というイメージからコンテナを作 成して動かす この時、手元に syuta/nginx というイメージが なければ、 Docker Hub から取得してくる
  34. 34 コンテナの確認 $> docker ps -a -a 停止中のコンテナも表示 CONTAINER ID

    IMAGE COMMAND CREATED 2abb0fd72ffb syuta/mynginx "/usr/sbin/nginx -g …" 5 seconds ago STATUS PORTS NAMES Up 3 seconds 22/tcp, 0.0.0.0:80->80/tcp sharp_neumann イメージ名
  35. 35 コンテナの停止 $> docker stop sharp_neumann 「 docker ps 」時に表示された

    NAMES あるいは、 CONTAINER ID $> docker rm sharp_neumann そして削除
  36. Questions?

  37. Thank you. Join the conversation, contribute & have a lot

    of fun! www.opensuse.org
  38. 38 Have a Lot of Fun, and Join Us At:

    www.opensuse.org
  39. General Disclaimer This document is not to be construed as

    a promise by any participating organisation to develop, deliver, or market a product. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. openSUSE makes no representations or warranties with respect to the contents of this document, and specifically disclaims any express or implied warranties of merchantability or fitness for any particular purpose. The development, release, and timing of features or functionality described for openSUSE products remains at the sole discretion of openSUSE. Further, openSUSE reserves the right to revise this document and to make changes to its content, at any time, without obligation to notify any person or entity of such revisions or changes. All openSUSE marks referenced in this presentation are trademarks or registered trademarks of SUSE LLC, in the United States and other countries. All third-party trademarks are the property of their respective owners. License This slide deck is licensed under the Creative Commons Attribution-ShareAlike 4.0 International license. It can be shared and adapted for any purpose (even commercially) as long as Attribution is given and any derivative work is distributed under the same license. Details can be found at https://creativecommons.org/licenses/by-sa/4.0/ Credits Template Richard Brown rbrown@opensuse.org Design & Inspiration openSUSE Design Team http://opensuse.github.io/branding- guidelines/