Computer >> 컴퓨터 >  >> 시스템 >> Linux

원본을 수정하지 않고 Docker 이미지에 대한 변경 사항을 즉시 유지합니다.

Docker 이미지는 변경할 수 없습니다. 일단 구축되면 변경되지 않습니다. 이를 통해 일관성, 예측 가능성 및 안정성이 보장됩니다. 동일한 이미지에서 생성된 모든 컨테이너는 동일하게 작동하며 버전 관리가 안전하고 쉬워집니다. 하지만 패키지 설치나 구성 업데이트와 같이 실행 중인 컨테이너 내부에서 무언가를 조정해야 한다면 어떻게 될까요? 이것이 바로 docker commit이 등장하는 곳입니다. 이를 통해 실행 중인 컨테이너의 변경 사항을 캡처하고 원본을 건드리지 않고도 새 이미지를 만들 수 있습니다. 이는 수정 사항을 테스트하고, 빠르게 반복하고, 처음부터 다시 빌드하지 않고도 사용자 정의 이미지를 롤아웃하는 데 유용합니다.

목차

Docker 이미지가 변경되지 않는 이유

Docker 이미지는 여러 개의 읽기 전용 레이어로 구성됩니다. 컨테이너를 실행하면 Docker는 컨테이너 레이어라는 쓰기 가능한 얇은 레이어를 맨 위에 추가합니다. 모든 변경 사항은 이 최상위 레이어에서만 발생합니다. 컨테이너가 삭제되면 해당 레이어의 모든 변경 사항이 사라지고 원본 이미지는 변경되지 않습니다.

이 디자인은 여러 가지 이점을 보장합니다:

  • 동일한 이미지의 모든 컨테이너는 동일하게 작동하여 일관성을 보장합니다.
  • 한 컨테이너의 변경사항은 다른 컨테이너에 영향을 주지 않으므로 예측 가능성이 제공됩니다.
  • 위험 없이 특정 이미지 버전에 안전하게 태그를 지정할 수 있습니다.

이 디자인은 탁월한 안정성을 제공하지만 실행 중인 컨테이너를 빠르게 변경하려는 경우에는 제한이 있습니다. 그곳이 docker commit입니다 도움이됩니다.

실행 중인 컨테이너에서 새 이미지 생성

docker commit을 실행하면 명령을 실행하면 Docker는 실행 중인 컨테이너의 현재 상태를 캡처하고 여기에서 새 이미지를 생성합니다. 컨테이너 파일 시스템의 스냅샷을 찍어 설치된 패키지, 업데이트된 구성, 수정된 파일 등 변경 사항을 새 이미지 레이어로 저장합니다. 이렇게 하면 원본 이미지가 그대로 유지되므로 빠르게 실험하고 반복할 수 있습니다.

원본을 수정하지 않고 Docker 이미지에 대한 변경 사항을 즉시 유지합니다.

따라서 향후 재사용을 위해 사용자 정의 기본 설정을 저장하고, 테스트 중에 작은 수정 사항이나 구성 변경을 적용하거나, Dockerfile을 처음부터 다시 빌드하지 않고도 팀과 업데이트된 이미지를 공유하는 데 이상적입니다.

docker commit를 사용할 수 있습니다. 실행 중인 컨테이너에서 새 이미지를 생성하려면 다음 구문을 사용하여 명령을 사용하세요.

docker commit [OPTIONS] CONTAINER_ID NEW_IMAGE_NAME[:TAG]

여기 CONTAINER_ID 캡처하려는 컨테이너의 ID 또는 이름입니다(NEW_IMAGE_NAME). 은 새 이미지에 원하는 이름이고 TAG 선택사항이며 기본값은 최신입니다.

참고: docker commit docker container commit의 기존 별칭입니다.; 둘 다 동일합니다.

docker commit 명령은 메타데이터를 추가하고, 구성 변경 사항을 적용하고, 커밋 프로세스의 작동 방식을 제어할 수 있는 여러 옵션을 제공합니다. 아래 표에는 지원되는 모든 옵션이 요약되어 있습니다:

옵션 긴 형식 설명 예 -a–author새 이미지 메타데이터에 작성자 이름을 추가합니다.docker commit -a "Anees" my-container my-image -c–change ENV, LABEL 또는 CMD와 같은 Dockerfile 지침을 새 이미지에 적용합니다.docker commit -c "ENV APP_ENV=prod" my-container my-image -m–message이미지의 변경 사항을 설명하는 짧은 메시지를 추가합니다.docker commit -m "Installed curl" my-container my-image -p–pause일관성을 보장하기 위해 커밋 중에 컨테이너를 일시 중지합니다(기본값:true).docker commit --pause=false my-container my-image

docker commit 작동 방식 보기

Dockerfile을 다시 빌드하지 않고 Alpine 컨테이너에 컬을 설치한다고 가정해 보겠습니다. 이렇게 하려면 기본 이미지에서 컨테이너를 실행하세요.

docker run -it alpine:latest /bin/sh

컨테이너에 들어가면 필요한 사항을 변경하세요:

apk update && apk add curl
원본을 수정하지 않고 Docker 이미지에 대한 변경 사항을 즉시 유지합니다.

이제 컨테이너를 종료하세요:

exit

그런 다음 컨테이너를 새 이미지로 커밋합니다.

docker commit alpine-with-curl:1.0
원본을 수정하지 않고 Docker 이미지에 대한 변경 사항을 즉시 유지합니다.

새 이미지를 확인하세요:

docker images

이제 컬이 사전 설치되어 어디에서나 실행할 수 있는 새 이미지가 준비되었습니다.

원본을 수정하지 않고 Docker 이미지에 대한 변경 사항을 즉시 유지합니다.

새 이미지를 실행하여 저장된 변경사항 테스트

새 이미지를 만든 후 컨테이너를 실행하여 변경 사항이 저장되었는지 확인할 수 있습니다.

docker run -it alpine-with-curl:1.0 /bin/sh

이 명령은 alpine-with-curl:1.0를 기반으로 컨테이너 내부의 대화형 셸을 엽니다. 이미지. 안으로 들어가면 수정 사항이 그대로 유지되었는지 확인할 수 있습니다.

curl --version

이는 변경 사항이 새 이미지에 유지된다는 것을 보여줍니다.

원본을 수정하지 않고 Docker 이미지에 대한 변경 사항을 즉시 유지합니다.

docker 커밋과 Dockerfile 비교:언제 어느 것을 사용할지

Dockerfile과 docker commit 모두 Docker 이미지를 생성할 수 있지만 작동 방식이 매우 다르며 상황에 따라 적합합니다.

Dockerfile은 특히 CI/CD 파이프라인 및 프로덕션 환경에서 안정적이고 반복 가능한 빌드가 필요할 때 최고의 선택입니다. 코드에 명확하게 정의된 모든 변경 사항을 유지하므로 시간이 지남에 따라 쉽게 추적, 검토 및 버전 제어가 가능합니다. 이 접근 방식을 사용하면 나중에 이미지를 구축하는 사람은 누구나 동일한 결과를 얻을 수 있으며 이는 장기적인 유지 관리 및 팀 협업에 매우 중요합니다.

반면 docker commit 전체 Dockerfile을 다시 작성하거나 다시 작성하지 않고 시도하려는 빠른 수정, 테스트 또는 작은 조정에 적합합니다. 이는 즉시 변경 사항을 실험, 디버깅 또는 검증할 때 유용합니다. 그러나 변경 사항이 파일에 문서화되지 않기 때문에 이 방법은 프로덕션보다는 단기 사용에 더 적합합니다.

간단히 말해서 docker commit를 사용할 수 있습니다. 주로 실험이나 임시 수정을 위해 사용됩니다. 프로덕션 준비 이미지의 경우 항상 Dockerfile을 선호합니다. Docker를 최대한 활용하려면 컨테이너, 이미지, 워크플로 작업을 더 쉽게 해주는 다른 주요 명령을 살펴보는 것이 좋습니다.