"ContainerDefinitions"
내 목표는 도커 컨테이너를 시작하는 데 필요한 RAM의 적절한 양의 메모리로 컨테이너 정의( )를 정의하는 것입니다.
예를 들어 다음 jenkins 컨테이너(애플리케이션) 코드 조각은 500MB RAM으로 시작합니다.잘 작동하는데 이유를 모르겠습니다, 지정된 도커 이미지 디스크 크기는 1.64GB입니다.여기Dockerfile입니다.
"EcsTaskDefinition": {
"Type": "AWS::ECS::TaskDefinition",
"Properties": {
"ContainerDefinitions": [
{
"Name": "jenkins",
"Image": "somedockeraccount/jenkins:ecs",
"Memory": 500,
"PortMappings": [ { "ContainerPort": 8080, "HostPort": 8080 } ],
내 우분투 노트북에서 실행 중인 시스템을 확인하세요.
다음 명령은 이 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
파일 시스템 도 표시
다음은 로컬에서 테스트한 도커 컨테이너의 메타데이터입니다.단서가 주어지지 않음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비트 애플리케이션의 경우 이는 일반적으로 4GB 가상 주소 apce입니다. vmstat
이 명령은 또한 아래와 같이 게스트 운영 체제에 있는 모든 애플리케이션 프로세스(pid)의 RAM 사용량과 기타 리소스를 명확하게 표시할 수 있습니다.
질문:
1) 도커 컨테이너를 시작하는 데 필요한 리소스(RAM 메모리 등)의 양을 찾는 방법(예:도커파일/애플리케이션), 도커 호스트에서? 위에 표시된 대로 "ContainerDefinitions"
이 속성이 필수이기 때문입니다 ."Memory"
t2.micro
이는 메모리 크기에 따라 프로덕션에서 특정 EC2 인스턴스 유형(또는 다른 유형)을 선택하는 데 도움이 됩니다.
2)
인용하다다음 질문에는 대답하지 마세요...
아직도 이해가 되지 않습니다. MB 크기의 RAM이 어떻게 "Memory":500
1.65GB(디스크 공간 크기) 도커 이미지에 대한 도커 컨테이너를 시작할 수 있습니까?
답변1
컨테이너를 기본 이미지와 파일 변경 사항을 저장하지만 컨테이너가 삭제되면 손실되는 레이어로 생각하세요. 메모리와 CPU를 소비하는 하나 이상의 프로세스가 컨테이너 내부에서 실행됩니다. 제시한 예에서 Jenkins는 요구 사항 페이지 [1]에 따라 실행하는 데 필요한 최소 메모리 양을 갖습니다. 귀하의 질문에 중요한 특정 섹션이 하나 있습니다.
Jenkins에 필요한 메모리 양은 여러 요인에 따라 크게 달라집니다. 따라서 할당된 RAM의 범위는 소규모 설치의 경우 200MB부터 대규모 Jenkins 마스터의 경우 70GB 이상입니다. 그러나 프로젝트 빌드 요구 사항에 따라 필요한 RAM을 추정할 수 있어야 합니다.
이는 일반적으로 컨테이너에서 실행하려는 모든 항목에 적용됩니다. 프로세스를 실행하려면 여전히 메모리가 필요하지만 RAM/CPU 공간을 차지합니다.~해야 한다컨테이너 내부에서 전체 운영 체제를 실행하지 않고 컨테이너 진입점과 연결된 프로세스만 실행하려고 하기 때문에 가상 머신보다 작습니다.