Docker를 사용하다 보면 실행 중인 컨테이너에서 여러 설정을 변경하거나 프로그램을 설치한 뒤 현재 상태를 그대로 이미지로 저장해야 하는 경우가 있습니다. 개발 환경에서 직접 테스트한 내용을 다른 서버에서도 동일하게 사용하거나, 수정한 컨테이너를 새로운 이미지로 만들어 배포해야 하는 상황도 자주 발생합니다.
이럴 때 사용하는 명령어가 바로 docker commit입니다.
Docker Commit은 현재 실행 중인 컨테이너를 새로운 Docker 이미지로 저장하는 기능입니다. 기존 이미지를 수정하지 않고 현재 컨테이너 상태를 새로운 이미지로 생성하기 때문에 테스트 환경을 보관하거나 임시 작업을 저장할 때 매우 유용합니다.
하지만 Docker Commit은 편리한 만큼 운영 환경에서는 주의해서 사용해야 합니다. 일반적으로 운영 서버에서는 Dockerfile을 이용해 이미지를 관리하는 것이 권장되며, Docker Commit은 테스트나 긴급 백업 용도로 사용하는 것이 좋습니다.
이번 글에서는 Docker Commit의 개념부터 기본 사용법, Dockerfile과의 차이점, 실무 활용 사례, 운영 시 주의사항까지 자세히 알아보겠습니다.
Docker Commit이란 무엇인가?
Docker Commit은 현재 컨테이너의 상태를 새로운 Docker 이미지로 저장하는 명령어입니다.
컨테이너 내부에서 설치한 프로그램, 수정한 설정 파일, 추가한 디렉터리 등이 모두 새로운 이미지에 포함됩니다.
쉽게 말하면 실행 중인 컨테이너를 스냅샷처럼 저장하는 기능이라고 생각하면 됩니다.
기존 이미지는 변경되지 않으며 새로운 이미지가 하나 생성됩니다.
Docker Commit는 언제 사용하는가?
Docker Commit은 다음과 같은 상황에서 많이 사용됩니다.
- 테스트 환경을 이미지로 보관할 때
- 프로그램 설치가 완료된 컨테이너를 저장할 때
- 긴급하게 현재 상태를 백업해야 할 때
- 컨테이너 변경 사항을 다른 서버로 전달할 때
- Dockerfile 작성 전에 임시 이미지를 만들 때
반대로 운영 서버의 정식 이미지를 만들 때는 Dockerfile을 사용하는 것이 권장됩니다.
Docker Commit 기본 사용법
기본 사용 방법은 다음과 같습니다.
docker commit <컨테이너명> <이미지명:태그>
예를 들어 web 컨테이너를 새로운 이미지로 저장하려면 다음과 같이 실행합니다.
docker commit web myweb:v1
명령이 완료되면 새로운 이미지가 생성됩니다.
생성된 이미지는 다음 명령으로 확인할 수 있습니다.
docker images
출력 결과입니다.
REPOSITORY TAG
myweb v1
이제 기존 컨테이너와 동일한 환경을 새로운 컨테이너로 생성할 수 있습니다.
docker run -it myweb:v1
Docker Commit 동작 방식
Docker 이미지는 여러 개의 읽기 전용 레이어로 구성됩니다.
컨테이너가 실행되면 가장 위에 쓰기 가능한 레이어가 하나 추가됩니다.
Docker Commit은 바로 이 쓰기 가능한 레이어를 새로운 이미지 레이어로 저장하는 방식입니다.
따라서 컨테이너에서 변경한 내용만 새로운 이미지에 포함됩니다.
기존 이미지는 그대로 유지되며 새로운 이미지가 추가로 생성됩니다.
Docker Commit와 Docker Save의 차이
많은 사람들이 Docker Commit과 Docker Save를 혼동합니다.
Docker Commit은 현재 컨테이너를 새로운 이미지로 만드는 명령어입니다.
반면 Docker Save는 이미 존재하는 이미지를 tar 파일로 백업하는 명령어입니다.
즉, Commit은 이미지를 생성하는 기능이고 Save는 이미지를 백업하는 기능입니다.
또한 Commit으로 생성한 이미지는 이후 Docker Save를 이용하여 다른 서버로 전달할 수도 있습니다.
Docker Commit 실무 활용 예제
Docker Commit은 운영 환경보다 개발 및 테스트 환경에서 더욱 자주 사용됩니다. 특히 컨테이너 내부에서 여러 설정을 완료한 후 현재 상태를 그대로 저장해야 하는 경우 매우 유용합니다.
프로그램 설치 후 이미지 생성
Ubuntu 컨테이너에서 Nginx를 설치했다고 가정해 보겠습니다.
apt update
apt install -y nginx
설치가 완료된 후 현재 상태를 이미지로 저장합니다.
docker commit ubuntu-test nginx-custom:v1
이제 다음부터는 Nginx가 이미 설치된 이미지를 바로 사용할 수 있습니다.
개발 환경 백업
개발자가 컨테이너 안에서 다양한 라이브러리를 설치하고 환경 설정을 완료한 경우가 있습니다.
다시 동일한 환경을 만들기 어렵다면 Docker Commit으로 저장하는 것이 좋습니다.
docker commit dev-container project-dev:v2
이후 다른 개발자도 동일한 이미지를 받아 같은 개발 환경을 사용할 수 있습니다.
장애 분석 전 백업
운영 서버에서 문제가 발생했지만 원인을 아직 모르는 경우 컨테이너를 바로 삭제하지 않는 것이 좋습니다.
먼저 현재 상태를 이미지로 저장합니다.
docker commit production production-backup:v1
이후 테스트 서버에서 해당 이미지를 실행하여 안전하게 원인을 분석할 수 있습니다.
Dockerfile 작성 전 임시 저장
Dockerfile을 작성하기 전에 여러 설정을 직접 테스트하는 경우가 많습니다.
이때 작업 중간마다 Docker Commit을 수행하면 실수로 컨테이너를 삭제하더라도 이전 상태를 쉽게 복원할 수 있습니다.
Linux 서버 문제 해결
한 개발자가 Python 라이브러리와 Nginx 설정을 모두 완료한 컨테이너를 실수로 삭제하려고 했습니다.
아직 Dockerfile을 작성하지 않은 상태였기 때문에 컨테이너를 삭제하면 모든 작업이 사라질 상황이었습니다.
삭제 전에 먼저 Docker Commit을 수행했습니다.
docker commit dev python-nginx:v1
이미지가 생성된 후 기존 컨테이너를 삭제했습니다.
나중에 동일한 환경이 필요해졌을 때 다음 명령으로 새로운 컨테이너를 생성했습니다.
docker run -it python-nginx:v1
몇 시간 동안 작업한 환경을 그대로 복원할 수 있었고 Dockerfile도 이 이미지를 참고하여 쉽게 작성할 수 있었습니다.
Docker Commit 사용 시 주의사항
Docker Commit은 매우 편리하지만 운영 환경에서는 신중하게 사용해야 합니다.
첫 번째는 변경 이력이 남지 않는다는 점입니다.
Dockerfile은 어떤 명령으로 이미지를 만들었는지 기록되지만 Docker Commit은 최종 결과만 저장합니다.
두 번째는 재현성이 떨어집니다.
같은 이미지를 다시 만들려고 해도 어떤 작업을 수행했는지 알기 어렵습니다.
세 번째는 불필요한 캐시나 임시 파일까지 함께 저장될 수 있습니다.
이미지 크기가 커질 수 있으므로 Commit 전에 불필요한 파일을 삭제하는 것이 좋습니다.
네 번째는 운영 환경에서는 Dockerfile 기반의 이미지 관리가 권장됩니다.
Docker Commit은 테스트, 임시 저장, 장애 분석 용도로 사용하는 것이 가장 적합합니다.
Best Practice
Docker Commit을 사용할 때는 다음과 같은 방법을 추천합니다.
- 테스트 환경에서만 적극적으로 사용합니다.
- 운영 이미지는 Dockerfile로 관리합니다.
- Commit 후에는 의미 있는 태그를 지정합니다.
- 생성한 이미지는 Docker Save로 함께 백업합니다.
- 불필요한 로그와 캐시를 삭제한 후 Commit을 수행합니다.
- Commit 후 Docker History로 이미지 크기를 확인합니다.
이러한 방법을 적용하면 이미지를 보다 효율적으로 관리할 수 있습니다.
자주 묻는 질문
Docker Commit은 실행 중인 컨테이너에서도 사용할 수 있나요?
네. 실행 중인 컨테이너와 중지된 컨테이너 모두 Commit할 수 있습니다.
Docker Commit 후 기존 이미지는 변경되나요?
아닙니다. 기존 이미지는 그대로 유지되며 새로운 이미지가 추가로 생성됩니다.
Docker Commit으로 만든 이미지를 다른 서버에서도 사용할 수 있나요?
가능합니다. Docker Save로 백업한 후 Docker Load를 이용하면 다른 서버에서도 동일하게 사용할 수 있습니다.
운영 서버에서도 Docker Commit을 사용해도 되나요?
가능은 하지만 권장되지는 않습니다. 운영 환경에서는 Dockerfile을 이용하여 이미지를 생성하는 것이 유지보수와 버전 관리 측면에서 훨씬 유리합니다.
마무리
Docker Commit은 현재 컨테이너의 상태를 새로운 이미지로 저장하는 매우 편리한 기능입니다.
테스트 환경 백업, 개발 환경 공유, 장애 분석, 임시 저장 등 다양한 상황에서 활용할 수 있으며 Docker Save와 함께 사용하면 다른 서버로도 쉽게 이전할 수 있습니다.
다만 Dockerfile처럼 생성 과정이 기록되지 않기 때문에 운영 환경에서는 Docker Commit보다 Dockerfile을 사용하는 것이 일반적인 방법입니다.
Docker를 효율적으로 운영하려면 Docker Commit은 임시 저장과 테스트 용도로, Dockerfile은 정식 이미지 생성 용도로 구분하여 사용하는 습관을 가지는 것이 좋습니다.