一、宿主機與容器的掛載
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