欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

DockerVolume之權(quán)限管理的示例分析

這篇文章主要介紹Docker Volume之權(quán)限管理的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)公司是一家專(zhuān)注于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)與策劃設(shè)計(jì),丁青網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:丁青等地區(qū)。丁青做網(wǎng)站價(jià)格咨詢(xún):028-86922220

Volume數(shù)據(jù)卷是Docker的一個(gè)重要概念。數(shù)據(jù)卷是可供一個(gè)或多個(gè)容器使用的特殊目錄,可以為容器應(yīng)用存儲(chǔ)提供有價(jià)值的特性:

  • 持久化數(shù)據(jù)與容器的生命周期解耦:在容器刪除之后數(shù)據(jù)卷中的內(nèi)容可以保持。Docker 1.9之后引進(jìn)的named volume(命名文件卷)可以更加方便地管理數(shù)據(jù)卷的生命周期;數(shù)據(jù)卷可以被獨(dú)立地創(chuàng)建和刪除。

  • 數(shù)據(jù)卷可以用于實(shí)現(xiàn)容器之間的數(shù)據(jù)共享

  • 可以支持不同類(lèi)型的數(shù)據(jù)存儲(chǔ)實(shí)現(xiàn)

Docker缺省提供了對(duì)宿主機(jī)本地文件卷的支持,可以將宿主機(jī)的目錄掛載到容器之中。由于沒(méi)有容器分層文件系統(tǒng)帶來(lái)的性能損失,本地文件卷非常適合一些需要高性能數(shù)據(jù)訪(fǎng)問(wèn)的場(chǎng)景,比如MySQL的數(shù)據(jù)庫(kù)文件的存儲(chǔ)。同時(shí)Docker支持通過(guò)volume plugin實(shí)現(xiàn)不同類(lèi)型的數(shù)據(jù)卷,可以更加靈活解決不同應(yīng)用負(fù)載的存儲(chǔ)需求。比如在阿里云容器服務(wù)中可以為容器提供基于云盤(pán)的塊存儲(chǔ)、基于OSSFS和NAS/NFS的共享文件存儲(chǔ)。

然而Docker數(shù)據(jù)卷的權(quán)限管理經(jīng)常是非常令人困惑的。本文將結(jié)合實(shí)例給大家介紹Docker數(shù)據(jù)卷權(quán)限管理中的常見(jiàn)問(wèn)題和解決方法。

從Jenkins掛載本地?cái)?shù)據(jù)卷錯(cuò)誤談起

最近的一個(gè)同事在利用容器運(yùn)行Jenkins時(shí)遇到一個(gè)問(wèn)題,其復(fù)現(xiàn)步驟如下:

注:如果是Windows/Mac需要登錄到Boot2docker虛擬機(jī)之上,而Linux無(wú)需如此。

docker-machine ssh default

啟動(dòng)Jenkins官方鏡像,并檢查日志

docker run -d -p 8080:8080 -p 50000:50000 --name jenkins jenkins
docker logs jenkins

我們可以發(fā)現(xiàn)"jenkins"容器日志顯示結(jié)果一切正常

然而為了持久化Jenkins配置數(shù)據(jù),當(dāng)我們把宿主機(jī)當(dāng)前目錄下的data文件夾掛載到容器中的目錄"/var/jenkins_home"的時(shí)候,問(wèn)題出現(xiàn)了:

docker rm -f jenkins
docker run -d -p 8080:8080 -p 50000:50000 -v $(pwd)/data:/var/jenkins_home --name jenkins jenkins
docker logs jenkins

錯(cuò)誤日志如下

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

這是神馬情況?

我們檢查一下之前啟動(dòng)方式的"/var/jenkins_home"目錄權(quán)限,查看Jenkins容器的當(dāng)前用戶(hù): 當(dāng)前用戶(hù)是"jenkins"而且"/var/jenkins_home"目錄是屬于jenkins用戶(hù)擁有的

docker@default:~$ docker run -ti --rm --entrypoint="/bin/bash" jenkins -c "whoami && id"
jenkins
uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)

docker@default:~$ docker run -ti --rm --entrypoint="/bin/bash" jenkins -c "ls -la /var/jenkins_home"
total 20
drwxr-xr-x 2 jenkins jenkins 4096 Jun 5 08:39 .
drwxr-xr-x 28 root  root  4096 May 24 16:43 ..
-rw-r--r-- 1 jenkins jenkins 220 Nov 12 2014 .bash_logout
-rw-r--r-- 1 jenkins jenkins 3515 Nov 12 2014 .bashrc
-rw-r--r-- 1 jenkins jenkins 675 Nov 12 2014 .profile

而當(dāng)映射本地?cái)?shù)據(jù)卷時(shí),/var/jenkins_home目錄的擁有者變成了root用戶(hù)

docker run -ti --rm -v $(pwd)/data:/var/jenkins_home --entrypoint="/bin/bash" jenkins -c "ls -la /var/jenkins_home"
total 4
drwxr-sr-x 2 root staff  40 Jun 5 08:32 .
drwxr-xr-x 28 root root 4096 May 24 16:43 ..

這就解釋了為什么當(dāng)"jenkins"用戶(hù)的進(jìn)程訪(fǎng)問(wèn)"/var/jenkins_home"目錄時(shí),會(huì)出現(xiàn) Permission denied 的問(wèn)題

我們?cè)贆z查一下宿主機(jī)上的數(shù)據(jù)卷目錄,當(dāng)前路徑下"data"目錄的擁有者是"root",這是因?yàn)檫@個(gè)目錄是Docker進(jìn)程缺省創(chuàng)建出來(lái)的。

docker@default:~$ ls -la data
total 0
drwxr-sr-x  2 root   staff      40 Jun 5 08:32 ./
drwxr-sr-x  5 docker  staff     160 Jun 5 08:32 ../

發(fā)現(xiàn)問(wèn)題之后,相應(yīng)的解決方法也很簡(jiǎn)單:把當(dāng)前目錄的擁有者賦值給uid 1000,再啟動(dòng)"jenkins"容器就一切正常了。

sudo chown -R 1000 data
docker start jenkins

這時(shí)利用瀏覽器訪(fǎng)問(wèn) "http://192.168.99.100:8080/" 就可以看到Jenkins的Web界面了。注:如無(wú)法訪(fǎng)問(wèn),可能需要通過(guò)docker-machine ip命令獲得當(dāng)前Docker宿主機(jī)的IP地址。

當(dāng)我們?cè)龠M(jìn)入容器內(nèi)部查看"/var/jenkins_home"目錄的權(quán)限,其擁有者已經(jīng)變成 "jenkins"

docker@default:~$ docker exec jenkins ls -la /var/jenkins_home
total 24
drwxr-sr-x 11 jenkins staff 340 Jun 5 09:00 .
drwxr-xr-x 28 root  root 4096 May 24 16:43 ..
drwxr-sr-x 3 jenkins staff  60 Jun 5 08:59 .java
-rw-r--r-- 1 jenkins staff 289 Jun 5 08:59 copy_reference_file.log
...

而有趣的是在宿主機(jī)上我們看到的 "data"目錄的擁有者是"docker",這是因?yàn)?quot;docker"用戶(hù)在"boot2docker"宿主機(jī)上的uid也是"1000"。

docker@default:~$ ls -la data
total 20
drwxr-sr-x  2 docker  staff      40 Jun 5 11:55 ./
drwxr-sr-x  6 docker  staff     180 Jun 5 11:55 ../
...

這時(shí)我們已經(jīng)可以知道:容器的本地?cái)?shù)據(jù)卷中文件/目錄的權(quán)限是和宿主機(jī)上一致的,只是uid/gid在Docker容器和宿主機(jī)中可能映射為不同的用戶(hù)/組名稱(chēng)。

在上文,我們使用了一個(gè)常見(jiàn)的技巧,即在宿主機(jī)上執(zhí)行chown命令時(shí)采用了uid而不是具體的用戶(hù)名,這樣就可以保證設(shè)置正確的擁有者。

問(wèn)題雖然解決了,但思考并沒(méi)有結(jié)束。因?yàn)楫?dāng)使用本地?cái)?shù)據(jù)卷時(shí),Jenkins容器會(huì)依賴(lài)宿主機(jī)目錄權(quán)限的正確性,這會(huì)給自動(dòng)化部署帶來(lái)額外的工作。有沒(méi)有方法讓Jenkins容器為數(shù)據(jù)卷自動(dòng)地設(shè)置正確的權(quán)限呢?這個(gè)問(wèn)題對(duì)很多以non-root方式運(yùn)行的應(yīng)用也都有借鑒意義。

為non-root應(yīng)用正確地掛載本地?cái)?shù)據(jù)卷

我們可以從萬(wàn)能的stackoverflow.com找到很多相關(guān)的討論,其中一個(gè)非常有借鑒意義問(wèn)答如下

http://stackoverflow.com/questions/23544282/what-is-the-best-way-to-manage-permissions-for-docker-shared-volumes

其中的基本思路有兩個(gè):

一個(gè)是利用Data Container的方法在容器間共享數(shù)據(jù)卷。這樣就規(guī)避了解決宿主機(jī)上數(shù)據(jù)卷的權(quán)限問(wèn)題。由于在1.9版本之后,Docker提供了named volume來(lái)取代純數(shù)據(jù)容器,我們還需要真正地解決這個(gè)問(wèn)題。

另外一個(gè)思路就是讓容器中以root用戶(hù)啟動(dòng),在容器啟動(dòng)腳本中利用"chown"命令來(lái)修正數(shù)據(jù)卷文件權(quán)限,之后切換到non-root用戶(hù)來(lái)執(zhí)行程序

我們來(lái)參照第二個(gè)思路來(lái)解決這個(gè)問(wèn)題

下面是一個(gè)基于Jenkins鏡像的Dockerfile:它會(huì)切換到"root"用戶(hù)并在鏡像中添加"gosu"命令,和新的入口點(diǎn)"/entrypoint.sh"

FROM jenkins:latest
USER root
RUN GOSU_SHA=5ec5d23079e94aea5f7ed92ee8a1a34bbf64c2d4053dadf383992908a2f9dc8a \
 && curl -sSL -o /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.9/gosu-$(dpkg --print-architecture)" \
 && chmod +x /usr/local/bin/gosu \
 && echo "$GOSU_SHA /usr/local/bin/gosu" | sha256sum -c - 
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

注釋?zhuān)篻osu 是經(jīng)常出現(xiàn)在官方Docker鏡像中的一個(gè)小工具。它是"su"和"sudo"命令的輕量級(jí)替代品,并解決了它們?cè)趖ty和信號(hào)傳遞中的一些問(wèn)題。

新入口點(diǎn)的"entrypoint.sh"的內(nèi)容如下:它會(huì)為"JENKINS_HOME"目錄設(shè)置"jenkins"的擁有權(quán)限,并且再利用"gosu"命令切換到"jenkins"用戶(hù)來(lái)執(zhí)行"jenkins"應(yīng)用。

#! /bin/bash
set -e
chown -R 1000 "$JENKINS_HOME"
exec gosu jenkins /bin/tini -- /usr/local/bin/jenkins.sh

您可以直接從 https://github.com/denverdino/docker-jenkins 獲得相關(guān)代碼,并構(gòu)建自己的Jenkins鏡像。執(zhí)行命令如下:

git clone https://github.com/AliyunContainerService/docker-jenkins
cd docker-jenkins/jenkins
docker build -t denverdino/jenkins .

然后基于新鏡像啟動(dòng)Jenkins容器

docker rm -f jenkins
docker run -d -p 8080:8080 -p 50000:50000 -v $(pwd)/data:/var/jenkins_home --name jenkins denverdino/jenkins

以上是“Docker Volume之權(quán)限管理的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享名稱(chēng):DockerVolume之權(quán)限管理的示例分析
網(wǎng)頁(yè)地址:http://aaarwkj.com/article30/peicpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站面包屑導(dǎo)航、Google、定制開(kāi)發(fā)網(wǎng)站內(nèi)鏈、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
91黑丝国产在线播放| 日本少妇人妻一区二区| 人体蜜桃视频一区二区| 丰满人妻被猛烈进入中文版| 2004年亚洲中文字幕| 国产熟女系列一区二区三区| 国产精品青青草原在线| 国产成人综合亚洲不卡| 亚洲国产自拍偷拍视频| 亚洲av正片一区二区三区| 亚洲欧美日韩专区一区| 日韩欧美亚洲国产每日更新| 免费日本高清色噜噜视频| 国产91精品激烈高潮白浆| 91在线视频麻豆国产| 81精品国产综合久久精品伦理 | 欧美黄片在线免费观看视频| 91精品人妻一区二区三区| 蜜臀国产午夜在线视频| 亚洲一区日韩精品电影| 免费在线观看性生活视频| 成人国产av一区二区三区| 亚洲天堂av现在观看| 色哟哟网站一区二区精品久久| 美味人妻手机在线观看| 亚洲免费成人一区二区| 婷婷国产成人精品一区二| 国产国语网站在线观看| 日本东京热二三四区不卡免费的| 2022国产精品一区| 色人阁在线精品免费视频| 91九色视频免费观看| 国产一级内射视频免费观看| 欧美在线观看日韩精品| 久久久久久精品国产免费 | 亚洲av乱码一区二区三| 国产精品大白屁股视频| 日韩在线视频观看一区二区三区| 国产性做爰片免费视频| 午夜黄色福利在线观看| 欧美日韩国产这里只有精品|