docker hub를 이용하지 않고, docker image를 배포하기 위해서는 기존 docker image를 복제하여 remote 서버에서 사용할 수 있어야 한다. 이를 위해서 docker는 3가지 방법을 제공하고 있는데, 각각의 특징 및 활용방법을 확인해 본다.
[Save]
1. 특징
– 원본 image를 그대로 복제하여 file로 export
2. 활용
– 인터넷 접속이 어려운 상황에서 image를 직접 배포하는 용도
– import, commit과 차이 없음
3. example
> docker save ubuntu | gzip > ubuntu-golden.tar.gz
> zcat ubuntu-golden.tar.gz | docker load
[export]
1. 특징
– 현재 구동중인 container의 상태(파일/폴더추가, log 등)를 그대로 복제
– 원본 image와 다른 현재 운영상태를 image로 export
2. 활용
– 현재 운영상태를 그대로 유지하여 container를 확장하는 경우
3. 고려사항
– Dockerfile이 유지되지 않아, 새로운 설정을 추가하기 어려움.
4. example
> docker export <containerid> | gzip > mariadb-10-1.tar.gz
> zcat mariadb-10-1.tar.gz | docker import – mariadb:10.1
5. Troubleshooting
– export -> import -> docker run을 실행하면, 아래 에러 발생 “docker: Error response from daemon: No command specified.”
– export는 변경된 filesystem만 export하지, Dockerfile의 ENV, CMD, ENTRYPOINT등을 반영하지 못함.
– 해결
* save 명령어를 사용
* import시에 실행할 명령어를 옵션으로 추가할 수 있으나, save -> load를 이용하여 처리하는 것이 안정적일 것 같다.
[commit]
1. 특징
– 실행중인 container를 image로 저장
– export와 다른 점은 실행결과가 새로운 image를 생성하는 것.
– save/export는 모두 image를 file로 생성.
– 새로운 image를 생성하면서 -c 옵션으로 CMD, ENV등의 명령어를 적용할 수 있음.
2. 활용
– 일반적인 상황에서는 대부분 export를 많이 사용.
– commit은 임시 container에서 작업한 내용을 다른 곳에서 활용하고자 할때, 작업 내용이 사라지지 않도록 image로 저장하는 용도? (추측..)
3. example
> docker commit –change “ENV DEBUG true” c3f279d17e0a svendowideit/testimage:version3
[출처] [docker] import vs save vs commit|작성자 freepsw