Docker學習06 容器資料卷

2022-09-19 13:21:13 字數 3770 閱讀 9899

又來到了乙個新的概念,每次到乙個新的概念,就要問自己

是什麼?有什麼用?怎麼用?能幹嘛?解決了什麼痛點?有什麼優勢?

先說乙個坑

docker掛載主機目錄訪問如果出現cannot open directory:permission denied,解決方法就是在掛載目錄後多加一條命令:

--privileged=true
如果是centos7安全模組會比之前系統版本加強,不安全的會先禁止,所以目錄掛載的情況被預設為不安全的行為,在selinux裡面掛載目錄被禁止掉了,如果要開啟,我們一般使用--privileged=true命令,擴大容器的許可權解決掛載目錄沒有許可權的問題,也即使用該引數,containerroot擁有真正的root許可權,否則,container中的root只是外部的乙個普通使用者許可權。

怎麼加?加在哪兒?

到了一家新的公司,老員工給你一條命令,你不懂就不做了?先跟著走,再去考慮是什麼等。

記得這個命令吧。現在解釋一下

docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry

#docker run -d 後台守護程序啟動

#-p 5000:5000 通過宿主機的5000訪問docker服務的5000 埠對映

#-v /zzyyuse/myregistry/:/tmp/registry -v自定義資料卷 宿主機路徑:docker內路徑

#--privileged=true 放開許可權

#registry 自建立的私有庫

概念:卷就是目錄或檔案,存在於乙個或者多個容器中,由docker掛載到容器,但不屬於聯合檔案系統,因此能夠繞過union file system提供一些用於持久儲存或共享資料的特性;卷的設計目的就是資料的持久化,完全獨立於容器的生存週期,因此docker不會在容器刪除時,刪除其掛載的資料卷。

說白了,就是docker容器裡面開了個外接網盤用於儲存檔案。將docker容器內的資料儲存進宿主機的磁碟中。

docker備份資料:通過容器資料卷的方式,完成資料的持久化以及重要資料backup。當然資料卷的功能,包含但不限於這個功能。

將應用與執行的環境打包映象,run後形成容器例項執行,但是我們對資料的要求希望是永續性的

docker容器產生的資料,如果不備份,那麼當容器例項刪除後,容器內的資料自然也就沒有了。

為了能儲存資料在docker中我們使用卷。相當於redis的主從複製的那個備份機器。

1、資料卷可在容器之間共享或重用資料

2、卷中的更改可以直接實時生效,爽

3、資料卷中的更改不會包含在映象的更新中

4、資料卷的生命週期一直持續到沒有容器使用它為止

之前我們學過複製、匯出和匯入容器這些功能,但是沒有資料卷這麼強大,資料卷就是乙個備份實時率非常高的機制。

可以看出輸入下方命令後,實現了雙方的互通,我寫你讀,你寫我讀都可以。

docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu

#/tmp/host_data和/tmp/docker_data這兩個檔案本身是不存在的,只要輸入這條命令,就成功建立

#-v, v即volumes的意思

docker inspect 容器id
這個命令相當於乙個x光片,將這個容器的所有屬性項全部以json串的形式輸出出來。

那麼在這裡就能看到,這裡掛載的路徑等資訊。

到了後面學習,可以多個-v引數進行掛載。目前先寫乙個玩玩。

假設我建立好了資料卷目錄,當docker容器停了,我在主機上新建目錄,docker容器裡面會有同步的檔案嗎?答案是有的!

1、docker修改、主機同步獲得

2、主機修改、docker同步獲得

3、docker容器stop,主機修改,docker容器重啟看資料是否同步

之前我們學到的,雙方修改,雙方同時獲得資料,其實是docker自身預設的設定,也就是下方這個命令。

docker run -it --privileged=true -v 主機目錄:docker容器目錄 映象名稱 /bin/bash
其實上方的命令是這麼寫的,rw即可讀可寫的意思。

docker run -it --privileged=true -v 主機目錄:docker容器目錄:rw 映象名稱 /bin/bash
有時候我們限制容器內部唯讀不可寫,說白了就是它限制的是,我們進入容器終端,不可touc**件。但是不影響主機寫入檔案,所以就是這麼進行編寫:

docker run -it --privileged=true -v /mydocker/u:/tmp:ro ubuntu /bin/bash

#ro代表read only

再次強調,是容器內部唯讀不可寫。

1、容器1完成和宿主機的對映

docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data:rw --name=u1 ubuntu /bin/bash
2、容器2繼承容器1的卷規則
docker run -it --privileged=true --volumes-from 父類 --name=u2 ubuntu
3、重點思考

假設容器2建立了、繼承了容器1卷的繼承與共享,這時候將容器1關閉掉,容器2會怎麼樣呢?答案是容器2還是會儲存原來的繼承關係,和容器1一樣,這個繼承是獨立存在的。

Docker 資料卷 資料卷容器

一,概念解析 1,資料卷 資料卷就是在宿主中可以在容器之間進行共享和重用的一系列和檔案和資料夾,通過docker run v命令可以將資料卷掛載到對應的容器目錄空間,進行檔案讀取,容器卷特性如下 資料卷可以在容器之間共享和重用,容器間傳遞資料將變得高效方便 對資料卷內資料的修改會立馬生效,無論是容器...

docker學習(11)資料卷容器

我們現在想實現多個容器資料同步,比如多個mysql資料同步,掛載了的容器被稱為父容器。現在我們先把容器1起一下,用我們上個文章建立的wang centos root wangstudy data docker run it name docker1 wang centos root 5cd8cba5...

docker學習(七) 容器資料卷

docker的理念回顧 將應用和環境打包成乙個映象 資料?如果資料在容器中,那麼我們的容器刪除,資料就會丟失!需求 資料持久化!mysql,容器刪了,刪庫跑路!需求 mysql資料可以儲存本地 容器之間可以有乙個資料共享的技術,docker容器中產生的資料同步到本地!這就是卷技術,目錄的掛在,將我們...