Slide 1

Slide 1 text

© SIOS Technology, Inc. All rights Reserved. 世界⼀わかりみの深い コンテナ&Docker⼊⾨ 武井 宜⾏

Slide 2

Slide 2 text

© SIOS Technology, Inc. All rights Reserved. About me 2 Internal Only BCPVUNF Noriyuki TAKEI ෢Ҫ ٓߦ Information • サイオステクノロジー株式会社 • クラウドネイティブアプリケーション • 千葉県在住 Favorites • Azure • Squash • Sweets blog https://tech-lab.sios.jp/ core skill Azure Kubernetes Service Docker

Slide 3

Slide 3 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 3

Slide 4

Slide 4 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 4 Internal Only ίϯςφͱ͸ʁ コンテナとは、 平たく⾔ってしまえば、 単なるプロセスです。

Slide 5

Slide 5 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 5 Internal Only Կ͕Ͱ͖Δͷʁ OSの中にOSが⽴てられます。 $FOU04 ϗετ04 8FCαʔόʔ༻$FOU04 σʔλϕʔε༻$FOU04 ϑΝΠϧαʔόʔ༻$FOU04 似たようなのに 仮想化ってあっ たような・・・。

Slide 6

Slide 6 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 6 Internal Only Ծ૝Խͱͷҧ͍ ホストOS HyperVisor OS OS プロセス プロセス プロセス プロセス Docker Engine プロセス プロセス プロセス プロセス Ծ૝Խ ίϯςφ プロセス プロセス プロセス プロセス コンテナはOSが 不要な分だけ ⾼速︕︕

Slide 7

Slide 7 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 7 Internal Only Ծ૝Խͱͷҧ͍ ホストOS HyperVisor OS OS プロセス プロセス プロセス プロセス Docker Engine プロセス プロセス プロセス プロセス プロセス プロセス プロセス プロセス カーネル Docker上のプロセスとホストOS上のプロセスはカーネルを共有します。

Slide 8

Slide 8 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 8 Internal Only 以下のような2つのアプリケーションを⼀つの ホストOS上に構築することを考えてみます。 var www html / ΞϓϦ app.phpの 所有者は www-data(id=33) app.php var www html / ΞϓϦ app.phpの 所有者は www-data(id=33) app.php

Slide 9

Slide 9 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 9 Internal Only ホストOS HyperVisor OS var www html / ΞϓϦ app.phpの 所有者は www-data(id=33) app.php OS var www html / ΞϓϦ app.phpの 所有者は www-data(id=33) app.php 仮想化だったら簡単︕︕

Slide 10

Slide 10 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 10 Internal Only ホストOS Docker Engine var www html / ΞϓϦ app.phpの 所有者は www-data(id=33) app.php var www html / ΞϓϦ app.phpの 所有者は www-data(id=33) app.php コンテナではどうやるの︖ ユーザー名 かぶってるし ファイル名 かぶってるし

Slide 11

Slide 11 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 11 Internal Only そこで コンテナでは超重要な概念である の出番です。 namespace

Slide 12

Slide 12 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 12 Internal Only OBNFTQBDFͱ͸ʁ プロセス、ファイル構造、ユーザーID、グループIDなどを⼀つのOSの中で分離す る技術である。 プログラム⾔語の中ではよく登場する概念である。Javaのパッケージと⾔う概念と にているものがあり、同⼀の名称を使いたい場合(例えばUser.java)、namespace を分けると実現可能となる。 package jp.sios.funcA User.java package jp.sios.funcB User.java コンテナのコアテクノロジーであるnamespaceという技術は2006年あたりにLinux カーネルに実装された技術であり、最新の技術ではない。

Slide 13

Slide 13 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 13 Internal Only ホストOS apache(親) apache(⼦) apache(⼦) pid 1 / www html ファイル システム initプロセス pid 2 プロセス namespace A apache(親) apache(⼦) apache(⼦) / www html プロセス ファイル システム pid 1 pid 3 namespace B pid 2 pid 3 pid 2 pid 3 namespaceが異なれば同 じファイル名やディレクト リが⼀つのOS上に作れる。 pid 1

Slide 14

Slide 14 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 14 Internal Only ホストOS apache(親) apache(⼦) apache(⼦) pid 1 / www html ファイル システム initプロセス pid 2 プロセス namespace A apache(親) apache(⼦) apache(⼦) / www html プロセス ファイル システム pid 1 pid 1 pid 3 namespace B pid 2 pid 3 pid 2 pid 3 このnamespace で区切られた部分 がコンテナ

Slide 15

Slide 15 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 15 Internal Only では namespace(コンテナ) を 作ってみよう

Slide 16

Slide 16 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 16 Internal Only # ps ax PID TTY STAT TIME COMMAND 1 ? Ss 0:03 /sbin/init 2 ? S 0:00 [kthreadd] 4 ? I< 0:00 [kworker/0:0H] 6 ? I< 0:00 [mm_percpu_wq] 7 ? S 0:00 [ksoftirqd/0] 8 ? I 0:01 [rcu_sched] ………… # unshare --mount-proc -p --fork /bin/bash # ps ax PID TTY TIME CMD 1 pts/0 00:00:00 bash 11 pts/0 00:00:00 ps namespaceを作成する前は、 プロセスがたくさんあります。 namespace作成にはunshareコマンドを使います。 namespaceを作成したあと は、プロセス空間が別になる ので、bashのプロセスしか ないです。

Slide 17

Slide 17 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 17 Internal Only 参考︓コンテナ技術⼊⾨ https://employment.en-japan.com/engineerhub/entry/2019/02/05/103000 $ ROOTFS=$(mktemp -d) $ CID=$(sudo docker container create centos:centos7) $ sudo docker container export $CID | tar -x -C $ROOTFS $ ln -s /usr/local/bin/bash $ROOTFS/bin/bash $ sudo docker container rm $CID $ UUID=$(uuidgen) $ sudo cgcreate -t $(id -un):$(id -gn) -a $(id -un):$(id -gn) -g cpu,memory:$UUID $ cgset -r memory.limit_in_bytes=10000000 $UUID $ cgset -r cpu.cfs_period_us=1000000 $UUID $ cgset -r cpu.cfs_quota_us=300000 $UUID $ CMD="/bin/sh" $ cgexec -g cpu,memory:$UUID \ unshare -muinpfr /bin/sh -c " mount -t proc proc $ROOTFS/proc && touch $ROOTFS$(tty); mount --bind $(tty) $ROOTFS$(tty) && touch $ROOTFS/dev/pts/ptmx; mount --bind /dev/pts/ptmx $ROOTFS/dev/pts/ptmx && ln -sf /dev/pts/ptmx $ROOTFS/dev/ptmx && touch $ROOTFS/dev/null && mount --bind /dev/null $ROOTFS/dev/null && /bin/hostname $UUID && exec capsh --chroot=$ROOTFS --drop=cap_sys_chroot -- -c 'exec $CMD' " ファイルシステムやユーザー空間まで分けた実⽤的なCentOS7のnamespace(コ ンテナ)を作ります。

Slide 18

Slide 18 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 18 Internal Only ホストOS namespace / 先のコマンドは、以下の2つのことを 実施しています。 bin etc var log spool ・・・ / bin etc var log spool ・・・ CentOS7の動作 に必要なファイ ルを取得 namespaceの作 成

Slide 19

Slide 19 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 19 Internal Only こんなにたくさんの コマンド打つの めんどくさい・・・

Slide 20

Slide 20 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 20 Internal Only Dockerを使えば解決 たった1⾏のコマンドで、 先程のダラダラ⻑いコマンドと同じことが 実現出来ます。 $ docker run -it centos:centos7 /bin/bash

Slide 21

Slide 21 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 21 Internal Only namespaceの作成その他コンテナ作成に必要な もろもろのコマンドの簡略化 コンテナを作成するの必要なOSのイメージを Docker Hubからダウンロード つまり Dockerで実現できることは 主に以下の2つ

Slide 22

Slide 22 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 22 Internal Only ところで Docker Hubって なに︖

Slide 23

Slide 23 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 23 Internal Only %PDLFS)VCͱ͸ʁ %PDLFS)VC CentOS 6 / bin etc ・・・ 7 / bin etc ・・・ 8 / bin etc ・・・ Ubuntu 16.0 / bin etc ・・・ 18.0 / bin etc ・・・ 19.0 / bin etc ・・・ etc ・・・ bin etc ・・・ 8 / bin etc ・・・ CentOS ホストOS namespace $ docker run -it centos:centos8 /bin/bash ダウンロードしてくるイメー ジを指定 イメージをダウ ンロード 1$

Slide 24

Slide 24 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 24 Internal Only Dockefileを 使うと コンテナをカスタマイズ できます︕︕

Slide 25

Slide 25 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 25 Internal Only Dockerfile FROM centos:centos7 RUN yum –y install httpd CentOS7のイメージにApacheをインストールしてみます。そのた めのDockerfileは以下のとおりです。 CentOS7のイメージをダウンロード Apacheをインストール

Slide 26

Slide 26 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 26 Internal Only %PDLFS)VC CentOS 6 / bin etc ・・・ 7 / bin etc ・・・ 8 / bin etc ・・・ etc ・・・bin etc ・・・ 7 / bin etc ・・・ CentOS ホストOS namespace $ docker build -t web. イメージをダウ ンロード Dockerfileを作成し、以下のコマンドを実⾏すると、CentOS7のイ メージ上にApacheがインストールされたコンテナが作成されます。 1$ var httpd Apacheの インストール

Slide 27

Slide 27 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 27 Internal Only etc ・・・bin etc ・・・ 7 / bin etc ・・・ CentOS ホストOS namespace $ docker push XXX.azurecr.io/web:1.0 さらに作成したコンテナをもとにプライベートリポジトリにオリジナ ルイメージとしてプッシュ出来ます。 1$ var httpd ϓϥΠϕʔτ ϦϙδτϦ web etc ・・・bin etc ・・・ 1.0 / bin etc ・・・ var httpd

Slide 28

Slide 28 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 28 Internal Only さらにプライベートリポジトリにプッシュしたイメージを他の開発者 に配ることも出来ます。 ϓϥΠϕʔτ ϦϙδτϦ web etc ・・・bin etc ・・・ 1.0 / bin etc ・・・ var httpd ։ൃऀ" ։ൃऀ# ։ൃऀ$

Slide 29

Slide 29 text

© SIOS Technology, Inc. All rights Reserved. コンテナとは︖ 29 Internal Only Dockerfile FROM centos:centos7 ENV idp_version=3.4.6 # Inatall the libraries neccesary for building Shibboleth IdP RUN yum -y update && \ yum -y install wget java-1.8.0-openjdk # Download Shibboleth IdP RUN wget -q https://shibboleth.net/downloads/identity-provider/$idp_version/shibboleth-identity- provider-$idp_version.tar.gz && \ tar -zxvf shibboleth-identity-provider-$idp_version.tar.gz -C /opt && \ ln -s /opt/shibboleth-identity-provider-$idp_version/ /opt/shibboleth-idp COPY bin/ /usr/local/bin/ RUN chmod 750 /usr/local/bin/init-idp.sh もっと複雑な環境を構築するためにDockerfileです。

Slide 30

Slide 30 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 30

Slide 31

Slide 31 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 31 Internal Only Dockerのネットワークは以下のようになっています。

Slide 32

Slide 32 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 32 Internal Only こう考えるとわかりやすい︖Dockerのネットワークを物理サーバ ーに置き換えてみました︕︕

Slide 33

Slide 33 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 33 Internal Only Network Namespace ルーティングテーブルなどネットワークを動作させる のに必要な機能が完全に分離された環境を作るための ものです。 Dockerのネットワークを構成しているコアな技術は以下の3つ︕︕ 仮想スイッチ PC内で物理のL2スイッチと同じように振る舞うのが 仮想スイッチと⾔われるものです。これもカーネルが 持っている機能で、ip linkコマンドで作成することが できます。 仮想 ネットワーク インターフェース 仮想的なネットワークインターフェースで、ip link addコマンドで作成することができます。

Slide 34

Slide 34 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 34 Internal Only Netowork Namespaceってなに︖Network Namespaceがない状 態で仮想NICを2つ作ると。。。

Slide 35

Slide 35 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 35 Internal Only Netowork Namespaceがあると。。。

Slide 36

Slide 36 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 36 Internal Only 実際にネットワークを作ってみましょう︕︕Dockerコマンドを使 うとラクチンですが、あえてそれは使わないでやってみます。でも いまから説明することは、知らないうちにDockerコマンドが裏側 でやっています。今回のゴールは以下のネットワークを作成するこ とです。

Slide 37

Slide 37 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 37 Internal Only 最初はなにもない以下のような状態です。

Slide 38

Slide 38 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 38 Internal Only Network Namespaceを作成します。 # ip netns add ns1 # ip netns add ns2 Network Namespaceが出来 ました。

Slide 39

Slide 39 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 39 Internal Only 次に仮想スイッチを作成します。 # ip link add br0 type bridge 仮想スイッチが出来ました。

Slide 40

Slide 40 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 40 Internal Only 以下の仮想ネットワークインターフェースを作成します。 ns-veth1 先程作成したNetwork Namespaceであるns1の⽅に接続 される仮想NIC br-veth1 ns-veth1とペアで作成され、仮想スイッチに接続される仮 想NIC ns-veth2 先程作成したNetwork Namespaceであるns2の⽅に接続 される仮想NIC br-veth2 ns-veth2とペアで作成され、仮想スイッチに接続される仮 想NIC rt-veth 物理NICとルーティングされる仮想NIC br-veth3 rt-vethとペアで作成され、仮想スイッチに接続される仮想 NIC

Slide 41

Slide 41 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 41 Internal Only # ip link add name ns-veth1 type veth peer name br-veth1 # ip link add name ns-veth2 type veth peer name br-veth2 # ip link add name rt-veth type veth peer name br-veth3 仮想NICが出来ました。

Slide 42

Slide 42 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 42 Internal Only Network Namespaceに仮想ネットワークインターフェースを接続 します。 # ip link set ns-veth1 netns ns1 # ip link set ns-veth2 netns ns2 接続出来ました。

Slide 43

Slide 43 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 43 Internal Only 仮想スイッチに仮想ネットワークインターフェースを接続します。 # ip link set dev br-veth1 master br0 # ip link set dev br-veth2 master br0 # ip link set dev br-veth3 master br0 接続出来ました。

Slide 44

Slide 44 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 44 Internal Only 仮想NICと仮想スイッチをUpをしたり、IPアドレスを付与したり します。 # ip netns exec ns1 ip link set ns-veth1 up # ip netns exec ns2 ip link set ns-veth2 up # ip link set rt-veth up # ip link set br-veth1 up # ip link set br-veth2 up # ip link set br-veth3 up # ip link set br0 up # ip netns exec ns1 ip addr add 192.168.0.1/24 dev ns-veth1 # ip netns exec ns2 ip addr add 192.168.0.2/24 dev ns-veth2 # ip addr add 192.168.0.100/24 dev rt-veth ■ 仮想NICと仮想スイッチのUp ■ IPアドレスの付与

Slide 45

Slide 45 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 45 Internal Only こうなります。

Slide 46

Slide 46 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 46 Internal Only 動作確認します。 # ip netns exec ns1 ping 192.168.0.2 64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.071 ms ・・・以下略・・・

Slide 47

Slide 47 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 47 Internal Only GoogleのパブリックDNSにPing打ってみます。 # ip netns exec ns1 ping 8.8.8.8 connect: Network is unreachable

Slide 48

Slide 48 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 48 Internal Only IP転送が有効になっていない 原因は以下の3つ・・・ Network Namespace内で デフォルトゲートウェイが設定されてない NATされていない

Slide 49

Slide 49 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 49 Internal Only IP転送が有効になっていない

Slide 50

Slide 50 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 50 Internal Only IP転送が有効になっていない → これで解決︕︕ # echo 1 > /proc/sys/net/ipv4/ip_forward

Slide 51

Slide 51 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 51 Internal Only Network Namespace内でデフォルトゲートウェイが設定されてな い ここをns1とns2のデ フォゲにする必要がある。

Slide 52

Slide 52 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 52 Internal Only , 2., 25 Network Namespace内でデフォルトゲートウェイが設定されてな い → これで解決︕︕ # ip netns exec ns1 ip route add default via 192.168.0.100 # ip netns exec ns2 ip route add default via 192.168.0.100

Slide 53

Slide 53 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 53 Internal Only NATされていない ns1というNetwork Namespaceから8.8.8.8あてのパケットの送信元IPアドレ スと宛先IPアドレスは以下のようになっています。 送信元IPアドレス 192.168.0.1 宛先IPアドレス 8.8.8.8 このアドレスでは外部ネットワークへは届きません。送信元IPアドレスがプライ ベートアドレスだからです。インターネットに出るときには、送信元を物理NIC のIPアドレスに変換する必要はあります。つまりNATする必要があります。 送信元IPアドレス 物理NICのIPアドレス 宛先IPアドレス 8.8.8.8

Slide 54

Slide 54 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 54 Internal Only NATされない → これで解決︕︕ # iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE ルーティングが終わった後に、送信元が192.168.0.0/24で、かつeth0という ネットワークデバイスから出ていくパケットの送信元アドレスをeth0のアドレ ス、つまり物理NICのアドレスに変更するという内容です。

Slide 55

Slide 55 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 55 Internal Only 再び動作確認︕︕ # ip netns exec ns1 ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=127 time=12.9 ms ・・・以下略・・・

Slide 56

Slide 56 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 56 Internal Only ちなみに外部ネットワークへのパケットはこのように流れています。 まずNetwork Namespaceのns1から出たパケットは、宛先が 192.169.0.0/24宛ではないので、先程設定したデフォルトゲート ウェイの設定により、rt-veth(192.168.0.100)に向かいます。

Slide 57

Slide 57 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 57 Internal Only IP転送の設定によるrt-vethから物理NICにルーティングされます。

Slide 58

Slide 58 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 58 Internal Only iptablesコマンドで⾏ったNATの設定により、送信元IPアドレスが 物理NICのIPアドレスに変換されます。

Slide 59

Slide 59 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 59 Internal Only パケットがインターネットに出ていきます。

Slide 60

Slide 60 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 60 Internal Only ちなみにDockerなら以下のコマンドで⼀発でネットワーク構築で きる︕︕ # docker run -it -d --name test01 centos:centos7 # docker run -it -d --name test02 centos:centos7

Slide 61

Slide 61 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 61 Internal Only docker0というのは、Dockerをインストールしたときにデフォル トで作成される仮想スイッチです。特に何も指定せずコンテナを作 成すると、このdocker0に接続されます。新しく2つのコンテナを 作成したので、「veth9f0eb93」「veth7010a0b」という新たに 2つの仮想NICが出来上がっています。 # ip addr show ・・・略・・・ 5: docker0: mtu 1500 qdisc noqueue state UP group default link/ether 02:42:be:19:a5:0e brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:beff:fe19:a50e/64 scope link valid_lft forever preferred_lft forever 32: veth9f0eb93@if31: mtu 1500 qdisc noqueue master docker0 state UP group default link/ether fa:43:35:64:5a:8b brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::f843:35ff:fe64:5a8b/64 scope link valid_lft forever preferred_lft forever 34: veth7010a0b@if33: mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 2e:f1:f5:7d:0f:0e brd ff:ff:ff:ff:ff:ff link-netnsid 1 inet6 fe80::2cf1:f5ff:fe7d:f0e/64 scope link valid_lft forever preferred_lft forever

Slide 62

Slide 62 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 62 Internal Only docker0の仮想スイッチに接続されている仮想NICを⾒てみます。 確かに先程の「veth9f0eb93」「veth7010a0b」という仮想NIC がdocker0という仮想スイッチに接続されているのがわかります。 # ip link show master docker0 32: veth9f0eb93@if31: mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default link/ether fa:43:35:64:5a:8b brd ff:ff:ff:ff:ff:ff link-netnsid 0 34: veth7010a0b@if33: mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default link/ether 2e:f1:f5:7d:0f:0e brd ff:ff:ff:ff:ff:ff link-netnsid 1

Slide 63

Slide 63 text

© SIOS Technology, Inc. All rights Reserved. Dockerのネットワーク 63 Internal Only では、各コンテナのデフォルトゲートウェイも調べてみましょう。 docker inspectコマンドでコンテナの詳細情報を⾒ることが出来ま す。–formatオプションを使うと、出⼒する情報を整形出来ます。 デフォルトゲートウェイの情報のみを出すように整形してみます。 # docker inspect --format '{{.NetworkSettings.Gateway}}' test01 172.17.0.1 # docker inspect --format '{{.NetworkSettings.Gateway}}' test02 172.17.0.1

Slide 64

Slide 64 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 64

Slide 65

Slide 65 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 65 Internal Only 開発環境の構築を例に 仮想化との違いを 考えてみます。

Slide 66

Slide 66 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 66 Internal Only Ծ૝Խͷ৔߹ package jp.sios.funcB User.java 開発環境 システム管理者 システム構成が変更になったので、開発 エンジニアの⽅は、この⼿順書に従って、 環境を変更して下さーい。

Slide 67

Slide 67 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 67 Internal Only Ծ૝Խͷ৔߹ 開発環境 あれ、開発環境がうまく動かない・・・。 あっ、⼿順書通りに実施していなかっ た・・・。 システム管理者

Slide 68

Slide 68 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 68 Internal Only ίϯςφͷ৔߹ 開発環境 Dockerイメージダウ ンロード ϓϥΠϕʔτ ϦϙδτϦ Dockerイメージから コンテナを⽣成 システム管理者 システム構成が変更になっ たDockerイメージをレポジ トリからにプッシュ

Slide 69

Slide 69 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 69 Internal Only コンテナを⽤いると開発環境の構築において以下のようなメリットが あります。 開発者のPCにDockerさえインストールされていれ ば、イメージをダウンロードするだけで環境ができ あがるので、ミスがない コンテナはカーネルを含まず軽量なのでダウンロー ドが速い。よって可搬性がよい。

Slide 70

Slide 70 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 70 Internal Only 開発環境だけでなく 本番環境にも コンテナを持っていたら 便利だと思いませんか︖

Slide 71

Slide 71 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 71 Internal Only 開発環境 Dockerイメージダウ ンロード ϓϥΠϕʔτ ϦϙδτϦ 修正したDockerイ メージをプッシュ システム管理者 システム構成が変更になっ たDockerイメージをレポジ トリからにプッシュ 本番環境 Dockerイメージから 本番環境のコンテナ を⽣成 ᶃ ᶄ ᶅ ᶆ

Slide 72

Slide 72 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 72 Internal Only 開発環境 ϓϥΠϕʔτ ϦϙδτϦ ①〜④はOSまで含む環境 なので、開発環境でも本番 環境でも、その動作に違い はない。 システム管理者 本番環境 ᶃ ᶄ ᶅ ᶆ

Slide 73

Slide 73 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 73 Internal Only つまり、本番環境にコンテナを⽤いると、以下のようなメリットがあ ります。 本番環境も検証環境も、OSまで含めた同じイメー ジを使うので、全く同じように動作する。仮想化で ありがちな、本番環境と検証環境の動作の差異がな い。 コンテナはホストOSのカーネルを共有し、OSのイ メージのみのため、サイズが⼩さく、可搬性がよい。 リポジトリからのダウンロードもすぐに終わる。

Slide 74

Slide 74 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 74 Internal Only でも、本番環境では いろんなことを 考慮しなければ なりません。

Slide 75

Slide 75 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 75 Internal Only 例えば、、、 負荷分散 無停⽌更新 監視 ネットワーク管理(ルーティングなど) 他にもたくさん、、、、

Slide 76

Slide 76 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 76 Internal Only それ、全部 Kubernetes が解決します︕︕

Slide 77

Slide 77 text

© SIOS Technology, Inc. All rights Reserved. 仮想化との違い 77 Internal Only 開発環境 ϓϥΠϕʔτ ϦϙδτϦ ここをKubernetesにします。 システム管理者 Kubernetes ᶃ ᶄ ᶅ ᶆ

Slide 78

Slide 78 text

© SIOS Technology, Inc. All rights Reserved. さいごに 78 Internal Only ؔ࿈ϒϩά 【連載】世界⼀わかりみが深いコンテナ & Docker⼊⾨ https://tech-lab.sios.jp/archives/18811

Slide 79

Slide 79 text

ご清聴ありがとうございました