예전에는 무거운 Docker 이미지를 다루느라 많은 시간을 허비했습니다. 빌드가 끝나기만을 기다리고, 낭비되는 스토리지를 걱정하곤 했죠. Dockerfile을 아무리 정교하게 작성해도 이미지 크기는 늘 필요 이상으로 컸습니다. 하지만 SlimToolkit(구 DockerSlim)을 알게 된 후로는 모든 것이 달라졌습니다.
이 도구는 Docker 이미지를 분석해 런타임에 실제로 필요한 파일과 의존성만 식별하고, 나머지는 모두 제거합니다. 이 글에서는 SlimToolkit의 작동 원리와 함께, 기능을 망가뜨리지 않고 Docker 이미지를 축소한 실제 단계를 소개합니다.
SlimToolkit, Docker 이미지 최적화를 간편하게
SlimToolkit은 애플리케이션 코드나 Dockerfile을 수정하지 않고도 Docker 이미지 크기를 줄일 수 있는 오픈소스 도구입니다. 패키지 정리나 빌드 스테이지 재작성 같은 번거로운 수작업 없이, SlimToolkit이 이미지 최적화를 자동으로 처리해줍니다.
Docker 이미지에 SlimToolkit을 실행하면 컨테이너가 동작하는 과정을 관찰하며 동적 분석을 수행합니다. 애플리케이션이 실행 중에 접근하는 파일, 라이브러리, 의존성을 정확히 추적하고, 이 데이터를 바탕으로 꼭 필요한 구성 요소만 담은 새로운 최적화 이미지를 생성합니다. 원본 이미지는 그대로 유지되므로 안전하고 언제든 되돌릴 수 있다는 점도 큰 장점입니다.
SlimToolkit은 기존 이미지에 그대로 적용할 수 있으며 Node.js, Python, Java, Go를 지원합니다. 고급 Docker나 Linux 지식 없이도 사용할 수 있고, 대부분의 워크플로우에 자연스럽게 통합됩니다. 또한 공격자가 악용할 수 있는 미사용 도구와 셸을 제거해 컨테이너 보안까지 강화해줍니다. 이미지가 작아지면 다운로드와 시작이 빨라지고 리소스 소모도 줄어들어, CI/CD 파이프라인에서 특히 큰 효과를 발휘합니다.
Docker를 통해 SlimToolkit을 사용하는 것이 가장 간편한 방법입니다. 로컬 설치가 필요 없기 때문인데요. Docker만 설치되어 실행 중이라면 바로 시작할 수 있습니다.
먼저 다음 docker 명령어로 공식 SlimToolkit 이미지를 내려받습니다:
docker pull dslim/slim
SlimToolkit을 실행하려면 Docker 소켓(/var/run/docker.sock)을 마운트해야 합니다. 이를 통해 컨테이너가 로컬 Docker 엔진과 통신하며 이미지를 분석하고 최적화할 수 있습니다. 반드시 신뢰할 수 있는 공식 이미지만 사용하세요.
SlimToolkit으로 Docker 이미지 크기 줄이기
최적화 과정을 직접 확인하기 위해 표준 Nginx 이미지를 slim 처리해 보겠습니다. 먼저 공식 최신 Nginx 이미지를 pull합니다:
docker pull nginx:latest
Nginx처럼 표준적인 애플리케이션이라면 build 명령어를 바로 실행할 수 있습니다. SlimToolkit이 컨테이너가 실제 사용하는 파일을 파악하고 불필요한 파일을 제거합니다.
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock dslim/slim build --target nginx:latest --tag nginx-slim:latest
Python이나 Ruby처럼 표준 프로브 중에 즉시 실행되지 않는 의존성이 있는 언어도 있습니다. 이런 경우 'ignore.txt' 파일을 만들어 '/usr/local/lib/python3.11'처럼 유지해야 할 폴더를 SlimToolkit에 알려주세요. 이렇게 하면 필수 런타임 의존성이 삭제되는 것을 막을 수 있습니다.
볼륨 마운트를 함께 사용해 보존 규칙이 담긴 파일을 지정할 수 있습니다:
-v "$(pwd)":/target --preserve-path-file /target/ignore.txt원본 vs. 최적화 이미지, 용량 차이 비교하기
과정이 완료되면 SlimToolkit은 최적화된 이미지를 로컬에 저장합니다. 다음 명령어로 원본과 축소 버전의 용량 차이를 비교해 보세요:
docker images꽤 극적인 용량 감소를 확인할 수 있을 것입니다.

마지막으로 새로운 최적화 이미지가 정상적으로 작동하는지 테스트합니다:
docker run -it -p 8080:80 nginx-slim:latest
브라우저를 열고 https://localhost:8080에 접속해 보세요. 익숙한 Nginx 기본 환영 페이지가 나타나는데, 훨씬 작은 컨테이너 용량으로 실행되고 있다는 점이 다릅니다.

SlimToolkit은 Docker 이미지를 분석하고 최적화하는 데 유용한 핵심 명령어들을 제공합니다. 가장 자주 쓰이는 명령어를 정리하면 다음과 같습니다:
| 명령어 | 설명 |
|---|---|
| slim build | 필수 파일과 의존성만 유지해 Docker 이미지를 최적화하고 용량을 줄입니다. |
| slim xray | Docker 이미지 내부를 분석해 파일, 레이어, 의존성 등을 보여줍니다. |
| slim lint | Dockerfile의 오류를 점검해 빌드 문제를 예방합니다. |
| slim debug | 최적화된 Docker 이미지로 생성된 실행 중인 컨테이너를 디버깅할 수 있습니다. |
| slim profile | Docker 이미지 정보를 수집해 용량 및 성능 분석용 JSON 리포트를 출력합니다. |
| slim merge | 두 개의 Docker 이미지를 하나로 병합합니다. |
다음 명령어로 사용 가능한 모든 SlimToolkit 명령어와 사용법을 확인할 수도 있습니다.
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock dslim/slim slim help
알아두어야 할 한계점
SlimToolkit은 Docker 이미지 용량을 줄이는 데 매우 효과적이지만, 몇 가지 단점도 고려해야 합니다:
- 대형 이미지를 slim 처리하는 데 시간이 더 오래 걸릴 수 있으므로 이를 감안해 계획하세요.
- 동적 분석 방식을 사용하기 때문에 빌드 과정에서 특정 코드 경로가 실행되지 않으면, SlimToolkit이 해당 의존성을 불필요한 것으로 판단해 삭제할 수 있습니다. 최적화된 이미지는 반드시 철저히 테스트하세요.
- 용량을 줄이기 위해 bash나 curl 같은 도구를 제거하는 경우가 많습니다. 운영 환경 컨테이너에서 문제 해결을 위해 이런 도구가 필요하다면, SlimToolkit에 명시적으로 보존하라고 지정해야 합니다.
마치며
워크플로우에 SlimToolkit을 도입하면 배포 속도가 빨라지고, 일관된 성능이 보장되며, 컨테이너 비대화도 최소화됩니다. 원본 빌드는 그대로 유지하면서 더 깔끔하고 전문적인 Docker 이미지를 만들 수 있습니다. 여기에 Docker 클리닝 모범 사례를 함께 활용하면 효율적이고 정돈된 컨테이너 환경을 오랫동안 유지할 수 있습니다.