docker數(shù)據(jù)管理(6)

生產(chǎn)環(huán)境中使用docker的過程中,往往需要對數(shù)據(jù)進行持久化,或者需要在多個容器之間進行數(shù)據(jù)共享菇篡,這必然涉及容器的數(shù)據(jù)管理操作。

容器中管理數(shù)據(jù)主要有兩種方式:

  • 數(shù)據(jù)卷(Data Volumes): 容器內數(shù)據(jù)直接映射到本地主機環(huán)境一喘;
  • 數(shù)據(jù)卷容器(Data Volume Containers): 使用特定容器維護數(shù)據(jù)卷驱还。

本篇文章首先介紹如何在容器內創(chuàng)建數(shù)據(jù)卷,并且把本地的目錄或文件掛載到容器內的數(shù)據(jù)卷中凸克。接下來议蟆,會介紹如何使用數(shù)據(jù)卷容器在容器和主機、容器和容器之間共享數(shù)據(jù)萎战,并實現(xiàn)數(shù)據(jù)的備份和恢復咐容。

6.1 數(shù)據(jù)卷

數(shù)據(jù)卷是一個可供容器使用的特殊目錄,它將主機操作系統(tǒng)目錄直接映射進容器撞鹉,類似Linux中的mount操作疟丙。
數(shù)據(jù)卷可以提供很多有用的特性颖侄,如下所示:

  • 數(shù)據(jù)卷可以在容器之間共享和重用鸟雏,容器之間傳遞數(shù)據(jù)將變得高效方便享郊;
  • 對數(shù)據(jù)卷內數(shù)據(jù)的修改會立馬生效,無論是容器內操作還是本地操作;
  • 對數(shù)據(jù)卷的更新不會影響鏡像孝鹊,解耦了應用和數(shù)據(jù)炊琉;
  • 卷會一直存在,知道沒有容器使用又活,可以安全的卸載它苔咪。
1.在容器內創(chuàng)建一個數(shù)據(jù)卷

在用docker run命令的時候,使用-v標記可以在容器內創(chuàng)建一個數(shù)據(jù)卷柳骄。多次重復-v標記可以創(chuàng)建多個數(shù)據(jù)卷团赏。
下面 使用webserver鏡像創(chuàng)建一個web容器,并創(chuàng)建一個數(shù)據(jù)卷掛載到容器的/webapp目錄耐薯。

[root@private_vpn ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
webserver           v0.21               e230d26d7671        2 hours ago         967.9 MB
centos6.8           0.21                7e48bfa0489e        30 hours ago        1.052 GB
[root@private_vpn ~]# docker run -itd -p 80:80  --name web -v /tmp/webapp:/webapp webserver:v0.21 /bin/bash
71cf8102d33c8e2a5ddfb69ed28bf8743ee4c1dbc27c9c6fd0a69c1d97b74d58
[root@private_vpn ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES
71cf8102d33c        webserver:v0.21     "/bin/bash"         4 seconds ago       Up 4 seconds        0.0.0.0:80->80/tcp   web
[root@private_vpn ~]# 
[root@private_vpn ~]# ls -l /tmp/webapp/
total 0
[root@private_vpn ~]# docker exec -ti 71 /bin/bash
[root@71cf8102d33c /]# ls -l /webapp
total 0
[root@71cf8102d33c /]# cat /tmp/test.txt  #容器講解那篇文章創(chuàng)建的測試文件
test

命令:docker run -itd -p 80:80 --name web -v /tmp/webapp:/webapp webserver:v0.21 /bin/bash
使用-v標記指定掛載一個本地的已有目錄到容器中去作為數(shù)據(jù)卷(推薦方式)
上面的命令加載主機的/tmp/webapp目錄到容器的/webapp目錄舔清。
注意:本地路徑必須是絕對路徑且存在,如果目錄不存在docker容器曲初,則會自動創(chuàng)建体谒。
-p: 指定端口映射,本地到docker容器臼婆。
--name: 指定容器名字
在主機/tmp/webapp目錄下創(chuàng)建文件并寫入內容:

[root@private_vpn ~]# cd /tmp/webapp/
[root@private_vpn webapp]# ls
[root@private_vpn webapp]# echo "This is a docker web test page" >> index.html
[root@private_vpn webapp]# cat index.html 
This is a docker web test page

docker容器內檢查數(shù)據(jù)是否已共享:

[root@71cf8102d33c webapp]# cat index.html 
This is a docker web test page

數(shù)據(jù)已共享抒痒,在主機和容器之間。
然后再訪問試試看(當然我的此容器內已經(jīng)安裝好了nginx服務,根據(jù)需求自己修改配置):


docker_web_test_page.jpg

已經(jīng)成功颁褂。


也可以先創(chuàng)建數(shù)據(jù)卷故响,然后在啟動容器的時候掛載數(shù)據(jù)卷

docker volume create my-vol
同樣可以通過inspect命令查看數(shù)據(jù)卷詳細信息
可以看到在/data/docker/volumes/目錄下創(chuàng)建一個數(shù)據(jù)卷my-vol(我之前修改了Docker Root Dir的目錄為/data/docker/

[root@test ~]# docker volume create my-vol
my-vol
[root@test ~]# docker volume ls
DRIVER              VOLUME NAME
local               my-vol
[root@test ~]# docker volume  inspect my-vol
[
    {
        "CreatedAt": "2020-01-08T13:39:54+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/data/docker/volumes/my-vol/_data",
        "Name": "my-vol",
        "Options": {},
        "Scope": "local"
    }
]

啟動一個掛載數(shù)據(jù)卷的容器:在用docker run命令的時候,使用--mount或者-v標記來將數(shù)據(jù)卷掛載到容器里颁独。下面創(chuàng)建一個名為本web的容器被去,并加載一個數(shù)據(jù)卷到容器的/usr/share/nginx/html目錄。
docker run -d -p 8080:80 --name web -v my-vol:/usr/share/nginx/html nginx

[root@test ~]# docker run -d -p 8080:80 --name web -v my-vol:/usr/share/nginx/html nginx
f1ae7c82566a0bdb60931a8403b4ff6f72fd09673d0e586dac3ac11c49dc22ea
[root@test ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS                  NAMES
f1ae7c82566a        nginx               "nginx -g 'daemon of…"   3 seconds ago       Up 2 seconds              0.0.0.0:8080->80/tcp   web

運行完成后奖唯,可以查看數(shù)據(jù)卷目錄下面已經(jīng)有文件了惨缆。

[root@test ~]# ls -l /data/docker/volumes/my-vol/_data/
total 8
-rw-r--r-- 1 root root 494 Nov 19 20:50 50x.html
-rw-r--r-- 1 root root 612 Nov 19 20:50 index.html

添加文件并測試訪問

[root@test ~]# cd  /data/docker/volumes/my-vol/_data/
[root@test _data]# vim 1.html
[root@test _data]# cat 1.html
my-vol haha
[root@test _data]# curl localhost:8080/1.html
my-vol haha

數(shù)據(jù)卷時被設計用來持久化數(shù)據(jù)的,它的生命周期獨立于容器丰捷,Docker不會在容器被刪除后自動刪除數(shù)據(jù)卷坯墨,并且也不存在垃圾回收這樣的機制來處理沒有任何容器引用的數(shù)據(jù)卷。如果需要在刪除容器的同時移除數(shù)據(jù)卷病往,可以在刪除容器的時候使用docker rm -v這個命令捣染。無主的數(shù)據(jù)卷可能會占據(jù)很多存儲空間,需要清理請使用docker volume prune命令停巷。

掛載權限

默認掛載的路徑權限為讀寫耍攘。如果指定為只讀可以用:ro榕栏,如:-v /tmp:/usr/tmp:ro。

– 容器目錄不可以為相對路徑

– 宿主機目錄如果不存在蕾各,則會自動生成

– 掛載宿主機已存在目錄后扒磁,在容器內對其進行操作,報“Permission denied”式曲》镣校可通過兩種方式解決:

* 1> 關閉selinux。

    臨時關閉:`# setenforce 0`
    永久關閉:修改`/etc/sysconfig/selinux`文件吝羞,將 SELINUX 的值設置為disabled兰伤。

* 2> 以特權方式啟動容器

    指定`--privileged`參數(shù),如:
    `# docker run -it --privileged=true -v /test:/soft centos /bin/bash`
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末钧排,一起剝皮案震驚了整個濱河市敦腔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恨溜,老刑警劉巖符衔,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異筒捺,居然都是意外死亡柏腻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進店門系吭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來五嫂,“玉大人,你說我怎么就攤上這事肯尺∥衷担” “怎么了?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵则吟,是天一觀的道長槐臀。 經(jīng)常有香客問我,道長氓仲,這世上最難降的妖魔是什么水慨? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮敬扛,結果婚禮上晰洒,老公的妹妹穿的比我還像新娘。我一直安慰自己啥箭,他們只是感情好谍珊,可當我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著急侥,像睡著了一般砌滞。 火紅的嫁衣襯著肌膚如雪侮邀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天贝润,我揣著相機與錄音绊茧,去河邊找鬼。 笑死题暖,一個胖子當著我的面吹牛按傅,可吹牛的內容都是我干的捉超。 我是一名探鬼主播胧卤,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拼岳!你這毒婦竟也來了枝誊?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惜纸,失蹤者是張志新(化名)和其女友劉穎叶撒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耐版,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡祠够,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了粪牲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片古瓤。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖腺阳,靈堂內的尸體忽然破棺而出落君,到底是詐尸還是另有隱情,我是刑警寧澤亭引,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布绎速,位于F島的核電站,受9級特大地震影響焙蚓,放射性物質發(fā)生泄漏纹冤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一购公、第九天 我趴在偏房一處隱蔽的房頂上張望萌京。 院中可真熱鬧,春花似錦君丁、人聲如沸枫夺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽橡庞。三九已至较坛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扒最,已是汗流浹背丑勤。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吧趣,地道東北人法竞。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像强挫,于是被迫代替她去往敵國和親岔霸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,442評論 2 359

推薦閱讀更多精彩內容

  • 五俯渤、Docker 端口映射 無論如何呆细,這些 ip 是基于本地系統(tǒng)的并且容器的端口非本地主機是訪問不到的。此外八匠,除了...
    R_X閱讀 1,754評論 0 7
  • 轉載自 http://blog.opskumu.com/docker.html 一絮爷、Docker 簡介 Docke...
    極客圈閱讀 10,505評論 0 120
  • 一,小王對于容器的困惑 小王剛開始學習Docker的時候梨树,找資料在網(wǎng)上看到最多的是Docker的好處坑夯。比如: 1、...
    架構師小秘圈閱讀 8,442評論 0 24
  • 用戶在使用docker的過程中抡四,往往需要能查看容器內應用產(chǎn)生的數(shù)據(jù)柜蜈,或者需要把容器內的數(shù)據(jù)進行備份,甚至多個容器之...
    八目朱勇銘閱讀 402評論 0 1
  • 文征明(1470——1559)初名璧床嫌,字徵明跨释。42歲以后字行,更字徵仲厌处,號衡山鳖谈,自稱衡山居士,又稱文待詔阔涉。明長洲(...
    蘇白杞閱讀 475評論 2 6