Dockerコンテナにどのくらいのリソースがあるかを説明する方法は?
JavaとDockerの翻訳記事は、私にこの短いメモを書くよう促しました。誰もがこれを知っており、結果に乏しいトピックに関する情報を検索する必要があります。 私は長い間LXCを使用してきましたが、これはまたコンテナリソースをcgroupに制限しますが、この問題はすでにそこで解決されています。
Dockerは、cgroupツールを使用してコンテナーの使用統計と制限を提供します。これは(Debianの)パス/sys/fs/cgroup/
で利用できますが、システムユーティリティtop, free, ps
などを含むすべてのアプリケーションで使用できるわけではありません。 Linux Containersプロジェクトは、 LXCFSを使用してこの問題を回避し、ユーザー環境で次のファイルを提供します。
- / proc / cpuinfo
CPUリスト - / proc / diskstats
コンテナ内のI / O統計 - / proc / meminfo
コンテナで利用可能なメモリと使用統計 - / proc / stat
利用可能なCPU統計 - / proc /スワップ
スワップ統計 - / proc /稼働時間
コンテナの稼働時間。
すべてがLXC 2.xですぐに動作する場合、 dockerにこれを教える必要があります。
私たちが持っている科目:
Debian jessie 4.6.0-0.bpo.1-amd64 docker Server Version: 1.12.2 lxcfs: 2.0.6-1~bpo8+1
まず、Debianカーネルはcgroupを使用してメモリを調整し、ブートオプションに追加できるようにする必要があります。
cgroup_enable=memory swapaccount=1
そして、対応するサービスを開始するlxcfs
ます。
# systemctl status lxcfs.service ● lxcfs.service - FUSE filesystem for LXC
その結果、目的のprocファイルがパス/var/lib/lxcfs/
沿って表示されます。
それらを個別にdockerコンテナーに投入することは残っています。 docker-compose形式では、コンテナファイルは次のようになります。
CT_name: container_name: CT_name hostname: CT_name image: debian:stable mem_limit: 512m volumes: - /var/lib/lxcfs/proc/meminfo:/proc/meminfo - /var/lib/lxcfs/proc/uptime:/proc/uptime - /var/lib/lxcfs/proc/swaps:/proc/swaps - /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo - /var/lib/lxcfs/proc/stat:/proc/stat - /var/lib/lxcfs/proc/diskstats:/proc/diskstats
そして結果を確認します。
# docker exec CT_name cat /proc/uptime 247.0 247.0 # docker exec CT_name free -m total used free shared buffers cached Mem: 512 11 500 4322 0 0 -/+ buffers/cache: 11 500 Swap: 512 0 512
コンテナパラメーターを使用して、記事「Java and Docker:Everyone Should Know It」に記載されているテストを実行します。
CT_name: container_name: CT_name hostname: CT_name image: rafabene/java-container:openjdk mem_limit: 150m volumes: - /var/lib/lxcfs/proc/meminfo:/proc/meminfo
curl http://172.17.0.33:8080/api/memory Allocated more than 80% (73.5 MiB) of the Max allowed JVM memory size (73.5 MiB)
172.17.0.33
は、コンテナに指定されたIPです。
ご覧のとおり、アプリケーションは発行されたメモリ制限を認識しています。
ご清聴ありがとうございました。