docker image import

docker image import

tarball에서 내용을 가져와 파일시스템 이미지(filesystem image)를 만드는 명령이에요. 별칭으로 docker import를 쓸 수 있어요.

출처: 문서

본문

docker image import는 tarball에서 내용을 가져와 파일시스템 이미지를 만들 때 사용해요.

docker image import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

URL 또는 -(대시)를 지정하면 STDIN에서 직접 데이터를 받아와요. URL은 파일시스템을 담고 있는 아카이브(.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz)나 Docker 호스트의 개별 파일을 가리킬 수 있어요. 아카이브를 지정하면 Docker는 컨테이너 기준 /(루트)를 기준으로 압축을 풀어요. 개별 파일을 지정하면 호스트 안에서 전체 경로를 지정해야 해요. 원격 위치에서 가져오려면 http:// 또는 https:// 프로토콜로 시작하는 URI를 지정해요.

지원하는 옵션은 다음과 같아요.

옵션 기본값 설명
-c, --change 생성된 이미지에 Dockerfile 지시어 적용
-m, --message 가져온 이미지의 커밋 메시지 설정
--platform API 1.32+ 서버가 멀티 플랫폼을 지원하면 플랫폼 설정

원격 위치에서 가져오기

이 명령은 태그 없는 새 이미지를 만들어요.

$ docker import https://example.com/exampleimage.tgz

로컬 파일에서 가져오기

파이프와 STDIN으로 Docker에 가져와요.

$ cat exampleimage.tgz | docker import - exampleimagelocal:new

로컬 아카이브에서 Docker로 가져와요.

$ docker import /path/to/exampleimage.tgz

로컬 디렉터리에서 가져오기

$ sudo tar -c . | docker import - exampleimagedir

이 예제의 sudo에 주목해요. tar로 아카이빙하는 동안 파일의 소유권(특히 root 소유권)을 보존해야 해요. root(또는 sudo 명령)가 아닌데 tar를 실행하면 소유권이 보존되지 않을 수 있어요.

새 구성과 함께 가져오기 (-c, --change)

--change 옵션은 생성되는 이미지에 Dockerfile 지시어를 적용해요. 모든 Dockerfile 지시어가 지원되는 건 아니에요. 지원 목록은 메타데이터(구성) 변경으로 제한돼요. 지원되는 Dockerfile 지시어는 다음과 같아요.

다음 예제는 루트 파일시스템을 담은 TAR 파일에서 이미지를 가져오고, 결과 이미지에 DEBUG 환경 변수를 설정해요.

$ docker import --change "ENV DEBUG=true" ./rootfs.tgz exampleimagedir

--change 옵션은 여러 번 설정해서 여러 Dockerfile 지시어를 적용할 수 있어요. 아래 예제는 앞 예제의 DEBUG 환경 변수에 더해 가져온 이미지에 LABEL1LABEL2 라벨을 설정해요.

$ docker import \
    --change "ENV DEBUG=true" \
    --change "LABEL LABEL1=hello" \
    --change "LABEL LABEL2=world" \
    ./rootfs.tgz exampleimagedir

커밋 메시지와 함께 가져오기 (-m, --message)

--message(또는 -m) 옵션은 이미지 메타데이터에 커스텀 주석을 설정할 수 있어요. 다음 예제는 로컬 아카이브에서 이미지를 가져오면서 커스텀 메시지를 설정해요.

$ docker import --message "New image imported from tarball" ./rootfs.tgz exampleimagelocal:new
sha256:25e54c0df7dc49da9093d50541e0ed4508a6b78705057f1a9bebf1d564e2cb00

가져온 후 메시지는 이미지 구성의 "Comment" 필드에 설정돼요. 이미지 히스토리를 보면 확인할 수 있어요.

$ docker image history exampleimagelocal:new

IMAGE          CREATED         CREATED BY   SIZE      COMMENT
25e54c0df7dc   2 minutes ago                53.6MB    New image imported from tarball

데몬이 여러 운영체제를 지원할 때

데몬이 여러 운영체제를 지원하고, 가져오는 이미지가 기본 운영체제와 맞지 않으면 --platform을 추가해야 할 수 있어요. Linux 이미지를 Windows 데몬으로 가져올 때 필요해요.

$ docker import --platform=linux .\linuximage.tar

가져온 이미지의 플랫폼 설정 (--platform)

--platform 옵션은 가져온 이미지의 플랫폼을 지정할 수 있어요. 기본적으로 데몬의 네이티브 플랫폼을 사용하지만, 가져온 루트 파일시스템이 다른 아키텍처나 운영체제용일 때 --platform으로 기본값을 덮어쓸 수 있어요.

플랫폼 옵션은 os[/arch[/variant]] 형식을 취해요. 예를 들어 linux/amd64 또는 linux/arm64/v8이에요. 아키텍처와 변형은 선택 사항이고, 생략하면 데몬 네이티브 아키텍처로 기본값을 정해요.

다음 예제는 rootfs.tgz의 루트 파일시스템에서 이미지를 가져오고, 이미지의 플랫폼을 linux/amd64로 설정해요.

$ docker image import --platform=linux/amd64  ./rootfs.tgz imported:latest
sha256:44a8b44157dad5edcff85f0c93a3e455f3b20a046d025af4ec50ed990d7ebc09

가져온 후 이미지의 플랫폼은 이미지 구성에 설정돼요.

$ docker image inspect --format '{{.Os}}/{{.Architecture}}' imported:latest
linux/amd64

더 알아보기