3.使用 data container (container )
預設情況下,容器不使用任何 volume,此時,容器的資料被儲存在容器之內,它只在容器的生命週期內存在,會隨著容器的被刪除而被刪除。當然,也可以使用 docker commit 命令將它持久化為乙個新的映象。很多情況下我需要資料持續化儲存.
docker容器啟動的時候,如果要掛載宿主機的乙個目錄,可以用-v引數指定
這樣在容器啟動後,容器內會自動建立/home/data的目錄。通過這種方式,我們可以明確一點,即-v引數中,冒號":"前面的目錄是宿主機目錄,後面的目錄是容器內目錄。
ps:路徑為絕對路徑
啟動容器
[root@au opt]# docker run -d --name=dor -v /opt/datasource:/home/data yjgithub/dor
容器: yjgithub/dor
宿主機絕對路徑:/opt/datasource
容器絕對路徑:/home/data
通過docker inspect命令檢視詳細資訊
docker inspect $containerid
[root@au opt]#docker ps
container id image command created status ports names
1249319e10ca yjgithub/dor "nginx -g 'daemon of…" about a minute ago up about a minute 80/tcp dor
[root@au opt]#docker inspect 1249319e10ca
"mounts": [
],
ps:
1.容器銷毀了,在宿主機上新建的掛載目錄不會消失
2.如果宿主機目錄存在,在執行容器時也會對映到容器中
3.宿主機目錄資料,在執行容器時也會同步
4.掛載宿主機已存在目錄後,在容器內對其進行操作,報「permission denied」,
4.1 設定selinux永久關閉
修改/etc/sysconfig/selinux檔案,將selinux的值設定為disabled。
4.2 以特權方式啟動容器 指定--privileged引數
[root@au opt]# docker run -d --name=dor --privileged=true -v /opt/datasource:/home/data yjgithub/dor
如果要在容器之間共享資料,最好是使用 data container。這種 container 中不會跑應用,而只是掛載乙個卷
建立乙個 data container:
[root@au opt]#docker create -v /opt/datasource/share:/dbdata --name dbstore yjgithub/dor /bin/true
使用這個 volume
[root@au opt]#docker run -d -p --name web --volumes-from dbstore yjgithub/dor
[root@au share]# docker inspect web
"mounts": [
],
結果還是一樣的,即將 au 對應的主機上的目錄掛載給容器內的 /volume 目錄。
這種做法,能想到的好處就是容器件共用資料
感覺上兩種做法都是一樣的,何不直接用第一種? 如果還有更好的做法或者其他場景,可以一起討論下.
Docker掛載目錄 備份目錄
docker run p 80 name website v pwd website var www html website ro 172.17.0.2 5000 nginx nginx a p指定埠 b name重新命名容器的名稱 c v使用本地檔案掛載到容器 d 預設掛載的路徑許可權為讀寫。如...
docker容器目錄掛載
我們可以在建立容器的時候,將宿主機的目錄與容器內的目錄進行對映,這樣我們就可以實現宿主機和容器目錄的雙向資料自動同步 我們cp命令來實現資料傳遞,這種方式比較麻煩 我們通過容器目錄掛載,能夠輕鬆實現 上傳,配置修改,日誌同步等需求 docker run it v 宿主機目錄 容器目錄 映象名dock...
Docker掛載本地目錄
命令 docker run v 需掛載目錄的路徑 容器掛載路徑 name 資料卷名字 容器名字 bin bash 例子 docker run v home dock downloads usr downloads name dat ol ubuntu64 bin bash 命令 docker run...