日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一、前言

我們知道,鏡像是只讀的,容器是在鏡像的基礎上加了一層讀寫層,這樣容器就可以寫了。既然容器可以進行寫入了,那么我們就可以把一些數(shù)據(jù)放進容器里面。但是這樣會有一種問題:如果容器被刪除了,那么容器里面的數(shù)據(jù)也將會被刪除。這該怎么解決呢?這時我們就可以使用Volume來解決這種問題。

二、volume

1、什么是volume

我們先來考慮這樣一個問題:如何把源代碼放進容器里面

  • 可以在制作鏡像時直接把源代碼嵌入里面。(不考慮這種方式)
  • 把源代碼掛載到容器的可讀寫層。

那么什么是Volume呢?

  • Volume(卷)是容器中一個特別種類的目錄,通常叫做數(shù)據(jù)volume,顧名思義,里面可以放置各種類型的數(shù)據(jù),例如代碼、日志文件、數(shù)據(jù)文件等等。
  • Volume可以在容器間被共享和復用。可以讓多個容器對同一個volume進行讀寫,也可以讓一個容器讀寫多個volume。
  • 對鏡像的更新并不會影響volume。
  • Volume是被持久化的,即使容器被刪除,它仍然存在。

我們可以用下面的一張圖來理解Volume

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

藍色的部分表示容器,淺綠色的部分表示volume。可以在容器里面定義一個Volume,在容器里面的路徑定義為/var/www,這里的路徑是任意的。如果我們想把源代碼寫到/var/www路徑里面,這個路徑不應該是在容器里面,應該是在容器外部,否則容器被刪除了,里面的數(shù)據(jù)也就隨之被刪除。

在來看下面一張圖

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

在上圖中,我們在容器里面的/var/www路徑里面寫入了一些東西,而這個路徑就是Docker宿主里面掛載的一個文件夾。我們用上面的截圖來說明,容器里面的/var/www的路徑就是對于的docker宿主里面的/mnt路徑,這個路徑也是可以自定義的。 如果使用的是Linux操作系統(tǒng)或者Windows Server2016及以上版本的操作系統(tǒng),這里的Docker宿主機就是操作系統(tǒng)。而在Windows10上面,其實是使用的一個Linux的虛擬機,這時的Docker宿主機是Linux虛擬機。

我們往容器的/var/www路徑里面寫入東西,其實是寫入到了Docker宿主的/mnt路徑下面,這樣即使把容器刪除掉了,數(shù)據(jù)還是會保存在Docker的宿主里面。除非docker宿主機的文件也被刪除了,否則數(shù)據(jù)就會一直存在。

看下面的一個例子

docker run --name=nginx -d -p 4030:80 -v /var/www nginx

對上面命令的解釋:

  • -v:表示在容器里面創(chuàng)建一個volume。指定容器里面創(chuàng)建的volume路徑是/var/www,也就是路徑的別名。這里沒有指定docker宿主機里面的路徑,docker就會在宿主機里面自動指定一個路徑

如圖所示

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)我們看到這個容器已經(jīng)在運行了。我們使用inspect命令查看容器信息

docker inspect nginx

這里使用的是容器名稱,也可以使用容器ID。

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

我們查看Mounts節(jié)點信息

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

在這個節(jié)點里面,我們可以看到容器里面的地址和Docker宿主機里面的地址。

我們進入Docker宿主機的目錄查看

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

在docker的宿主機里面就可以看到自動生成的路徑了。

上面的例子中,我們是使用的Docker自動生成的路徑,我們還可以自定義寫入路徑。

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

我們在demo目錄下面創(chuàng)建一個MyVolumn目錄,然后把容器里面的路徑指定到創(chuàng)建的MyVolumn目錄

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

然后在執(zhí)行下面的命令

docker run --name=nginx -d -p 4030:80 -v /demo/MyVolumn:/var/www nginx

對上面命令的解釋如下

  • /demo/MyVolumn:表示Docker宿主機定義的目錄。
  • /var/www:表示容器里面的目錄。

如圖所示

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

我們在使用inspect命令查看

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

查看Mounts節(jié)點

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

這里就是我們自定義的路徑了。

2、寫入操作

上面的兩個例子中都沒有數(shù)據(jù)寫入操作,我們只看到生成了路徑,不能知道路徑下面有沒有數(shù)據(jù)生成。下面看一個有寫入操作的例子,通過這個例子,我們可以更直觀地明白volume的作用。

我們使用VS2019創(chuàng)建一個ASP.NET Core MVC項目,然后在Program的Main方法里面寫日志

using System.IO;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace VolumnDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // 寫文件,模擬寫入功能
            using(StreamWriter sw=new StreamWriter(@"/var/www/text.txt",true))
            {
                sw.WriteLine("test");
                sw.Close();
            }
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

然后添加Dockerfile文件,項目在本地發(fā)布之后拷貝到Linux服務器上面。這里不在演示。

我們創(chuàng)建一個VolumnDemo目錄

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

然后把剛才的項目拷貝到這個目錄下面

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)使用下面的命令來構(gòu)建一個鏡像

docker build -t volumndemo .

如圖所示

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

鏡像構(gòu)建成功以后運行容器,volume目錄指向MyVolumn目錄

docker run --name=volumndemo -d -p 9020:80 -v /demo/MyVolumn:/var/www volumndemo

如圖所示

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)然后我們在瀏覽器里面訪問9020端口

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

查看/demo/MyVolumn目錄里面有沒有文件生成

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

可以看到生成了text.txt文件。然后查看文件內(nèi)容

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

我們在進入容器里面查看/var/www目錄下面有沒有文件生成

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

可以看到,www目錄下面也有了text.txt文件生成。這個路徑是在隱藏目錄里面,所以要使用ls -a命令查看所有的目錄,包括隱藏目錄。

我們查看text.txt文件內(nèi)容

Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)

這樣就實現(xiàn)了容器里面的目錄和docker宿主機目錄的映射。 可以保證數(shù)據(jù)不丟失。

到此這篇關于Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持。

分享到:
標簽:Docker volume 寫入 數(shù)據(jù) 服務器
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定