web-dev-qa-db-ja.com

ループバックデバイスの使用は、実稼働での使用には強くお勧めしません

CentOS 7.1ボックスでdockerをテストしたいのですが、次の警告が表示されました。

[root@docker1 ~]# docker run busybox /bin/echo Hello Docker
Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
Hello Docker

この警告を抑制する理由と方法を知りたいです。

CentOSインスタンスは、vagrantによって作成されたvirtualboxで実行されています。

40
rocksun

警告メッセージは、Dockerストレージ構成が「ループバックデバイス」を使用しているために発生します。これは、ファイルシステム上のファイルによって実際にバックアップされる/dev/loop0などの仮想ブロックデバイスです。これは、Dockerを概念実証として迅速に稼働させるための簡単なハック以上のものではありませんでした。

警告をsuppressしたくない。警告が発行されないようにストレージ構成を修正します。これを行う最も簡単な方法は、Dockerのdevicemapperストレージドライバーが使用するローカルディスク領域を割り当てて使用することです。

LVMを使用していて、ボリュームグループに空きスペースがある場合、これは比較的簡単です。たとえば、Dockerに100Gのスペースを与えるには、最初にデータとメタデータボリュームを作成します。

# lvcreate -n docker-data -L 100G /dev/my-vg
# lvcreate -n docker-metadata -L1G /dev/my-vg

次に、/etc/sysconfig/docker-storageを次のように編集して、このスペースを使用するようにDockerを構成します。

DOCKER_STORAGE_OPTIONS=-s devicemapper --storage-opt dm.datadev=/dev/my-vg/docker-data --storage-opt dm.metadatadev=/dev/my-vg/docker-metadata

LVMを使用していない場合、またはVGで使用可能な空きスペースがない場合、他のブロックデバイス(スペアディスクやパーティションなど)を同様の方法でDockerに公開できます。

このトピックに関する興味深いメモがあります here

55
larsks

ありがとう。これは私を夢中にさせました。 bashがこのメッセージを出力していると思いました。私はbashに対してバグを提出しようとしていました。残念ながら、ラップトップなどでディスクが完全に使用されている場合、提示されるオプションはどれも実行できません。そのシナリオに対する私の答えは次のとおりです。

これがラップトップの/ etc/sysconfig/docker-storageで使用したものです。

DOCKER_STORAGE_OPTIONS="--storage-opt dm.no_warn_on_loop_devices=true"

注:これを有効にするには、Dockerサービスを再起動する必要がありました。 Fedoraでのコマンドは次のとおりです。

systemctl stop docker
systemctl start docker

また、再起動コマンド(systemctl restart docker)。ただし、再起動する前に、停止が実際に機能したことを確認することをお勧めします。

コンテナでSELinuxを無効にすることを気にしない場合、別のオプションはオーバーレイを使用することです。これを完全に説明するリンクは次のとおりです。

http://www.projectatomic.io/blog/2015/06/notes-on-Fedora-centos-and-docker-storage-drivers/

/ etc/sysconfig/dockerの要約:

OPTIONS='--selinux-enabled=false --log-driver=journald'

および/ etc/sysconfig/docker-storageの場合:

DOCKER_STORAGE_OPTIONS=-s overlay

ストレージタイプを変更すると、Dockerを再起動すると、イメージとコンテナストア全体が破壊されます。これを行うときは、/ var/lib/dockerフォルダー内のすべてのものも同様です。

systemctl stop docker
rm -rf /var/lib/docker
dnf reinstall docker
systemctl start docker

RHEL 6.6では、Dockerアクセス​​を持つすべてのユーザーが私の秘密鍵にアクセスし、ボリュームを介して最も些細なハッキングでアプリケーションをルートとして実行できます。 SELinuxは、FedoraとRHEL 7でそれを防ぐ1つのことです。それは、追加のRHEL 7セキュリティがコンテナ外のSELinuxからどれだけ発生するのか、コンテナ内でどれだけ発生するのかは不明です...

一般に、ループバックデバイスは、最大100GBの制限とわずかに低下したパフォーマンスが問題にならない場合に適しています。私が見つけることができる唯一の問題は、実行中にディスクがいっぱいになった場合にドッカーストアが破損する可能性があることです...それはおそらくクォータまたは他の簡単な解決策で回避できます。

ただし、実稼働インスタンスの場合、これを正しく設定することは時間と労力の価値があります。

実稼働インスタンスでは100Gが過剰になる場合があります。コンテナとイメージはかなり小さいです。多くの組織は、セキュリティと分離の追加手段として、VM内でdockerコンテナを実行しています。その場合、VMごとに実行されるコンテナの数がかなり少ない可能性があります。その場合、10Gでも十分かもしれません。

最後のメモ。ダイレクトlvmを使用している場合でも、/ var/lib/dockerに追加のファイルシステムが必要になる可能性があります。理由は、コマンド「docker load」は、データストアに追加する前に、このフォルダーにロードされるイメージの非圧縮バージョンを作成するためです。そのため、小さく軽量にしようとする場合は、直接lvm​​以外のオプションを検討してください。

3
briemers

@Igor Ganapolsky 2月と@MincăDaniel Andrei

これをチェックして:

systemctl edit docker --full

ディレクティブEnvironmentFile[Service]ブロックにリストされていない場合、運はありません(Centos7でもこの問題があります)が、次のように標準のsystemdユニットを拡張できます。

systemctl edit docker EnvironmentFile=-/etc/sysconfig/docker ExecStart= ExecStart=/usr/bin/dockerd $OPTIONS

そして、コンテンツを含む/etc/sysconfig/dockerファイルを作成します。

OPTIONS="-s overlay --storage-opt dm.no_warn_on_loop_devices=true"

0
METAJIJI