"ContainerDefinitions"
我的目标是使用 RAM 中启动 docker 容器所需的适当内存大小来定义容器定义( )。
例如,下面的 jenkins 容器(应用程序)代码片段在 500 MB RAM 中启动,并且工作正常,不知道为什么,给定 docker 镜像磁盘大小为 1.64GB。这里是 Dockerfile。
"EcsTaskDefinition": {
"Type": "AWS::ECS::TaskDefinition",
"Properties": {
"ContainerDefinitions": [
{
"Name": "jenkins",
"Image": "somedockeraccount/jenkins:ecs",
"Memory": 500,
"PortMappings": [ { "ContainerPort": 8080, "HostPort": 8080 } ],
检查我的 ubuntu 笔记本电脑中正在运行的系统
以下命令将该 jenkins 映像的磁盘空间指定为 1.64GB,这可能不是 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
文件系统
下面是本地测试的 docker 容器的元数据没有给出任何线索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)如何找到启动docker容器所需的资源量(RAM内存等..)(这样说Dockerfile/应用程序),在docker主机中?因为"ContainerDefinitions"
需要这个属性"Memory"
,如上所示。
t2.micro
这有助于我根据内存大小在生产中选择特定的 EC2 实例类型(或其他类型)
2)
参考不回答下面这个问题...
我仍然不清楚,MB 大小的 RAM 如何"Memory":500
能够为 1.65 GB(磁盘空间大小)的 docker 映像启动 docker 容器?
答案1
将容器视为基础映像加上一个可以保存文件更改但在容器被删除时丢失的层。在该容器内运行一个或多个进程,这些进程会消耗内存和 CPU。在您给出的示例中,Jenkins 根据需求页面 [1] 具有运行所需的最小内存量。有一个特定部分对您的问题至关重要:
Jenkins 所需的内存量在很大程度上取决于许多因素,这就是为什么分配给它的 RAM 范围可以从小型安装的 200 MB 到单个大型 Jenkins master 的 70+ GB。但是,您应该能够根据项目构建需求估计所需的 RAM。
对于您想要在容器中运行的任何内容来说通常都是如此。该进程仍然需要内存才能运行,但需要 RAM/CPU 占用空间应该小于虚拟机,因为您不尝试在容器内运行完整的操作系统,而仅运行与容器入口点关联的进程。