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

Dockerインストール後の設定をしよう/Set up after installing Docker

Dockerインストール後の設定をしよう/Set up after installing Docker

Daichi Yamaguchi

June 14, 2019
Tweet

More Decks by Daichi Yamaguchi

Other Decks in Technology

Transcript

  1. 本日のテーマ • Dockerインストール後の設定について説明 ◦ ググるとapt-get install docker-ce 、yum install docker-ce、と言ったイン

    ストールするだけのナレッジが散見される ◦ インストールするだけが間違いというわけではなく、色々設定できるよという ことを簡単に紹介 • Docker Documentationを紐解いていこう ◦ Referenceに詳細や設定例などが記載されている
  2. 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
  3. そもそもdockerd(dokcer daemon)とは • Dockerの中心 ◦ Dockerの各種コンポーネント(image,container,network,etc...)の管理者 的コンポートネント ◦ Docker daemonがDocker

    Containerから見たときの基盤(OS)と言っても いい役割を担っている ◦ dockerdコマンドで設定。または /etc/docker/daemon.json ファイルで設 定
  4. Dockerインストール後に設定をしよう! 1. Storage Driverを設定する 2. スワップ制限機能を設定する 3. Docker Daemonにリモートアクセスしたい場合に設定する 4.

    全てのDockerコンテナに対してDNSを設定する 5. 暗号化されていないレジストリにアクセスする(プライベートレジストリなど) 6. Proxy環境下におけるDocker Daemon設定 7. Proxy環境下におけるDockerコンテナの設定
  5. 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/
  6. 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
  7. スワップ制限機能を設定する • 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
  8. 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
  9. 全ての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
  10. 暗号化されていないレジストリにアクセスする(プライベートレジストリなど) • 自前でプライベートレジストリを作成し(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/
  11. Proxy環境下におけるDocker Daemon設定 • Proxy環境下において、Docker Daemonはデフォルト設定 ではインターネットに出られない ◦ Docker Hubへのアクセスもできない・・・ ◦

    dockerd起動時にHTTP_PROXY、HTTPS_PROXYの設定を読み込ませる ことで対応可能 [参考] Control Docker with systemd https://docs.docker.com/config/daemon/systemd/
  12. 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/
  13. 今までの設定をファイルに記述する(例) { "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
  14. ちょっと別の話題 rootlessModeについて • Docker daemonはrootで実行されており、脆弱性や設定ミスによりホストOSが 乗っ取られる可能性を常に抱えている ◦ 実際にCVE-2019-5736で脆弱性が発表され、対応などが話題になった • rootlessであれば上記の問題はかなりクリアできる!

    • プレリリース済みの19.03にも実験的に機能追加されている • 残りの詳細はコンテナ関連メンテナであるNTT須田さんの記事をご参考ください (丸投げ) ◦ https://medium.com/nttlabs/rootless-docker-12decb900fb9 ◦ 他にもググるとQiitaなどでやってみた記事がみれます。実行自体は簡単な印象