Slide 1

Slide 1 text

Dockerインストール後の設定を しよう Cloud Native JP Nagoya 2019/6/14 山口 大地

Slide 2

Slide 2 text

自己紹介 氏名:山口 大地(Yamaguchi Daichi) Twitter:@dayamaguchi1 [専門領域] ・VMware/AWSのOS(Win,Linux)〜ミドルウェアの設計・構築・運用 ・物理機器(ラック、サーバ、ストレージ、UPS)の選定なども少々 ・名古屋を盛り上げていきたい人

Slide 3

Slide 3 text

本日のテーマ ● Dockerインストール後の設定について説明 ○ ググるとapt-get install docker-ce 、yum install docker-ce、と言ったイン ストールするだけのナレッジが散見される ○ インストールするだけが間違いというわけではなく、色々設定できるよという ことを簡単に紹介 ● Docker Documentationを紐解いていこう ○ Referenceに詳細や設定例などが記載されている

Slide 4

Slide 4 text

Dockerインストールしよう!

Slide 5

Slide 5 text

Dockerインストールしよう! ● インストール手順は割愛 ○ 詳細はDocker Documentをきちんと確認しよう ○ OS毎にきちんと詳細に記載されており、とても丁寧 ○ https://docs.docker.com/install/ ● 今回の検証用では、以下環境で実施 ○ AWS EC2 ○ Docker 18.09(current) # cat /etc/lsb-release | grep DISTRIB_DESCRIPTION DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS" # uname -a Linux ubuntu 4.15.0-1039-aws #41-Ubuntu SMP Wed May 8 10:43:54 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Slide 6

Slide 6 text

dockerdを設定しよう!

Slide 7

Slide 7 text

そもそもdockerd(dokcer daemon)とは ● Dockerの中心 ○ Dockerの各種コンポーネント(image,container,network,etc...)の管理者 的コンポートネント ○ Docker daemonがDocker Containerから見たときの基盤(OS)と言っても いい役割を担っている ○ dockerdコマンドで設定。または /etc/docker/daemon.json ファイルで設 定

Slide 8

Slide 8 text

daemon.jsonファイルを編集 ● daemon.jsonファイルを編集することでdockerdの設定を明 示的にする ○ 編集後の反映はdockerプロセスの再起動が必要 ○ 一部の設定はシグナルのリロードでも反映可能 [参考] Daemon configuration file https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-c onfiguration-file

Slide 9

Slide 9 text

Dockerインストール後に設定をしよう! 1. Storage Driverを設定する 2. スワップ制限機能を設定する 3. Docker Daemonにリモートアクセスしたい場合に設定する 4. 全てのDockerコンテナに対してDNSを設定する 5. 暗号化されていないレジストリにアクセスする(プライベートレジストリなど) 6. Proxy環境下におけるDocker Daemon設定 7. Proxy環境下におけるDockerコンテナの設定

Slide 10

Slide 10 text

Storage Driverを設定する ● 何はともあれ、storage driverをoverlay2に設定する ○ ubuntuではデフォルトでaufs、CentOSならdevicemapper ○ overlay2はDocumantationにも「overlay2 is the preferred storage driver, for all currently supported Linux distributions, and requires no extra configuration.」と記載されており、特別な理由がなければoverlay2に設定 する [参考] Docker storage drivers https://docs.docker.com/storage/storagedriver/select-storage-driver/

Slide 11

Slide 11 text

Storage Driverを設定する ● CentOS派な方向け情報 ○ devicemapperは非推奨 ○ xfsを利用している場合、d_typeの有効化がoveylay使用の前提条件。 フォーマット時にftype=1を指定しよう ■ インストール時には上記指定ができないので、 /var/lib/dockerに別ディスクをマウントす る必要あり ■ ext4であればoverlayはデフォルトで使用可能 ○ すでにdevicemapperで稼働しているんだけど!な方は、以下の手順で変 更しよう ■ dockerサービスを停止する必要あり ■ きちんと事前に確認・検証してください(自己責任で!) [参考] Use the OverlayFS storage driver https://docs.docker.com/storage/storagedriver/overlayfs-driver/#configure-docker- with-the-overlay-or-overlay2-storage-driver

Slide 12

Slide 12 text

スワップ制限機能を設定する ● Ubuntuでdocker infoすると、以下警告が表示される WARNING: No swap limit support ● Linuxカーネル側にてスワップ制限する機能が無効になっていることが原因。ス ワップ制限しなくてもいいなら良いが、スワップは遅いので設定変更する ○ grubの変更とOS再起動が必要 [参考] Your kernel does not support cgroup swap limit capabilities https://docs.docker.com/install/linux/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit- capabilities

Slide 13

Slide 13 text

Docker Daemonにリモートアクセスしたい場合に設定する ● Docker Daemonはunix domain socketがデフォルト ○ 選べるソケットはunix, tcp, fd ○ リモート通信したい場合はtcpに変更する ■ デフォルトで暗号化されていないので注意。暗号化しよう ● docker 18.09以降ではsshによるリモートホストも可能に ○ 公開鍵認証で接続 [参考] Daemon socket option https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-s ocket-option

Slide 14

Slide 14 text

全てのDockerコンテナに対してDNSを設定する ● DNSサーバのIPを指定 ○ sudo dockerd --dns 8.8.8.8 ● DNSサーチドメインを指定 ○ sudo dockerd --dns-search example.com [参考] Daemon DNS options https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-d ns-options

Slide 15

Slide 15 text

暗号化されていないレジストリにアクセスする(プライベートレジストリなど) ● 自前でプライベートレジストリを作成し(Docker Registry 等)、httpで通信させたい場合などに設定 ○ Documentでもセキュアにすることを推奨している。httpの利用は自己責任 で。 ○ --insecure-registry オプションでレジストリとなるサーバ接続先:ポートを指 定する [参考] Insecure registries https://docs.docker.com/engine/reference/commandline/dockerd/#insecure-r egistries Test an insecure registry https://docs.docker.com/registry/insecure/

Slide 16

Slide 16 text

Proxy環境下におけるDocker Daemon設定 ● Proxy環境下において、Docker Daemonはデフォルト設定 ではインターネットに出られない ○ Docker Hubへのアクセスもできない・・・ ○ dockerd起動時にHTTP_PROXY、HTTPS_PROXYの設定を読み込ませる ことで対応可能 [参考] Control Docker with systemd https://docs.docker.com/config/daemon/systemd/

Slide 17

Slide 17 text

Proxy環境下におけるDockerコンテナの設定 ● Proxy環境下において、Dockerコンテナもデフォルト設定で はインターネットに出られない ○ build時にcurlやgit clone、packageインストール失敗など ○ コンテナを起動するユーザのホームディレクトリに ~/.docker/config.json  を作成 ○ config.jsonにhttpproxy、httpsproxy、noProxyを指定する事で、コンテナ 起動時に環境変数が引き渡される ○ 記載すべき情報は以下URL参照 [参考] Configure Docker to use a proxy server https://docs.docker.com/network/proxy/

Slide 18

Slide 18 text

今までの設定をファイルに記述する(例) { "dns": [8.8.8.8], "dns-search": [example.com], "storage-driver": "overlay2", "insecure-registries": [mydomainregistry.com:5000] } [Service] Environment="HTTPS_PROXY=https://proxy.example.com:443/" "NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp" /etc/docker/daemon.json /etc/systemd/system/docker.service.d/http-proxy.conf

Slide 19

Slide 19 text

今までの設定をファイルに記述する(例) { "proxies": { "default": { "httpProxy": "http://127.0.0.1:3001", "httpsProxy": "http://127.0.0.1:3001", "noProxy": "*.test.example.com,.example2.com" } } } ~/.docker/config.json

Slide 20

Slide 20 text

ちょっと別の話題 rootlessModeについて ● Docker daemonはrootで実行されており、脆弱性や設定ミスによりホストOSが 乗っ取られる可能性を常に抱えている ○ 実際にCVE-2019-5736で脆弱性が発表され、対応などが話題になった ● rootlessであれば上記の問題はかなりクリアできる! ● プレリリース済みの19.03にも実験的に機能追加されている ● 残りの詳細はコンテナ関連メンテナであるNTT須田さんの記事をご参考ください (丸投げ) ○ https://medium.com/nttlabs/rootless-docker-12decb900fb9 ○ 他にもググるとQiitaなどでやってみた記事がみれます。実行自体は簡単な印象

Slide 21

Slide 21 text

まとめ ● 公式Documentはちゃんと読もう ● インストールだけで終わらず、dockerdの設定も見直そう ● storage-driverはoverlay2にしよう

Slide 22

Slide 22 text

おしまい