Slide 1

Slide 1 text

Docker の使い方 hashimoto syuta [email protected]

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

自己紹介

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

あるある1

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

あるある2

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

イメージと コンテナ

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

イメージの 作り方

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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 ① ② ※ ログは二回目 生成時なので キャッシュ使ってます

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

イメージの 搬送

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

コンテナを 動かす

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

Questions?

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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/