"ContainerDefinitions"
私の目標は、Dockerコンテナを起動するのに必要なRAMの適切な量のメモリでコンテナ定義()を定義することです。
たとえば、次のjenkinsコンテナ(アプリケーション)コードスニペットは500 MBのRAMで始まります。うまくいくのに理由がわかりません。、指定されたドッカーイメージディスクサイズは1.64 GBです。ここDockerfileです。
"EcsTaskDefinition": {
"Type": "AWS::ECS::TaskDefinition",
"Properties": {
"ContainerDefinitions": [
{
"Name": "jenkins",
"Image": "somedockeraccount/jenkins:ecs",
"Memory": 500,
"PortMappings": [ { "ContainerPort": 8080, "HostPort": 8080 } ],
私のUbuntuノートブックで実行されているシステムを確認してください。
次のコマンドは、このジェンキンスイメージのディスク容量を1.64 GBで指定します。これはDockerイメージの実際のサイズではないかもしれません。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
somedockeraccount/jenkins ecs d9d23cc59412 38 hours ago 1.64GB
$ docker image inspect somedockeraccount/jenkins:ecs | grep -i size
"Size": 1640601180,
"VirtualSize": 1640601180,
Dockerイメージはoverlay2ファイルシステム(/var/lib/docker/overlay2/
)を使用しています。
docker ps -q | xargs docker inspect
overlay2
ファイルシステムも表示
以下は、ローカルでテストしたドッカーコンテナのメタデータです。手がかりが与えられないRAMサイズの要件:
$ docker ps -q | xargs docker inspect | grep -i memory
"Memory": 0,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
Linux VMの世界では、通常、特定の仮想アドレス空間の境界に合わせてC / C ++ / Javaアプリケーションを制限しません。 32ビットアプリケーションの場合、これは通常4 GBの仮想アドレスapceです。vmstat
このコマンドは、以下のようにゲストオペレーティングシステム内のすべてのアプリケーションプロセス(pid)のRAM使用量やその他のリソースを明確に表示することもできます。
質問:
1)ドッカーコンテナを起動するのに必要なリソース(RAMメモリなど)の量を見つける方法(例:ドッカーファイル/アプリケーション)、ドッカーホストから?上記のように、"ContainerDefinitions"
このプロパティは必須です。"Memory"
t2.micro
これは、メモリサイズに応じて、本番環境で特定のEC2インスタンスタイプ(または他のタイプ)を選択するのに役立ちます。
2)
引用する次の質問には答えないでください...
まだ理解していません。 MBサイズのRAMはどのように"Memory":500
1.65GB(ディスク容量)ドッカーイメージのドッカーコンテナを起動できますか?
答え1
コンテナを基本イメージとファイルの変更を保存しますが、コンテナが削除されると失われるレイヤーと考えてください。メモリとCPUを消費する1つ以上のプロセスがコンテナ内で実行されます。提示した例では、Jenkinsは要件ページ[1]に従って実行するために必要な最小メモリ量を持っています。あなたの質問に重要な特定のセクションが1つあります。
Jenkinsに必要なメモリ量は、いくつかの要因によって大きく異なります。したがって、割り当てられたRAMの範囲は、小規模インストールの場合は200MBから大規模なJenkinsマスターの場合は70GB以上です。ただし、プロジェクトのビルド要件に応じて必要なRAMを推定できるはずです。
これは通常、コンテナで実行したいすべての項目に適用されます。プロセスを実行するにはまだメモリが必要ですが、RAM/CPU スペースを占有します。しなければならないコンテナ内でオペレーティングシステム全体を実行せず、コンテナエントリポイントに関連付けられたプロセスのみを実行しようとしているため、仮想マシンよりも小さいです。