[docker] Docker의 기존 명명 된 볼륨에 데이터를 추가하는 올바른 방법은 무엇입니까?

볼륨 컨테이너와 함께 예전 방식으로 Docker를 사용했습니다.

docker run -d --name jenkins-data jenkins:tag echo "data-only container for Jenkins"

하지만 이제 명명 된 볼륨을 생성하여 새로운 방식으로 변경했습니다.

 docker volume create --name my-jenkins-volume

이 새 볼륨을 새 Jenkins 컨테이너에 바인딩했습니다. 내가 남긴 유일한 것은 /var/jenkins_home이전 젠킨스 컨테이너 의 폴더입니다 . (사용하여 docker cp) 이제 새 명명 된 볼륨을 해당 폴더의 내용으로 채우고 싶습니다.

해당 폴더의 내용을 복사 할 수 있습니까 /var/lib/jenkins/volume/my-jenkins-volume/_data?



답변

당신은 할 수 확실히 직접적으로 데이터를 복사 /var/lib/docker/volumes/my-jenkins-volume/_data하지만, 이렇게함으로써 당신은 다음과 같습니다 :

  • Docker 호스트에 대한 물리적 액세스에 의존합니다. 이 기술은 원격 Docker API와 상호 작용하는 경우 작동하지 않습니다.

  • 볼륨 구현의 특정 측면에 의존하면 향후 변경 될 수 있으며 이에 의존하는 프로세스가 중단 될 수 있습니다.

명령 줄 클라이언트를 통해 도커 API를 사용하여 수행 할 수있는 작업에 의존하는 것이 더 낫다고 생각합니다. 가장 쉬운 해결책은 아마도 다음과 같은 도우미 컨테이너를 사용하는 것입니다.

docker run -v my-jenkins-volume:/data --name helper busybox true
docker cp . helper:/data
docker rm helper


답변

예를 들어 다음을 사용하여 허용되는 답변을 한 줄로 줄일 수 있습니다.

docker run --rm -v `pwd`:/src -v my-jenkins-volume:/data busybox cp -r /src /data


답변

이미 존재하는 명명 된 볼륨에 데이터를 추가하기 위해 일부 컨테이너를 시작할 필요가 없습니다. 컨테이너를 만들고 여기에 데이터를 복사하기 만하면됩니다.

docker container create --name temp -v my-jenkins-volume:/data busybox
docker cp . temp:/data
docker rm temp


답변

~ / data의 내용을 my-vol 이라는 도커 볼륨 에 복사하는 단계는 다음과 같습니다.

단계 1. 볼륨을 “임시”컨테이너에 연결합니다. 터미널에서 실행하려면 다음 명령을 사용하십시오.

docker run --rm -it --name alpine --mount type=volume,source=my-vol,target=/data alpine

2 단계. ~ / data의 내용 을 my-vol에 복사합니다 . 이를 위해 새 터미널 창에서 다음 명령을 실행하십시오.

cd ~/data
docker cp . alpine:/data

~ / data의 내용 을 my-vol 볼륨에 복사합니다 . 복사 후 임시 컨테이너를 종료하십시오.


답변