소개
이 랩에서는 docker container update 명령을 사용하여 실행 중인 Docker 컨테이너의 리소스 제한을 동적으로 수정하고 재시작 정책을 변경하는 방법을 배우게 됩니다. 먼저 초기 CPU 및 메모리 제한이 있는 컨테이너를 생성하는 것으로 시작합니다.
컨테이너 생성 후, 컨테이너의 CPU share 및 메모리 제한을 업데이트하여 리소스 할당을 조정하는 방법을 살펴봅니다. 마지막으로, 다양한 시나리오에서 Docker 가 컨테이너 재시작을 처리하는 방식을 제어하는 컨테이너의 재시작 정책을 수정하는 방법을 배우게 됩니다. 이 실습을 통해 Docker 에서 컨테이너 리소스를 관리하는 유연성과 강력함을 경험할 수 있습니다.
초기 리소스 제한으로 컨테이너 생성
이 단계에서는 Docker 컨테이너를 생성하고 CPU 및 메모리에 대한 초기 리소스 제한을 설정하는 방법을 배우게 됩니다. 리소스 제한은 단일 컨테이너가 호스트 머신에서 사용 가능한 모든 리소스를 소비하여 다른 컨테이너 및 호스트 자체의 성능에 영향을 미치는 것을 방지하는 데 중요합니다.
먼저, Docker Hub 에서 ubuntu 이미지를 가져옵니다. 이 이미지는 컨테이너의 기반으로 사용됩니다.
docker pull ubuntu:latest
이미지가 가져와지고 추출되고 있음을 나타내는 출력을 볼 수 있습니다.
이제 특정 리소스 제한이 있는 my-limited-container라는 컨테이너를 생성해 보겠습니다. --cpus 및 --memory 플래그와 함께 docker run 명령을 사용합니다.
--cpus 플래그는 컨테이너가 사용할 수 있는 CPU 리소스의 양을 제한합니다. 값은 CPU 코어 수를 나타내는 부동 소수점 숫자입니다. 예를 들어, --cpus 0.5는 컨테이너가 최대 CPU 코어의 절반을 사용할 수 있음을 의미합니다.
--memory 플래그는 컨테이너가 사용할 수 있는 메모리 양을 제한합니다. 값은 바이트 (bytes), 킬로바이트 (k), 메가바이트 (m) 또는 기가바이트 (g) 로 지정할 수 있습니다. 예를 들어, --memory 512m은 컨테이너를 512 메가바이트의 메모리로 제한합니다.
이 예제에서는 sleep infinity 명령을 실행하는 컨테이너를 생성합니다. 이 명령은 컨테이너를 무기한으로 실행 상태로 유지합니다. CPU 사용량을 0.5 코어로, 메모리를 256 메가바이트로 제한합니다.
docker run -d --name my-limited-container --cpus 0.5 --memory 256m ubuntu:latest sleep infinity
명령을 자세히 살펴보겠습니다.
docker run: 이 명령은 새 컨테이너를 생성하고 시작하는 데 사용됩니다.-d: 이 플래그는 컨테이너를 detached 모드 (백그라운드에서 실행됨) 로 실행합니다.--name my-limited-container: 이 옵션은 컨테이너에my-limited-container라는 이름을 할당합니다.--cpus 0.5: 이 옵션은 컨테이너의 CPU 사용량을 0.5 코어로 제한합니다.--memory 256m: 이 옵션은 컨테이너의 메모리 사용량을 256 메가바이트로 제한합니다.ubuntu:latest: 이 옵션은 사용할 Docker 이미지 (최신 버전의 Ubuntu) 를 지정합니다.sleep infinity: 이 명령은 컨테이너 내부에서 실행됩니다. 컨테이너를 계속 실행 상태로 유지합니다.
명령을 실행한 후 Docker 는 컨테이너 ID 를 출력합니다.
컨테이너가 실행 중이고 리소스 제한이 적용되었는지 확인하려면 docker inspect 명령을 사용할 수 있습니다. 이 명령은 컨테이너에 대한 자세한 정보를 제공합니다.
docker inspect my-limited-container
docker inspect의 출력은 큰 JSON 객체입니다. 적용된 제한을 확인하려면 HostConfig 섹션 내에서 CpuShares 및 Memory 필드를 찾을 수 있습니다. --cpus 0.5는 CpuShares 값 512 로 변환됩니다 (기본적으로 1 CPU 는 1024 shares). Memory 값은 바이트 단위로 표시됩니다.
컨테이너의 CPU share 업데이트
이 단계에서는 docker update 명령을 사용하여 실행 중인 컨테이너의 CPU share 를 업데이트하는 방법을 배우게 됩니다. CPU share 는 시스템에 부하가 걸릴 때 컨테이너가 CPU 사이클에 접근할 수 있도록 우선 순위를 지정하는 방법입니다. share 값이 높을수록 share 값이 낮은 컨테이너에 비해 컨테이너가 더 많은 CPU 시간을 할당받게 됩니다.
이전 단계에서 CPU 제한이 0.5 코어 (512 CPU share 에 해당) 인 my-limited-container라는 컨테이너를 생성했습니다. 이제 CPU share 를 768 로 업데이트해 보겠습니다. 이렇게 하면 기본 share(1024) 또는 낮은 share 를 가진 다른 컨테이너에 비해 CPU 리소스에 대한 우선 순위가 높아집니다.
CPU share 를 업데이트하려면 --cpu-shares 플래그와 함께 docker update 명령을 사용하고, 컨테이너 이름과 새로운 share 값을 입력합니다.
docker update --cpu-shares 768 my-limited-container
업데이트가 성공했음을 나타내는 컨테이너 이름이 출력으로 표시됩니다.
CPU share 가 업데이트되었는지 확인하려면 다시 docker inspect 명령을 사용하여 HostConfig 섹션에서 CpuShares 필드를 확인하면 됩니다.
docker inspect my-limited-container
출력에서 CpuShares 필드를 찾습니다. 이제 값은 768 이어야 합니다.
CPU share 를 업데이트하는 데 컨테이너를 다시 시작할 필요가 없다는 점에 유의하는 것이 중요합니다. 변경 사항은 실행 중인 컨테이너에 동적으로 적용됩니다.
컨테이너의 메모리 제한 업데이트
이 단계에서는 docker update 명령을 사용하여 실행 중인 컨테이너의 메모리 제한을 업데이트하는 방법을 배우게 됩니다. 메모리 사용량을 제한하는 것은 컨테이너가 과도한 양의 RAM 을 소비하는 것을 방지하는 데 중요하며, 이는 호스트에서 성능 문제 또는 시스템 불안정으로 이어질 수 있습니다.
첫 번째 단계에서 256 메가바이트의 메모리 제한으로 my-limited-container를 생성했습니다. 이제 메모리 제한을 512 메가바이트로 늘려 보겠습니다.
메모리 제한을 업데이트하려면 --memory 플래그와 함께 docker update 명령을 사용하고, 컨테이너 이름과 새로운 메모리 제한 값을 입력합니다.
docker update --memory 512m my-limited-container
업데이트가 성공했음을 나타내는 컨테이너 이름이 출력으로 표시됩니다.
메모리 제한이 업데이트되었는지 확인하려면 docker inspect 명령을 사용하여 HostConfig 섹션에서 Memory 필드를 확인하면 됩니다.
docker inspect my-limited-container
출력에서 Memory 필드를 찾습니다. 이제 값은 536870912(바이트 단위로 512 메가바이트) 여야 합니다.
CPU share 업데이트와 마찬가지로, 실행 중인 컨테이너의 메모리 제한을 업데이트하는 데 컨테이너를 다시 시작할 필요가 없습니다. 변경 사항은 동적으로 적용됩니다.
컨테이너 재시작 정책 업데이트
이 단계에서는 docker update 명령을 사용하여 컨테이너의 재시작 정책을 업데이트하는 방법을 배우게 됩니다. 재시작 정책은 컨테이너가 종료되거나 Docker 데몬이 다시 시작될 때 컨테이너가 어떻게 동작해야 하는지를 결정합니다. 이는 컨테이너에서 실행되는 애플리케이션의 가용성을 보장하는 데 중요합니다.
기본적으로 컨테이너는 no의 재시작 정책을 가지며, 이는 종료 후 자동으로 다시 시작되지 않음을 의미합니다. my-limited-container의 재시작 정책을 on-failure로 업데이트해 보겠습니다. 이 정책은 컨테이너가 0 이 아닌 종료 코드 (오류를 나타냄) 로 종료될 경우에만 컨테이너를 다시 시작합니다.
재시작 정책을 업데이트하려면 --restart 플래그와 함께 docker update 명령을 사용하고, 컨테이너 이름과 원하는 정책을 입력합니다.
docker update --restart on-failure my-limited-container
업데이트가 성공했음을 나타내는 컨테이너 이름이 출력으로 표시됩니다.
재시작 정책이 업데이트되었는지 확인하려면 docker inspect 명령을 사용하여 HostConfig 섹션 내의 RestartPolicy 필드를 확인하면 됩니다.
docker inspect my-limited-container
출력에서 RestartPolicy 필드를 찾습니다. RestartPolicy 내의 Name 필드는 이제 on-failure여야 합니다.
다른 일반적인 재시작 정책은 다음과 같습니다.
no: 컨테이너를 자동으로 다시 시작하지 않습니다.on-failure[:max-retries]: 0 이 아닌 종료 코드로 종료되는 경우에만 컨테이너를 다시 시작합니다. 선택적으로 재시도 횟수를 제한합니다.always: 중지되면 항상 컨테이너를 다시 시작합니다.unless-stopped: 명시적으로 중지되지 않는 한 항상 컨테이너를 다시 시작합니다.
재시작 정책을 업데이트하는 것 또한 컨테이너를 다시 시작할 필요가 없습니다. 변경 사항은 동적으로 적용됩니다.
마지막으로, 생성한 컨테이너를 정리해 보겠습니다.
docker stop my-limited-container
docker rm my-limited-container
이렇게 하면 컨테이너가 중지되고 제거됩니다.
요약
이 랩에서는 docker update 명령을 사용하여 Docker 컨테이너 리소스를 관리하는 방법을 배웠습니다. 먼저 --cpus 및 --memory 플래그와 함께 docker run을 사용하여 초기 CPU 및 메모리 제한으로 컨테이너를 생성하는 것으로 시작했습니다. 이는 컨테이너 생성 중에 리소스 제약을 설정하여 호스트에서 리소스 부족을 방지하는 방법을 보여주었습니다.
이어서, 실행 중인 컨테이너에서 이러한 리소스 제한을 동적으로 수정하는 방법을 살펴보았습니다. docker update --cpu-shares를 사용하여 컨테이너의 CPU share 를 업데이트하고 docker update --memory를 사용하여 메모리 제한을 조정하는 방법을 배웠습니다. 마지막으로, docker update --restart를 사용하여 컨테이너의 재시작 정책을 변경하는 연습을 하여, 실패 시 컨테이너의 동작을 제어하는 방법을 설명했습니다. 이러한 단계는 생성 후 컨테이너 리소스 할당 및 동작을 미세 조정하기 위해 docker update 명령을 사용하는 실질적인 경험을 제공했습니다.



