docker container commit 명령을 사용하여 수동으로 새 이미지 레이어를 만들어보며, 작동 원리 이해하기(일반적으로 이미지를 만들 때는 Dockerfile을 사용)
docker run --name=base-container -ti ubuntu
apt update && apt install -y nodejs
이 명령어를 실행하면 Node가 컨테이너 내부에 다운로드되고 설치됩니다. 유니언 파일 시스템의 맥락에서 이 파일 시스템 변경은 이 컨테이너에 고유한 디렉토리 내에서 발생합니다.
node -v
node -e 'console.log("Hello world!")'
Node를 설치했으므로, 변경 사항을 새 이미지 레이어로 저장하고 새 컨테이너를 시작하거나 새 이미지를 빌드할 수 있습니다.
docker container commit -m "Add node" base-container node-base
docker image history node-base
Add node 코멘트가 있는 레이어가 방금 만든 레이어로, 설치된 node.js 포함하고 있습니다.
docker run --name=node-base node-base node -e "console.log('Hello again')"
docker rm -f base-container
베이스 이미지는 다른 이미지를 빌드하기 위한 기반입니다.
모든 이미지를 기본 이미지로 사용할 수 있지만, 일부 이미지는 애플리케이션의 기반 또는 시작점을 제공하기 위해 의도적으로 빌딩 블록으로 만들어집니다.
즉, 지금 만든 node-base이미지는 node 애플리케이션을 실행하기 위한 기반 이미지로 사용할 수 있는, 빌딩 블록처럼 사용할 수 있습니다.
베이스 이미지를 만들었으니 이 이미지를 확장하여 추가 이미지를 빌드해 봅시다.
docker run --name=app-container -ti node-base
echo 'console.log("Hello from an app")' > app.js
node app.js
docker container commit -c "CMD node app.js" -m "Add app" app-container sample-app
이 명령어는 sample-app이라는 새 이미지를 생성할 뿐만 아니라, 컨테이너를 시작할 때 기본 명령을 설정하기 위해 이미지에 추가 구성을 추가합니다. 이 경우, 자동으로 node app.js를 실행하도록 설정합니다.
-c
또는 --change
플래그는 컨테이너를 커밋할 때 이미지에 추가 설정을 적용할 수 있습니다.
이 설정은 Dockerfile 지시문과 유사한 형태로 제공될 수 있으며, 이미지 생성 시 특정 명령을 실행하거나 환경 변수를 설정하는 등의 작업을 포함할 수 있습니다.
-c "CMD node app.js"
: 이 옵션은 이미지를 사용하여 컨테이너를 시작할 때 기본적으로 실행될 명령을 node app.js로 설정합니다. 즉, 이 이미지에서 컨테이너를 생성하고 시작하면 자동으로 node app.js 명령이 실행됩니다.-m
또는 --message
플래그는 커밋과 관련된 메시지를 이미지에 저장하는 데 사용됩니다.
버전 관리에서 커밋 메시지를 작성하는 것과 유사한 개념입니다.
-m "Add app"
: 이 옵션은 "Add app"이라는 메시지를 커밋에 포함시켜, 이 커밋이 특정 변경 사항을 포함하고 있음을 명시적으로 나타냅니다.docker image history sample-app
docker run sample-app
docker 베이스 이미지를 만드는 법을 알아보고, 레이어가 어떻게 생성되는지 확인하는 과정을 가졌다.