Infra & Devops/Docker

[Docker] 도커 이미지 생성 (commit, export/import, save/load)

겸둥이xz 2021. 9. 18. 01:58
반응형
컨테이너는 이미지 바탕으로 작성하지만, 반대로 컨테이너를 바탕으로 이미지를 작성할 수 있다.

컨테이너로부터 이미지 작성 (docker container commit)

docker container commit [옵션] <컨테이너 식별자> [이미지명][:태그명]
옵션 설명
--author, -a 작성자 지정
--message, -m 메시지 지정
--change, -c commit 시 Dockerfile 명령을 지정
--pause, -p 컨테이너를 일시정지하고 commit

 

이미지 만들기

# 컨테이너 실행
docker run -dit --name Test centos:latest		

# 파일 생성
docker exec Test touch /root/hello.txt			
docker container commit -a "My_Image" Test commit-test:latest

[user@localhost ~]$ docker image inspect commit-test:latest

...
        "RootFS": {
            "Type": "layers",
            "Layers": [
            # ✅ centos기반
                "sha256:2653d992f4ef2bfd27f94db643815aa567240c37732cae1405ad1c1309ee9859", 
                "sha256:926a0e5d4261c1b1062cc701cf57d392374f06e92fec9bd8c1d180d88ff3f08b"
            ]
        },
...

'commit-test' 이미지로 컨테이너 실행

  • 'hello.txt' 포함되어 있음

컨테이너를 tar 파일로 출력 (docker container export)

# 실행중인 컨테이너  export
[user@localhost ~]$ docker container export Test > export.tar

  • 컨테이너 안의 전체 내용을 파일로 만든다

tar 파일로 이미지 작성하기 (docker image import)

docker image import <파일 or URL> | - [이미지명[:태그명]]

cat <파일> | docker image import - [이미지명:[태그명]]

레이어 확인 (docker image inspect import-test:latest)

  • commit과 다르게 자체적으로 새로운 레이어가 하나 만들어짐
  • "Env", "Cmd"는 null이다
    • 직접 설정해야 한다

이미지 저장 (docker image save)

docker image save [옵션] <저장 파일명> [이미지명]
  • -o : 저장할 파일명 지정

  • tar 파일로 저장 가능

이미지 읽기 (docker image load)

docker image load [옵션]
  • -i : 읽을 파일 지정

기존 nginx 이미지 삭제 후 load

  • 레이어가 그대로 살아있음

export/import와 save/load 차이 ⭐️

export

  • 컨테이너를 export 하면 컨테이너를 작동시키는데 필요한 파일을 모두 압축 아카이브로 모음
  • 그래서 이 tar 파일을 풀면 컨테이너의 루트 파일 시스템을 그대로 추출 가능

save

  • 이미지를 save 하면 이미지의 레이어 구조도 포함된 형태로 압축 아카이브로 모음
  • 마찬가지로 Nginx의 공식 이미지인 'nginx'를 docker image save 명령을 통해 nginx.tar로 모음
같은 바탕이 되는 이미지는 똑같아도 export와 save 명령은 내부적인 디렉토리와 파일 구조가 다르다.
export 명령으로 작성한 것은 import로 읽고, save로 생성한 것은 load를 사용해서 읽어야 함.

 


<참고자료>

'완벽한 IT 인프라 구축을 위한 Docker 2판'

반응형