一、主控端與容器的挂載
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加具體路徑,
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