프로그래밍/Bash Shell Script

[Bash Shell Script] docker 제거 스크립트

Grandamines 2024. 11. 14. 01:15

※ Windows 11 Home 환경에서 실행하였습니다.
※ WSL2 Ubuntu 24.04 환경에서 실행하였습니다.

 

docker 설치 스크립트로 설치한 docker를 제거하는 스크립트입니다.

 

1. vim 또는 vi로 파일 생성

vim docker.uninstall

 

2. 스크립트 코드 작성

#!/bin/bash
# @(#)docker.uninstall

# 경고 메시지 출력
echo "⚠️ This action will permanently delete all Docker resources and uninstall Docker completely."
echo "Please back up any necessary data before proceeding!"
read -p "Do you want to continue? (y/yes): " user_input

# 사용자 입력 확인 (소문자로 변환 후 비교)
user_input=$(echo "$user_input" | tr '[:upper:]' '[:lower:]')
if [[ "$user_input" != "y" && "$user_input" != "yes" ]]; then
  echo "Operation cancelled by the user."
  exit 0
fi

# 도커가 설치되어 있는지 확인
if ! command -v docker &> /dev/null; then
  echo "Docker is not installed or not in the PATH. Skipping resource cleanup."
  exit 1
fi

# 실행 중인 모든 컨테이너 중지
echo "Stopping all running containers..."
if docker ps -q | xargs -r docker stop; then
  echo "All running containers have been stopped."
else
  echo "Failed to stop containers. Exiting..."
  exit 1
fi

# 모든 컨테이너 삭제
echo "Removing all containers..."
if docker ps -aq | xargs -r docker rm; then
  echo "All containers have been removed."
else
  echo "Failed to remove containers. Exiting..."
  exit 1
fi

# 모든 이미지 삭제
echo "Removing all Docker images..."
if docker images -q | xargs -r docker rmi -f; then
  echo "All Docker images have been removed."
else
  echo "Failed to remove images. Exiting..."
  exit 1
fi

# 사용자 정의 네트워크 삭제
echo "Removing custom networks..."
if docker network ls --filter "type=custom" -q | xargs -r docker network rm; then
  echo "All custom networks have been removed."
else
  echo "Failed to remove networks. Exiting..."
  exit 1
fi

# 모든 볼륨 삭제
echo "Removing all Docker volumes..."
if docker volume ls -q | xargs -r docker volume rm; then
  echo "All Docker volumes have been removed."
else
  echo "Failed to remove volumes. Exiting..."
  exit 1
fi

# 도커 패키지 삭제
echo "Uninstalling Docker packages..."
if sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras && \
   sudo apt autoremove -y; then
  echo "Docker packages have been uninstalled."
else
  echo "Failed to uninstall Docker packages. Exiting..."
  exit 1
fi

# /var/lib/docker 마운트 상태 확인 및 해제
if mount | grep -q '/var/lib/docker'; then
  echo "Unmounting /var/lib/docker..."
  if sudo umount /var/lib/docker; then
    echo "/var/lib/docker has been unmounted."
  else
    echo "Failed to unmount /var/lib/docker. Exiting..."
    exit 1
  fi
fi

# 도커 데이터 삭제
echo "Removing Docker data directories..."
if sudo rm -rf /var/lib/docker && sudo rm -rf /var/lib/containerd; then
  echo "Docker data directories have been removed."
else
  echo "Failed to remove Docker data directories. Exiting..."
  exit 1
fi

# GPG 키 삭제
echo "Removing Docker GPG key..."
if sudo rm -rf /etc/apt/keyrings/docker.asc; then
  echo "Docker GPG key has been removed."
else
  echo "Failed to remove Docker GPG key."
  exit 1
fi

# APT 소스 리스트 삭제
echo "Removing Docker APT source list..."
if sudo rm -rf /etc/apt/sources.list.d/docker.list; then
  echo "Docker APT source list has been removed."
else
  echo "Failed to remove Docker APT source list."
  exit 1
fi

# 완료 메시지
echo "Docker and all related resources have been completely removed from the system."

 

3. 스크립트 저장

:wq

 

4. 스크립트 실행 권한 설정

sudo chmod +x docker.uninstall

 

5. 스크립트 실행

./docker.uninstall

 

6. 결과 확인

⚠️ This action will permanently delete all Docker resources and uninstall Docker completely.
Please back up any necessary data before proceeding!
Do you want to continue? (y/yes): y
Docker and all related resources have been completely removed from the system.
root@비공개:/any-dir# docker
-bash: /usr/bin/docker: No such file or directory