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



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


March 24, 2019

More Decks by hashimotosyuta

Other Decks in Technology


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

    に出没 • 最近は国際協力関連のイベントにも参加 Twitter @syuta_openSUSE FB: syutah 海に出よう >
  2. 9 そこである人考えた Assets Node.js Ruby Rails Assets Rails Node.js Ruby

    カーネル 必要なライブラリを一式セットにしたらいいんじゃないか
  3. 17 イメージとコンテナ OS Ruby プロセス Node.js プロセス OS Ruby プロセス

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

    Node.js プロセス よし、動いているプロセスを コンテナ化して、 一気にこっちの OS へ移動だ! まだそこまで技術は進歩していません 参照するアセットも不明
  5. 22 イメージの作り方 $> docker build -t syuta/mynginx . $> ls

    Dockerfile 「 Dockerfile 」というファイルのあるディレクトリで行う 「 Docker build 」というコマンドがイメージを作成 • -t で名前( tag 名)を付与 • 「 . 」で、カレントディレクトリを指定 これでカレントディレクトリにある Dockerfile が 参照される
  6. 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 はプロセスが フォアグラウンドでないと終了してしまう
  7. 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 の時作成されるとの事 イメージの 内部構成
  8. 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 ① ② ※ ログは二回目 生成時なので キャッシュ使ってます
  9. 26 イメージ完成 手元にあるイメージを確認 $> docker images 手元にあるイメージを確認 REPOSITORY TAG IMAGE

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

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

    ・ Portus 等々 イメージ イメージ イメージを管理する所をレジストリ ( registry )と呼んでいます。 一般的に、 docker login でレジストリ にログインして、イメージ名の頭に レジストリの URL を付けて、 push します。
  12. 33 コンテナを動かす $> docker run -d -p 80:80 syuta/nginx •

    -d バックグラウンド動作モード(デタッチ) • -p ホストのポートと繋げる syuta/nginx というイメージからコンテナを作 成して動かす この時、手元に syuta/nginx というイメージが なければ、 Docker Hub から取得してくる
  13. 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,>80/tcp sharp_neumann イメージ名
  14. 35 コンテナの停止 $> docker stop sharp_neumann 「 docker ps 」時に表示された

    NAMES あるいは、 CONTAINER ID $> docker rm sharp_neumann そして削除
  15. 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/