다른 호스트로 Docker 컨테이너 복사/이동하는 방법

Docker 컨테이너는 소프트웨어의 작은 박스이기 때문에 컴퓨터에서 컴퓨터로 쉽게 복사하고 이동할 수 있습니다. 로컬 컴퓨터에서 Docker 인스턴스 작업을 하고 더 강력한 서버로 이동하기로 결정했을 수도 있습니다. 또는 여러 컴퓨터에 사용자 정의 컨테이너를 배포하고 “복사 및 붙여넣기”하고 싶을 수도 있습니다. 또 어떤 경우에는 클라우드 컴퓨팅 제공업체에 불만이 생겨 다른 업체로 전환하고 싶을 수도 있습니다. 이 글에서는 기존 Docker 컨테이너 이미지 및 데이터 볼륨을 한 Linux 호스트에서 다른 호스트로 이동하는 방법을 보여줍니다.
목차
- 소스 호스트에서 컨테이너 이미지 저장
- 컨테이너에서 Docker 볼륨 내보내기
- 대상 호스트에서 컨테이너 이미지 로드
- 컨테이너로 Docker 볼륨 가져오기
- 파일 생성 없이 이미지 전송하기
- 전체 Docker 배포 이동을 위한 Docker Compose 사용하기
알아두면 좋은 정보: Linux 배포판에 Docker를 설치하여 컨테이너를 시작해 보세요.
소스 호스트에서 컨테이너 이미지 저장
먼저 시스템에서 실행 중인 Docker 컨테이너를 나열합니다. 제 경우에는 Nginx Docker 컨테이너를 새 머신으로 내보내고 싶습니다:
docker ps복사하려는 컨테이너를 찾은 다음 인스턴스를 중지합니다:
docker stop NAME_OF_INSTANCE
Docker 컨테이너는 일반적인 초기 이미지로 구축됩니다. 시간이 지남에 따라 이 기본 이미지에 대한 변경 사항을 추가하게 됩니다. 컨테이너 내에서 실행되는 프로세스는 자신의 데이터를 저장하거나 다른 변경을 할 수 있습니다. 이 모든 것을 보존하기 위해 컨테이너의 현재 상태를 새로운 이미지로 커밋합니다:
docker commit NAME_OF_INSTANCE mycontainerimage
인스턴스가 현재 실행 중인 경우 이 작업은 내용을 저장하는 동안 일시 중지됩니다. 이 문제를 피하려면 대신 docker commit -p=false NAME_OF_INSTANCE mycontainerimage를 입력하여 이 일시 정지를 피할 수 있습니다. 그러나 절대적으로 필요하지 않은 경우에는 이렇게 하지 마세요. 이 경우 일관성/불완전한 데이터로 이미지를 생성할 가능성이 높아집니다.
이제 새로 커밋한 Docker 컨테이너 이미지를 아카이브 파일로 저장합니다:
docker save -o mycontainerimage.tar mycontainerimage선호하는 파일 전송 방법을 사용하여 .tar 파일을 Docker 컨테이너를 이동하려는 호스트로 복사합니다. 예를 들어, 다음 명령은 scp를 사용하여 제 Nginx Docker 이미지를 전송합니다:
scp ./mycontainerimage.tar [email protected]:/home/ramces/컨테이너에서 Docker 볼륨 내보내기
Docker 이미지를 저장하는 단점 중 하나는 컨테이너와 함께 설정한 Docker 액세서리와 함께 제공되지 않는다는 것입니다. 여기에는 모든 네트워크 바인드 마운트와 지속적인 데이터를 저장하기 위해 만든 볼륨이 포함됩니다.
데이터 볼륨을 제대로 내보내려면 먼저 로컬 머신에 Git를 설치합니다:
sudo apt install git다음 명령을 실행하여 Docker용 볼륨 내보내기 스크립트를 다운로드합니다:
git clone https://github.com/ricardobranco777/docker-volumes.sh.git내보내기 스크립트에 올바른 권한 비트가 있는지 확인한 다음, 머신의 “/usr/local/bin” 디렉토리로 복사합니다:
sudo chmod +x ./docker-volumes.sh/docker-volumes.sh
sudo cp ./docker-volumes.sh/docker-volumes.sh /usr/local/bin/스크립트가 제대로 작동하는지 테스트한 다음, 컨테이너와 관련된 모든 볼륨을 추출합니다:
docker-volumes.sh -h
docker-volumes.sh NAME_OF_INSTANCE save mycontainerimage-volume.tar
새로 아카이브된 Docker 볼륨 파일을 원격 머신으로 전송합니다:
scp ./mycontainerimage-volume.tar [email protected]:/home/ramces/대상 호스트에서 컨테이너 이미지 로드
원격 호스트에 로그인한 다음, 다음 명령을 실행하여 원격 머신의 Docker 데몬에 로드합니다:
docker load -i ./mycontainerimage.tardocker create를 사용하여 소스 머신의 원래 실행 플래그로 Docker 컨테이너 이미지를 재초기화합니다. 예를 들어, 제 Nginx Docker 컨테이너는 원래 포트 80이 호스트 머신의 포트 8080에 매핑되어 있었습니다:
docker create --name my-nginx-container -p8080:80 mycontainerimage새롭게 가져온 Docker 컨테이너를 실행합니다:
docker start my-nginx-container시스템에서 모든 활성 컨테이너를 나열하여 가져온 이미지가 제대로 작동하는지 확인합니다:
docker ps
참고: Raspberry Pi를 Docker를 사용하여 Photoprism을 설치하여 유능한 포터블 사진 갤러리로 변신시켜 보세요.
컨테이너로 Docker 볼륨 가져오기
.tar Docker 볼륨 파일을 가져오려면, 먼저 새 호스트에 Git를 다운로드합니다:
sudo apt install git원래 시스템과 마찬가지로 docker-volume.sh 보조 스크립트를 다운로드하고, 실행 권한 비트를 “실행 가능”으로 설정한 후, 새 머신의 “/usr/local/bin” 디렉토리에 복사합니다.

수출된 이미지 파일을 사용하여 새 Docker 컨테이너를 생성합니다:
docker create --name my-nginx-container -v myvol:/usr/share/nginx/html -p8080:80 mycontainerimage원래의 .tar 파일을 사용하여 docker-volume.sh 스크립트를 실행하여 새 시스템의 Docker 데몬에 로드합니다:
docker-volumes.sh my-nginx-container load mycontainerimage-volume.tar다음 명령을 실행하여 새 Docker 컨테이너를 시작합니다:
docker start my-nginx-container컨테이너가 볼륨을 제대로 로드하는지 확인하려면 내부 구성 데이터를 확인합니다:
docker inspect -f'{{ .Mounts }}' my-nginx-container
파일 생성 없이 이미지 전송하기
때때로 mycontainerimage.tar.gz 파일 생성 과정을 건너뛰고 싶을 수 있습니다. 컨테이너에 데이터가 너무 많아서 디스크 공간이 충분하지 않을 수도 있습니다. 이미지를 저장하고 전송한 후 목적지 호스트에서 한 명령으로 로드할 수 있습니다. 이전에 언급한 docker commit 명령을 실행한 후, 다음과 같이 사용할 수 있습니다:
docker save mycontainerimage | ssh [email protected] docker loadWindows에서도 잘 작동할 것이며, 이제 내장 SSH 클라이언트가 있어 PuTTY가 필요하지 않습니다.
상황에 맞는 docker create 명령을 계속 진행합니다.
참고: 가져온 이미지를 시작하기 전에 이전에 컨테이너에 연결된 Docker 볼륨을 제대로 마운트했는지 확인하세요.
마지막으로 docker start 명령으로 새로 가져온 Docker 컨테이너를 시작합니다.

전체 Docker 배포 이동을 위한 Docker Compose 사용하기
Docker의 Compose 플러그인을 사용하면 서버의 기본 소프트웨어 스택에 대해 걱정하지 않고 복잡한 프로그램을 구축, 구성 및 실행할 수 있습니다. 이를 통해 서로 다른 Linux 시스템 간에 재현 가능한 애플리케이션 배포를 구축할 수 있습니다.
기존 Docker 설정을 Docker Compose로 마이그레이션하려면, 첫째, 시스템에 해당 플러그인이 설치되어 있는지 확인합니다:
sudo apt install docker-compose-plugin docker-buildx-plugin홈 디렉토리에 Docker Compose 설치를 위한 새 폴더를 생성합니다:
mkdir ~/my-docker-compose && cd ~/my-docker-compose즐겨 사용하는 텍스트 편집기를 사용하여 애플리케이션을 위한 “docker-compose.yml” 파일을 생성합니다:
nano ./docker-compose.ymlCompose 파일 내부에 다음 코드 블록을 붙여넣고, 귀하의 필요에 맞게 조정합니다:
version: '3'
volumes:
myvol: # 가져온 볼륨 이름으로 교체해 주세요.
services:
nginx:
image: mycontainerimage # 가져온 Docker 이미지의 이름으로 교체해 주세요.
ports:
- "8080:80"
volumes:
- myvol:/usr/share/nginx/html # "myvol"을 마운트한 이미지의 이름으로 교체해 주세요.새 Compose 파일을 저장한 다음, 다음 명령으로 시작합니다:
docker compose up -d마지막으로 Compose 배포가 제대로 작동하는지 확인합니다. 이 경우, 웹 브라우저를 열어 “localhost:8080”으로 이동하여 제 Nginx Docker 컨테이너를 테스트할 것입니다.

Docker 컨테이너를 다른 Linux 호스트로 복사하고 이동하는 방법을 배우는 것은 머신에서 수행할 수 있는 몇 가지 작업 중 하나에 불과합니다. Docker를 사용하여 Linux에서 Minecraft 서버를 설치하여 자가 호스팅의 이 멋진 세계를 탐험해 보세요.
이미지 제공: Max Duzij via Unsplash. 모든 변경 및 스크린샷은 Ramces Red에 의해 작성되었습니다.