2015-01-19 1 views
0

TL; DR 내 docker save/export이 작동하지 않아 그 이유를 알 수 없습니다.Docker : 파일 시스템이 변경되지 않음

Mac 용 boot2docker를 사용하고 있습니다.

저는 Wordpress 설치 증명 개념을 만들었으며 BusyBox를 MySQL 컨테이너와 메인 파일 시스템 컨테이너로 사용하고 있습니다.

> docker run -v /var/lib/mysql --name=wp_datastore -d busybox 
> docker run -v /var/www/html --name=http_root -d busybox 

모두 busybox:latest에 따라, docker ps -a 두 개의 컨테이너를 보여줍니다 실행 : 내가 사용하여 이러한 컨테이너를 만들었습니다. 여태까지는 그런대로 잘됐다. 그럼 각각의 데이터 컨테이너를 가리키는 워드 프레스와 MySQL 컨테이너를 만들 : 내 URL (boot2docker ip)에 가서 새로운 워드 프레스 응용 프로그램이있다

>docker run \ 
--name mysql_db \ 
-e MYSQL_ROOT_PASSWORD=somepassword \ 
--volumes-from wp_datastore \ 
-d mysql 

>docker run \ 
--name=wp_site \ 
--link=mysql_db:mysql \ 
-p 80:80 \ 
--volumes-from http_root \ 
-d wordpress 

합니다. 나는 주제와 약간 심상을 추가해서 Wordpress 위치를 전진하고 설치한다. 그럼 docker inspect http_root 그리고 파일 시스템 변경 사항이 모두 있는지 확인하십시오.

나는 다음 변경 컨테이너를 커밋 : 내 새로운 이미지가 있는지 확인

>docker commit http_root evilnode/http_root:dev 
>docker commit wp_datastore evilnode/wp_datastore:dev 

. 그런 다음 이미지를 저장합니다 :

> docker save -o ~/tmp/http_root.tar evilnode/http_root:dev 
> docker save -o ~/tmp/wp_datastore.tar evilnode/wp_datastore:dev 

나는 tar 파일도 있는지 확인합니다. 여태까지는 그런대로 잘됐다.

여기 제가 조금 혼란스러워합니다. 내가 필요하면 완전히 모르겠지만, 나는 또한 컨테이너 수출 :

  • http_root.tar (저장된 이미지)
  • wp_datastore :

    > docker export http_root > ~/tmp/http_root_snapshot.tar 
    > docker export wp_datastore > ~/tmp/wp_datastore_snapshot.tar 
    

    그래서 지금 4 개 tar 파일을을 를 .tar (저장된 이미지)

  • http_root_snapshot.tar (수출 컨테이너)
  • wp_datastore_snapshot.tar (수출 컨테이너)

내가 다른 컴퓨터에이 tar 파일을 SCP 한 후 다음과 같이 구축 진행 :

>docker load -i ~/tmp/wp_datastore.tar 
>docker load -i ~/tmp/http_root.tar 

이미지 evilnode/wp_datastore:devevilnode/http_root:dev가로드됩니다.

>docker run -v /var/lib/mysql --name=wp_datastore -d evilnode/wp_datastore:dev 
>docker run -v /var/www/html --name=http_root -d evilnode/http_root:dev 

만약 내가 제대로 이해하고

, 용기는 단지 내 이미지을 기준으로 작성되었습니다.

물론 컨테이너가 있습니다. 그러나 내가 docker inspect http_root이고 파일 위치가 /var/www/html 인 별칭이 지정되면 디렉터리가 완전히 비어 있습니다. OK ...

그렇다면 이미지에 파일 시스템 변경 사항이 포함되어 있지 않으므로 새 컨테이너로 가져와야한다고 생각합니다.나는이 작업을 수행 :

>cat http_root.snapshot.tar | docker import - http_root 

은 내가 다른에 하나 개의 컨테이너에서 파일 시스템 델타 가져 오기를하고 있음을 의미하는 것으로이 문제를 이해합니다. 그러나 /var/www/html 별칭이 지정된 위치로 돌아 가면 같은 빈 디렉터리가 나타납니다.

변경 사항을이 컨테이너에서 내보내려면 어떻게해야합니까?

답변

2

볼륨이 새 이미지와 함께 내보내지지 않습니다. Docker에서 데이터를 관리하는 올바른 방법은 데이터 컨테이너를 사용하고 docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata 또는 docker cp과 같은 명령을 사용하여 데이터를 백업하고 전송하는 것입니다. https://docs.docker.com/userguide/dockervolumes/#backup-restore-or-migrate-data-volumes

+1

장면 뒤에서 컨테이너 볼륨은 호스트의 디렉토리 (또는 boot2docker, VM의 경우)에 바인드 마운트됩니다. 따라서 Docker에서 사용하는 Copy-on-Write 파일 시스템에는 포함되지 않으므로 이미지 레이어에 포함되지 않습니다. 따라서 그들은 '수출'또는 '저장'에 포함되지 않는다. – Andy