docker卷掛載與容器內外互相拷貝數據


一、宿主機與容器的掛載

docker可以支持把一個宿主機上的目錄掛載到鏡像里。命令如下:

docker run -it -v /mydownload:/download nginx:v1 /bin/bash

通過-v參數,冒號前為宿主機目錄,必須為絕對路徑,冒號后為鏡像內掛載的路徑。

現在鏡像內就可以共享宿主機里的文件了。

默認掛載的路徑權限為讀寫。如果指定為只讀可以用:ro, 之后在容器內進行文件的操作,將報出以下錯誤

$ touch text.txt
touch: cannot touch 'text.txt': Read-only file system

 

二、數據卷容器

如果你有一些持續更新的數據需要在容器之間共享,最好創建數據卷容器。
數據卷容器,其實就是一個正常的容器,專門用來提供數據卷供其它容器掛載的。

首先,創建一個普通的數據卷容器。用--name給他指定了一個名(不指定的話會生成一個隨機的名子)。

docker run -it -v /mydownload/:/download --name dataVol nginx:v1 /bin/bash

再創建一個新的容器,來使用這個數據卷。

docker run -it --volumes-from dataVol nginx:latest /bin/bash

--volumes-from用來指定要從哪個數據卷來掛載數據。

可以看到每個容器中都有掛載目錄/download

$ docker run -it --volumes-from dataVol nginx:latest /bin/bash
$ ls
bin  boot  dev    download  etc  home  lib  lib64  media    mnt  opt  proc    root  run  sbin  srv  sys  tmp    usr  var

 

三、容器內外互相拷貝數據

   1、從容器內拷貝文件到主機上

docker cp <containerId>:/file/path/within/container   /host/path/target  

   <containerId>:/file/path/within/container 表示容器id加具體路徑,

   /host/path/target 表示主機路徑


2、從主機上拷貝到容器(用卷掛載或直接拷貝)
這里將直接拷貝的方式
第一步:獲取容器的完整ID:FULL_CONTAINER_ID
docker inspect -f   '{{.Id}}' {CONTAINER ID}
或
docker inspect -f  '{{.Id}}'  {CONTAINER NAME}

    第二步:從主機上拷貝到容器

sudo cp file.txt /var/lib/docker/aufs/mnt/**FULL_CONTAINER_ID/PATH-NEW-FILE    

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM