Docker | 容器數據卷詳解

什么是容器數據卷從docker的理念說起,docker將應用和環境打包成一個鏡像,運行鏡像(生成容器)就可以訪問服務了 。

  • 如果數據都存在容器中,那么刪除容器,數據就會丟失!需求:數據可以持久化
  • MySQL容器刪了,就相當于刪庫了 。需求:MySQL數據可以本地存儲
容器之間可以有一個數據共享的技術,docker容器產生的數據同步到本地或者別的地方 。
這就是數據卷技術,就是目錄掛載,將容器內的目錄,掛載到虛擬機上或者Linux上
Docker | 容器數據卷詳解

文章插圖
目的:實現容器數據的持久化和同步操作 。容器間也可以數據共享
數據的覆蓋問題
  1. 如果掛載一個空的數據卷到容器中的一個非空目錄中,那么這個目錄下的文件會被復制到數據卷中 。
  2. 如果掛載一個非空的數據卷到容器中的一個目錄中,那么容器中的目錄中會顯示數據卷中的數據 。如果原來容器中的目錄中有數據,那么這些原始數據會被隱藏掉 。
這兩個規則都非常重要,靈活利用第一個規則可以幫助我們初始化數據卷中的內容 。掌握第二個規則可以保證掛載數據卷后的數據總是你期望的結果 。
使用數據卷方式一:直接使用命令掛載 -vdocker run -it -v 主機目錄:容器內目錄docker run -it -v /home/test:/home centos /bin/bashdocker inspect 命令查看容器信息
Docker | 容器數據卷詳解

文章插圖
測試掛載卷1、在容器內部修改文件同步到Linux主機上進入容器,在/home目錄下創建123.sh文件
Docker | 容器數據卷詳解

文章插圖
主機內可以查看在容器內部創建的文件
Docker | 容器數據卷詳解

文章插圖
2、同樣地,在Linux上修改掛在卷文件可以同步到容器內部
Docker | 容器數據卷詳解

文章插圖
3、停止容器,修改Linux主機上的文件,同步到容器內# 1、停止容器exit# 2、查看容器是否還在運行docker ps# 3、在Linux主機上修改對應目錄的文件# 4、啟動容器并查看  # 4.1、 查看歷史運行的容器  docker ps -a  # 4.2、 啟動容器  docker start CONTAINER ID  # 4.3、 進去容器  docker attach CONTAINER ID  # 4.4、 查看數據卷文件
Docker | 容器數據卷詳解

文章插圖
方式二:Dockerfile文件請查看下一章節
數據卷命令docker volumedocker volume --helpUsage:  docker volume COMMANDManage volumesCommands:  create      Create a volume  inspect     Display detailed information on one or more volumes  ls          List volumes  prune       Remove all unused local volumes  rm          Remove one or more volumesRun 'docker volume COMMAND --help' for more information on a command.
Docker | 容器數據卷詳解

文章插圖
具名掛載/匿名掛載匿名掛載-v 容器內路徑-P 自動分配端口號docker run -d -P --name nginx02 -v /etc/nginx nginx具名掛載-v 卷名:容器內路徑docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx
Docker | 容器數據卷詳解

文章插圖
查看數據卷方式一:docker inspect 容器ID
Docker | 容器數據卷詳解

文章插圖
方式二:docker volume inspect juming-nginx
Docker | 容器數據卷詳解

文章插圖
查看Linux主機docker工作目錄 /var/lib/docker
所有docker容器內的卷,沒有指定目錄的情況下都是存放在 /var/lib/docker/volumes/xxx/_data 目錄下

推薦閱讀