$30 off During Our Annual Pro Sale. View Details »

Dockerの使い方

 Dockerの使い方

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

hashimotosyuta

March 24, 2019
Tweet

More Decks by hashimotosyuta

Other Decks in Technology

Transcript

  1. Docker の使い方
    hashimoto syuta
    [email protected]

    View Slide

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

    View Slide

  3. 自己紹介

    View Slide

  4. 4
    橋本 修太
    • openSUSE ユーザ会で主に活動中
    • その他、小江戸 LUG などの LUG に出没
    • 最近は国際協力関連のイベントにも参加
    Twitter @syuta_openSUSE
    FB: syutah
    海に出よう >

    View Slide

  5. あるある1

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. 9
    そこである人考えた
    Assets
    Node.js
    Ruby
    Rails
    Assets
    Rails
    Node.js
    Ruby
    カーネル
    必要なライブラリを一式セットにしたらいいんじゃないか

    View Slide

  10. 10
    それがコンテナ
    Assets
    Node.js
    Ruby
    Rails
    Assets
    Rails
    Node.js
    Ruby
    カーネル
    これ

    View Slide

  11. あるある2

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. イメージと
    コンテナ

    View Slide

  17. 17
    イメージとコンテナ
    OS
    Ruby プロセス
    Node.js プロセス
    OS
    Ruby プロセス
    Node.js プロセス
    よし、動いているプロセスを
    コンテナ化して、
    一気にこっちの OS へ移動だ!

    View Slide

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

    View Slide

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

    View Slide

  20. イメージの
    作り方

    View Slide

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

    View Slide

  22. 22
    イメージの作り方
    $> docker build -t syuta/mynginx .
    $> ls
    Dockerfile
    「 Dockerfile 」というファイルのあるディレクトリで行う
    「 Docker build 」というコマンドがイメージを作成
    ● -t で名前( tag 名)を付与
    ● 「 . 」で、カレントディレクトリを指定
    これでカレントディレクトリにある Dockerfile が
    参照される

    View Slide

  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 はプロセスが
    フォアグラウンドでないと終了してしまう

    View Slide

  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 の時作成されるとの事
    イメージの
    内部構成

    View Slide

  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


    ※ ログは二回目
    生成時なので
    キャッシュ使ってます

    View Slide

  26. 26
    イメージ完成
    手元にあるイメージを確認
    $> docker images
    手元にあるイメージを確認
    REPOSITORY TAG IMAGE ID CREATED SIZE
    syuta/mynginx latest 137104d9176b 2 hours ago 177MB
    生成されている
    なお、イメージはファイルのように、ドラッグ&ドロップで移動、とか、
    SCP で転送、とか、できません。では、どうするかというと・・・

    View Slide

  27. イメージの
    搬送

    View Slide

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

    View Slide

  29. 29
    イメージの管理場所
    基本は Docker Hub
    イメージ
    Docker Hub
    イメージ
    イメージ
    $> docker login
    $> docker push syuta/mynginx
    Docker Hub の、 syuta アカウントに
    イメージを push
    ※ アカウント名は例です。

    View Slide

  30. 30
    イメージの管理場所は他にもある
    GitLab や Portus など、 registry は色々あります
    イメージ
    GitLab ・ Portus 等々
    イメージ
    イメージ
    イメージを管理する所をレジストリ
    ( registry )と呼んでいます。
    一般的に、 docker login でレジストリ
    にログインして、イメージ名の頭に
    レジストリの URL を付けて、 push
    します。

    View Slide

  31. コンテナを
    動かす

    View Slide

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

    View Slide

  33. 33
    コンテナを動かす
    $> docker run -d -p 80:80 syuta/nginx
    ● -d バックグラウンド動作モード(デタッチ)
    ● -p ホストのポートと繋げる
    syuta/nginx というイメージからコンテナを作
    成して動かす
    この時、手元に syuta/nginx というイメージが
    なければ、 Docker Hub から取得してくる

    View Slide

  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
    イメージ名

    View Slide

  35. 35
    コンテナの停止
    $> docker stop sharp_neumann
    「 docker ps 」時に表示された NAMES
    あるいは、 CONTAINER ID
    $> docker rm sharp_neumann
    そして削除

    View Slide

  36. Questions?

    View Slide

  37. Thank you.
    Join the conversation,
    contribute & have a lot of fun!
    www.opensuse.org

    View Slide

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

    View Slide

  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
    [email protected]
    Design & Inspiration
    openSUSE Design Team
    http://opensuse.github.io/branding-
    guidelines/

    View Slide