docker image load 명령어를 사용하여 이미지 로드 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker load 명령어를 사용하여 아카이브에서 Docker 이미지를 로드하는 방법을 배우게 됩니다. 이는 Docker 레지스트리에 의존하지 않고 머신 간에 이미지를 전송하는 데 필수적인 기술입니다. 먼저 docker save를 사용하여 Docker 이미지 아카이브를 준비하는 것으로 시작합니다.

준비가 완료되면 이미지를 로드하는 다양한 방법을 살펴보겠습니다. 여기에는 표준 입력 (STDIN) 에서 이미지 로드, --input 플래그를 사용하여 파일에서 로드, 그리고 --platform 플래그를 사용하여 특정 플랫폼 변형을 로드하는 것이 포함됩니다. 이러한 단계를 완료함으로써 오프라인에서 Docker 이미지를 관리하는 실질적인 경험을 얻게 될 것입니다.

Docker 이미지 아카이브 준비

이 단계에서는 Docker 이미지 아카이브를 준비하는 방법을 배우겠습니다. 이는 Docker 레지스트리에 의존하지 않고 서로 다른 머신 간에 Docker 이미지를 전송하는 데 유용합니다. docker save 명령어를 사용하여 기존 Docker 이미지의 아카이브를 생성합니다.

먼저, 이 데모에 사용할 수 있는 간단한 Docker 이미지를 가져와 보겠습니다. hello-world 이미지를 사용합니다.

docker pull hello-world

이미지가 풀링되고 있으며 매우 작은 이미지라는 것을 나타내는 출력을 볼 수 있습니다.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

이제 hello-world 이미지가 있으므로 tar 아카이브 파일에 저장할 수 있습니다. ~/project 디렉토리에 hello-world.tar라는 파일로 저장합니다.

docker save -o ~/project/hello-world.tar hello-world

-o 플래그는 출력 파일 경로를 지정합니다. 이 명령어는 hello-world 이미지를 지정된 파일에 저장합니다. 명령이 성공하면 아무런 출력이 보이지 않아야 합니다.

아카이브 파일이 생성되었는지 확인하려면 ~/project 디렉토리의 파일을 나열할 수 있습니다.

ls ~/project

파일 목록에 hello-world.tar가 표시되어야 합니다.

hello-world.tar

hello-world.tar 파일에는 이제 hello-world 이미지에 대한 Docker 이미지 데이터가 포함되어 있습니다. 이 파일을 다른 머신으로 전송하고 다음 단계에서 다룰 docker load 명령어를 사용하여 이미지에서 로드할 수 있습니다.

STDIN 에서 Docker 이미지 로드

이 단계에서는 표준 입력 (STDIN) 에서 Docker 이미지를 로드하는 방법을 배우겠습니다. 이는 이미지 아카이브를 로드하는 또 다른 방법이며, 특히 docker save의 출력을 docker load로 직접 파이핑할 때 유용합니다.

먼저, 이전 단계에서 풀링하고 저장한 hello-world 이미지를 제거해 보겠습니다. 이렇게 하면 기존 이미지를 사용하는 것이 아니라 아카이브에서 이미지를 로드하는지 확인할 수 있습니다.

docker rmi hello-world

이미지가 삭제되었다는 것을 나타내는 출력을 볼 수 있습니다.

Untagged: hello-world:latest
Deleted: sha256:...

이제 cat 명령어를 사용하여 hello-world.tar 파일의 내용을 표준 출력으로 출력한 다음 해당 출력을 docker load 명령어에 파이프합니다.

cat ~/project/hello-world.tar | docker load

docker load 명령어는 --input 플래그 없이 사용하면 STDIN 에서 이미지 아카이브를 읽습니다. 이미지 레이어가 로드되고 있음을 나타내는 출력을 볼 수 있습니다.

...
Loaded image: hello-world:latest

이미지가 성공적으로 로드되었는지 확인하려면 사용 가능한 Docker 이미지를 나열할 수 있습니다.

docker images

출력에 hello-world 이미지가 나열되어야 합니다.

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    ...            ...           ...

이는 STDIN 으로 파이프된 아카이브 파일에서 Docker 이미지를 로드하는 방법을 보여줍니다.

--input 옵션을 사용하여 파일에서 Docker 이미지 로드

이 단계에서는 docker load 명령어와 함께 --input 플래그를 사용하여 파일에서 Docker 이미지를 로드하는 방법을 배우겠습니다. 이는 파일에서 이미지 아카이브를 로드하는 가장 일반적인 방법입니다.

먼저, 아카이브 파일에서 로드하고 있는지 확인하기 위해 다시 hello-world 이미지를 제거해 보겠습니다.

docker rmi hello-world

이미지 삭제를 확인하는 출력을 볼 수 있습니다.

Untagged: hello-world:latest
Deleted: sha256:...

이제 --input 플래그와 함께 docker load 명령어를 사용하여 첫 번째 단계에서 생성한 hello-world.tar 파일의 경로를 지정합니다.

docker load --input ~/project/hello-world.tar

--input 플래그는 docker load에게 STDIN 대신 지정된 파일에서 이미지 아카이브를 읽도록 지시합니다. STDIN 에서 로드할 때와 유사한 출력을 볼 수 있으며, 레이어가 로드되고 있음을 나타냅니다.

...
Loaded image: hello-world:latest

이미지가 로드되었는지 확인하려면 Docker 이미지를 다시 나열합니다.

docker images

hello-world 이미지가 목록에 있어야 합니다.

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    ...            ...           ...

이 방법은 이미지 아카이브가 파일로 저장되어 있을 때 일반적으로 선호됩니다. 이는 파일 내용을 STDIN 으로 파이핑하는 것보다 명시적이기 때문입니다.

--platform 옵션을 사용하여 특정 플랫폼 변형 로드

이 단계에서는 --platform 플래그를 사용하여 아카이브에서 Docker 이미지의 특정 플랫폼 변형을 로드하는 방법을 살펴보겠습니다. 이는 이미지 아카이브에 여러 아키텍처 (예: linux/amd64, linux/arm64) 에 대한 변형이 포함된 경우 특히 유용합니다.

먼저, 다시 시작하기 위해 hello-world 이미지를 제거해 보겠습니다.

docker rmi hello-world

이미지 삭제를 확인하는 출력을 볼 수 있습니다.

Untagged: hello-world:latest
Deleted: sha256:...

이제 --input 플래그를 사용하여 아카이브 파일을 지정하고 --platform 플래그를 사용하여 원하는 플랫폼을 지정하는 docker load 명령어를 사용합니다. 이 예에서는 LabEx VM 의 아키텍처인 linux/amd64를 지정합니다.

docker load --input ~/project/hello-world.tar --platform linux/amd64

--platform 플래그는 Docker 가 지정된 아키텍처 및 운영 체제와 일치하는 이미지 변형만 로드하도록 보장합니다. hello-world 이미지는 매우 단순하고 아카이브에 상당한 플랫폼 변형이 없을 가능성이 높지만, 이는 플래그의 사용법을 보여줍니다. 레이어가 로드되고 있음을 나타내는 출력을 볼 수 있습니다.

...
Loaded image: hello-world:latest

이미지가 로드되었는지 확인하려면 Docker 이미지를 나열합니다.

docker images

hello-world 이미지가 목록에 있어야 합니다.

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    ...            ...           ...

다중 아키텍처 이미지 아카이브로 작업할 때는 --platform 플래그를 사용하여 환경에 맞는 올바른 변형을 로드하는 것이 중요합니다.

요약

이 랩에서는 레지스트리 없이 이미지를 전송하는 데 필수적인 docker save 명령어를 사용하여 Docker 이미지 아카이브를 준비하는 방법을 배웠습니다. hello-world 이미지를 tar 파일로 성공적으로 저장했습니다.

그런 다음 docker load 명령어를 사용하여 아카이브에서 Docker 이미지를 로드하는 다양한 방법을 살펴보았습니다. 파이핑 작업에 유용한 표준 입력 (STDIN) 에서 이미지를 로드하는 방법과 --input 플래그를 사용하여 파일에서 직접 이미지를 로드하는 방법을 배웠습니다. 마지막으로, --platform 플래그를 사용하여 아카이브에서 이미지의 특정 플랫폼 변형을 로드하는 방법을 발견하여 다중 플랫폼 이미지를 관리하기 위한 docker load 명령의 유연성을 보여주었습니다.