docker service rollback 명령어를 사용하여 서비스 업데이트 되돌리기

DockerBeginner
지금 연습하기

소개

이 랩에서는 Docker Swarm 환경에서 서비스 업데이트를 효과적으로 관리하는 방법을 배우게 됩니다. 컨테이너화된 애플리케이션을 배포하고 확장하기 위한 기반 역할을 하는 Docker Swarm 서비스를 생성하는 것으로 시작합니다.

서비스를 생성한 후, 일반적인 배포 시나리오를 시뮬레이션하여 서비스의 구성을 업데이트합니다. 이 랩의 핵심 초점은 docker service rollback 명령을 사용하여 서비스를 이전의 안정적인 버전으로 되돌리는 방법을 시연하는 것입니다. 마지막으로, 롤백 후 서비스의 구성을 확인하여 성공적인 복원을 확인합니다.

Docker Swarm 서비스 생성

이 단계에서는 Docker Swarm 서비스를 생성하는 방법을 배우겠습니다. Docker Swarm 서비스는 Swarm 클러스터에서 실행되는 일련의 작업입니다. 각 작업은 컨테이너의 인스턴스입니다. 서비스는 Docker Swarm 의 핵심 개념으로, 컨테이너 이미지의 복제본을 몇 개 실행해야 하는지, 그리고 어떻게 업데이트해야 하는지를 정의할 수 있게 해줍니다.

서비스를 생성하기 전에 Docker Swarm 을 초기화해야 합니다. 단일 VM 에서 실행하고 있으므로, 단일 노드 Swarm 을 초기화합니다.

먼저, Swarm 을 초기화해 보겠습니다.

docker swarm init --advertise-addr 127.0.0.1

Swarm 이 초기화되었고 현재 노드가 이제 매니저라는 것을 나타내는 출력을 볼 수 있습니다.

이제 nginx 이미지를 사용하여 서비스를 생성해 보겠습니다. 서비스 이름을 my-nginx로 지정하고, nginx 컨테이너의 복제본 3 개를 실행하도록 지정합니다.

먼저, nginx 이미지를 풀하여 로컬에서 사용할 수 있도록 합니다.

docker pull nginx:latest

이제 서비스를 생성합니다.

docker service create --name my-nginx --replicas 3 nginx:latest

이 명령은 nginx:latest 이미지를 사용하여 3 개의 복제본이 있는 my-nginx라는 새 서비스를 생성합니다. Docker Swarm 은 이러한 복제본을 Swarm 의 노드 (이 경우, 단일 노드) 에 자동으로 분산합니다.

서비스가 생성되었고 복제본이 실행 중인지 확인하려면 서비스를 나열할 수 있습니다.

docker service ls

my-nginx가 3/3 개의 복제본이 실행 중인 상태로 나열되는 것을 볼 수 있습니다.

또한 서비스와 관련된 작업을 검사할 수 있습니다.

docker service ps my-nginx

이 명령은 my-nginx 서비스를 구성하는 개별 작업 (컨테이너), 현재 상태 및 실행 중인 노드를 보여줍니다. Running 상태의 작업 3 개를 볼 수 있습니다.

새로운 구성으로 서비스 업데이트

이 단계에서는 my-nginx 서비스가 다른 버전의 nginx 이미지를 사용하도록 업데이트합니다. 이는 Docker Swarm 에서 서비스의 롤링 업데이트를 수행하는 방법을 보여줍니다.

먼저, nginx:1.21 이미지를 풀합니다. 이것은 서비스를 업데이트할 특정 버전의 Nginx 입니다.

docker pull nginx:1.21

이제 my-nginx 서비스가 nginx:1.21 이미지를 사용하도록 업데이트합니다. 또한 복제본 수를 5 로 변경합니다.

docker service update --image nginx:1.21 --replicas 5 my-nginx

이 명령은 Docker Swarm 에 my-nginx 서비스를 업데이트하도록 지시합니다. --image nginx:1.21 플래그는 사용할 새 이미지를 지정하고, --replicas 5 플래그는 원하는 복제본 수를 5 로 변경합니다. Docker Swarm 은 롤링 업데이트를 수행하여, 지정된 이미지를 실행하는 새 컨테이너로 이전 컨테이너를 교체하고 복제본 수를 조정합니다.

서비스 작업을 나열하여 업데이트 진행 상황을 모니터링할 수 있습니다.

docker service ps my-nginx

nginx:1.21 이미지를 사용하는 새 작업이 생성되고 이전 작업이 종료되는 것을 볼 수 있습니다. 결국, Running 상태의 작업 5 개가 모두 nginx:1.21 이미지를 사용하는 것을 볼 수 있습니다.

또한 서비스 세부 정보를 확인하여 업데이트를 확인할 수 있습니다.

docker service inspect my-nginx --pretty

출력에서 ImageReplicas 필드를 찾아 각각 nginx:1.21 및 5 로 업데이트되었는지 확인합니다.

이전 버전으로 서비스 롤백

이 단계에서는 my-nginx 서비스를 이전 구성으로 롤백합니다. Docker Swarm 은 이전 서비스 구성을 추적하여 업데이트로 인해 문제가 발생할 경우 쉽게 알려진 정상 상태로 되돌릴 수 있도록 합니다.

서비스를 롤백하려면 --rollback 플래그와 함께 docker service update 명령을 사용합니다.

docker service update --rollback my-nginx

이 명령은 Docker Swarm 에 my-nginx 서비스를 마지막 업데이트 이전의 구성으로 롤백하도록 지시합니다. 이 경우, nginx:latest 이미지와 원래 복제본 수 (3 개) 로 되돌리는 것을 의미합니다.

서비스 작업을 나열하여 롤백 프로세스를 모니터링할 수 있습니다.

docker service ps my-nginx

nginx:1.21 이미지를 실행하는 작업이 종료되고 nginx:latest 이미지를 실행하는 새 작업이 생성되는 것을 볼 수 있습니다. 작업 수도 이전 복제본 수로 다시 조정됩니다.

롤백이 완료되면 nginx:latest 이미지를 실행하는 작업을 볼 수 있으며 복제본 수는 3 으로 돌아가야 합니다.

또한 서비스 세부 정보를 검사하여 롤백을 확인할 수 있습니다.

docker service inspect my-nginx --pretty

출력에서 ImageReplicas 필드를 찾습니다. 이제 마지막 업데이트 이전의 구성을 반영해야 합니다.

롤백 후 서비스 구성 확인

이 단계에서는 my-nginx 서비스가 이전 구성으로 성공적으로 롤백되었는지 명시적으로 확인합니다. 여기에는 서비스에서 사용되는 이미지와 복제본 수를 모두 확인하는 작업이 포함됩니다.

먼저, 현재 상태를 확인하기 위해 서비스를 나열해 보겠습니다.

docker service ls

my-nginx가 나열되어 있고 REPLICAS 열에 3/3이 표시되어야 합니다. 이는 원하는 복제본이 3 개이고 현재 3 개가 실행 중임을 나타냅니다.

다음으로, 서비스 세부 정보를 검사하여 이미지와 복제본 수를 확인해 보겠습니다.

docker service inspect my-nginx --pretty

출력에서 Image 필드를 찾습니다. 이제 nginx:latest여야 합니다. 또한 Replicas 필드를 찾아야 하며, 이는 3이어야 합니다.

마지막으로, 서비스와 관련된 작업을 살펴보고 실행 중인 컨테이너가 올바른 이미지를 사용하고 있는지 확인합니다.

docker service ps my-nginx

3 개의 작업이 나열되어야 하며, 각 작업의 IMAGE 열은 nginx:latest여야 합니다. 모든 작업의 CURRENT STATERunning이어야 합니다.

이러한 검사를 수행함으로써 롤백이 성공적으로 완료되었고 서비스가 원하는 이전 상태로 실행되고 있음을 확신할 수 있습니다.

요약

이 랩에서는 Docker Swarm 서비스를 관리하는 방법을 배웠으며, 특히 서비스 생성 및 업데이트에 중점을 두었습니다. 단일 노드 Docker Swarm 을 초기화하는 것으로 시작하여 nginx:latest 이미지를 사용하여 세 개의 복제본이 있는 my-nginx라는 서비스를 생성했습니다. docker service lsdocker service ps를 사용하여 서비스 생성 및 실행 중인 작업을 확인했습니다.

서비스 생성 후, 서비스 구성을 업데이트하는 방법을 살펴보았습니다. 여기에는 서비스에서 사용되는 이미지를 변경하는 작업이 포함되었으며, Swarm 환경에서 서비스 업데이트에 대한 일반적인 시나리오를 시연했습니다.