Docker_0_初識與安裝

introduction

docker是幾年前出來的一個(gè)容器技術(shù)猴誊,我也是在2017年才接觸到這個(gè)東西,一開始用來部署tomcat和mysql服務(wù)装诡,后來做項(xiàng)目和做算法也沒有研究這個(gè)東西≈就海現(xiàn)在由于要在本地搭建深度學(xué)習(xí)服務(wù)器,所以又把docker溫故知新一下倔矾。
本文提到以下內(nèi)容:

  • 是什么
  • 優(yōu)點(diǎn)
  • 大致的原理
  • centos安裝

理論內(nèi)容主要(大篇幅)參考以下兩篇文章,已經(jīng)注明出處了蛉幸,所以為了排版方便后面就不加引用符號了破讨。而且加入了自己的一點(diǎn)內(nèi)容。
不過實(shí)際操作還是一把辛酸淚T…T奕纫,各種踩坑
docker就是集裝箱原理:這是大佬的知乎回答提陶,可以去點(diǎn)個(gè)贊啊。
大白話Docker入門

是什么匹层?集裝箱

如果現(xiàn)在有一批水果和化學(xué)用品要運(yùn)送隙笆。我們沒有集裝箱,為了安全起見升筏,只能用一艘船運(yùn)水果撑柔,一艘船運(yùn)化學(xué)用品。動(dòng)力能源就會被拿來維持多個(gè)船體本身航行的需求您访。
但是如果有集裝箱铅忿,就可以把水果和化學(xué)用品分別裝箱,規(guī)整的擺放起來灵汪。集裝箱和集裝箱之間不會互相影響檀训,就不需要專門運(yùn)送水果的船和專門運(yùn)送化學(xué)品的船了柑潦。只要這些貨物在集裝箱里封裝的好好的,那就可以用一艘大船把它們都運(yùn)走峻凫。
虛擬機(jī)是船渗鬼,docker就是集裝箱。

  1. 不同的應(yīng)用程序可能會有不同的應(yīng)用環(huán)境荧琼,比如.net開發(fā)的網(wǎng)站和php開發(fā)的網(wǎng)站依賴的軟件就不一樣譬胎,如果把他們依賴的軟件都安裝在一個(gè)服務(wù)器上就要調(diào)試很久,而且很麻煩命锄,還會造成一些沖突堰乔。比如IIS和Apache訪問端口沖突。這個(gè)時(shí)候你就要隔離.net開發(fā)的網(wǎng)站和php開發(fā)的網(wǎng)站脐恩。常規(guī)來講浩考,我們可以在服務(wù)器上創(chuàng)建不同的虛擬機(jī)在不同的虛擬機(jī)上放置不同的應(yīng)用,但是虛擬機(jī)開銷比較高被盈。docker可以實(shí)現(xiàn)虛擬機(jī)隔離應(yīng)用環(huán)境的功能,并且開銷比虛擬機(jī)小搭伤,小就意味著省錢了只怎。
  2. 你開發(fā)軟件的時(shí)候用的是Ubuntu,但是運(yùn)維管理的都是centos怜俐,運(yùn)維在把你的軟件從開發(fā)環(huán)境轉(zhuǎn)移到生產(chǎn)環(huán)境的時(shí)候就會遇到一些Ubuntu轉(zhuǎn)centos的問題身堡,比如:有個(gè)特殊版本的數(shù)據(jù)庫,只有Ubuntu支持拍鲤,centos不支持贴谎,在轉(zhuǎn)移的過程當(dāng)中運(yùn)維就得想辦法解決這樣的問題。這時(shí)候要是有docker你就可以把開發(fā)環(huán)境直接封裝轉(zhuǎn)移給運(yùn)維季稳,運(yùn)維直接部署你給他的docker就可以了擅这。而且部署速度快。
  3. 在服務(wù)器負(fù)載方面景鼠,如果你單獨(dú)開一個(gè)虛擬機(jī)仲翎,那么虛擬機(jī)會占用空閑內(nèi)存的,docker部署的話铛漓,這些內(nèi)存就會利用起來溯香。

優(yōu)點(diǎn)

  1. docker image的體積非常的小。一個(gè)完整功能的ubuntu才100多mb浓恶。docker image如此小的體積玫坛,讓我們可以方便的在網(wǎng)絡(luò)上傳輸和分享,對于公司來說就提供了對大量image的管理和分發(fā)的可能包晰。
  2. docker的系統(tǒng)啟動(dòng)的耗時(shí)為0湿镀。docker run hello-world的命令是瞬間完成的炕吸,感覺不到加載image,啟動(dòng)系統(tǒng)的耗時(shí)肠骆,命令完成就直接輸出了結(jié)果算途。程序執(zhí)行完后container也跟著關(guān)閉,也并沒有保存鏡像的時(shí)間蚀腿,但下次再運(yùn)行還是會保留你處理過的狀態(tài)嘴瓤。
    在后面tensorflow使用,這個(gè)感覺是尤為突出莉钙。在windows上廓脆,拿pycharm運(yùn)行,從按下ctrl+shift+f10到真正開始運(yùn)行的時(shí)間磁玉,可能和docker run tensorflow的時(shí)間是差不多的停忿。
  3. docker系統(tǒng)占用資源極少。如果我們開啟一個(gè)vm的系統(tǒng)蚊伞,不論是linux的或者windows席赂,就算什么程序都不運(yùn)行都會占用一部分內(nèi)存。但是docker container啟動(dòng)后如果不運(yùn)行程序时迫,你是看不到系統(tǒng)資源被占用的颅停。
server vm container對比

如何做到的

  • 先思考一下,一臺服務(wù)器給我們開發(fā)的項(xiàng)目提供了什么掠拳?
    cpu癞揉、內(nèi)存、硬盤溺欧、網(wǎng)絡(luò)喊熟、操作系統(tǒng)、工具軟件、運(yùn)行環(huán)境 等。擁有了這些資源座哩,就可以運(yùn)行一個(gè)程序。
  • VM技術(shù)可以在一臺server上部署多臺虛擬機(jī)胳泉,提高了物力資源的重用性和設(shè)備管理的方便性。
    那么VM是怎么做到的呢岩遗?Hypervisor扇商。VM在物理機(jī)器的操作系統(tǒng)上建立了一個(gè)中間軟件層Hypervisor,Hypervisor利用物理機(jī)器的資源宿礁,虛擬出多個(gè)虛擬的硬件環(huán)境案铺,這些硬件環(huán)境可以共享宿主機(jī)的資源。這些新的虛擬硬件環(huán)境梆靖,安裝操作系統(tǒng)和相應(yīng)的軟件后便形成了一臺臺虛擬機(jī)控汉。
  • 那么Docker有什么不同呢笔诵?Docker很聰明的利用linux的一些技術(shù)走了一條捷徑。Docker選擇了和虛擬化完全不同的思路姑子,并不去虛擬化任何硬件乎婿,而是對硬件資源在不同的docker container之間做了“隔離”。隔離使每個(gè)container擁有了不同的環(huán)境(硬盤空間街佑、網(wǎng)絡(luò)谢翎、系統(tǒng)的工具包),并且又可以共享需要的硬件資源(cpu沐旨、內(nèi)存森逮、系統(tǒng)內(nèi)核),表面上達(dá)到了虛擬機(jī)的功能磁携。
    VM container對比

    Docker使用的Linux核心的組建如下:(截取自Docker的元件– Linux核心部分)
  • AUFS(chroot) – 用來建立不同的操作系統(tǒng)和隔離運(yùn)行時(shí)的硬盤空間
  • Namespace – 用來隔離Container的執(zhí)行空間
  • Cgroup – 分配不同的硬件資源
  • SELinux – 用來保護(hù)linux的網(wǎng)絡(luò)安全
  • Netlink – 用來讓不同的Container之間的進(jìn)程保持通信
  • Netfilter – 建立Container埠為基礎(chǔ)的網(wǎng)路防火牆封包過濾
  • AppArmor – 保護(hù)Container的網(wǎng)路及執(zhí)行安全
  • Linux Bridge – 讓不同Container或不同主機(jī)上的Container能溝通
  • ……

這里面的每一項(xiàng)技術(shù)都值得我們?nèi)ド钊胙芯堪唷5侨说木κ怯邢薜模芏嗲闆r下只能關(guān)心到目前最需要用的那些東西谊迄。所以原理性的問題就不贅述了闷供。

centos下安裝docker-ce

這一部分參考了網(wǎng)上的諸多資料(包括官方教程、網(wǎng)友博客统诺,由于數(shù)量確實(shí)很多这吻,實(shí)際操作的問題也很雜亂,所以無法擺出全部的參考文獻(xiàn))篙议,主要還是參考官方教程吧。
https://docs.docker-cn.com/
https://docs.docker.com/
http://www.docker.org.cn/book/
大大小小遇到了一些坑怠硼。這里就把我成功的安裝的流程擺出來鬼贱,供大家參考。
我這里主要是為了拿docker搭建python3的TensorFlow深度學(xué)習(xí)平臺香璃。雖然后期使用不一樣这难,但是前期安裝都是差不多的。
為什么是centos葡秒?因?yàn)檠bnvidia驅(qū)動(dòng)的時(shí)候踩了更多的坑姻乓。可能是一些系統(tǒng)版本眯牧、網(wǎng)絡(luò)蹋岩、本人操作太蠢 等各方面問題,在用ubuntu系統(tǒng)裝的時(shí)候学少,nvidia+cuda+cudnn的一套系統(tǒng)總是裝不上剪个,所以對ubuntu失去信心。T T
下面關(guān)于安裝的命令版确,直接復(fù)制運(yùn)行就可以了扣囊。

  1. 刪除老版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-ce \
                  docker-engine
  1. 查看內(nèi)核版本(需要大于3.10)
uname -r
  1. 設(shè)置倉庫
sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager --enable docker-ce-edge
sudo yum-config-manager --enable docker-ce-test
  1. 正式安裝部分乎折。這里要注意了。

如果你使用docker不涉及到nvidia or gpu or deep learning侵歇,就直接執(zhí)行以下命令安裝最新版本骂澄。

sudo yum -y install docker-ce

由于docker是在nvidia驅(qū)動(dòng)之上運(yùn)行,即docker-nvidia是依賴了nvdia驅(qū)動(dòng)本身惕虑,所以對其版本有一定的要求坟冲。
假如你之前安裝的nvidia和之后安裝的docker需要的版本不同,在運(yùn)行TensorFlow-gpu的時(shí)候就會報(bào)錯(cuò)枷遂。
指定版本安裝:

# 查看版本
yum list docker-ce --showduplicates | sort –r
# 安裝指定版本 sudo yum -y install docker-ce-17.12.0.ce
sudo yum -y install docker-ce-18.09.5-3.el7
  1. 如果安裝成功
    啟動(dòng)docker服務(wù):sudo service docker start
    測試是否能用:sudo docker run hello-world
    能輸出下圖就成功安裝了樱衷。如果是沒成功pull鏡像,就參考其他中的鏡像源配置酒唉。

    docker成功安裝

  2. 卸載
    卸載 Docker 軟件包:sudo yum remove docker-ce
    主機(jī)上的鏡像矩桂、容器、存儲卷痪伦、或定制配置文件不會自動(dòng)刪除侄榴。如需刪除所有鏡像、容器和存儲卷网沾,請運(yùn)行下列命令:sudo rm -rf /var/lib/docker
    必須手動(dòng)刪除任何已編輯的配置文件癞蚕。

其他

  1. 鏡像源配置
  • 初始狀態(tài)下,docker的鏡像包都是從外國的服務(wù)器拉辉哥,所以速度慢的令人發(fā)指桦山。和大多數(shù)linux上的加速下載玩法一樣,docker也可以配置鏡像源醋旦。直接一步操作恒水。
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s mirror_address
  • 執(zhí)行了之后,你會發(fā)現(xiàn)饲齐,上面的命令是不會正確運(yùn)行的钉凌。即使運(yùn)行了,也沒有成功配置鏡像源捂人。
    上面的mirror_address要改成你自己的鏡像源地址御雕。那么問題來了,你哪里有鏡像源滥搭?兩個(gè)地方有:daocloud and 阿里云
    daocloud中酸纲,注冊,登錄瑟匆,點(diǎn)開個(gè)人面板福青,右上角有個(gè)小火箭,點(diǎn)開,新打開的頁面往下拉无午,下面就有你的地址了媒役。

    image.png

    阿里云中,注冊宪迟,登錄酣衷,點(diǎn)開個(gè)人面板,左上角搜索次泽,“容器鏡像服務(wù)”(隨時(shí)間可能這個(gè)內(nèi)容會變穿仪,但是搜 容器 鏡像等字眼應(yīng)該可以搜出來。)點(diǎn)出來之后意荤,右邊主面板就有你的地址了啊片。
    image.png

  • 正常的鏡像源配置到這里就結(jié)束了。但是玖像。紫谷。。
    如果linux的curl用不了or無法聯(lián)網(wǎng)捐寥,上面的命令是沒法運(yùn)行的笤昨。采取以下辦法。
    先在windows上握恳,下載剛剛的sh文件
    然后用scp傳去linux上瞒窒,給這個(gè)文件加運(yùn)行權(quán)限,然后使用如下命令運(yùn)行乡洼。
    sudo ./set_mirror.sh –s mirror_address

其實(shí)也可以手動(dòng)改崇裁,vi /etc/docker/daemon.json改成下面這個(gè),以上以下所有mirror_address都是私人的地址束昵,都要替換成自己的拔稳。
{"registry-mirrors": ["mirror_address"]}

還有另一個(gè)docker網(wǎng)絡(luò)的配置文件是這個(gè)vi /etc/sysconfig/docker,一般不需要?jiǎng)印?/p>

  • 配置完了之后要重啟
systemctl daemon-reload
systemctl restart docker

再重新試一下拉取鏡像妻怎,能成功拉取就代表配置成功。不然就把別的鏡像地址也試一下泞歉,或者把daocloud和阿里云都試試逼侦,選快的那個(gè)。

這里總是會有一些其他的坑的腰耙,如果遇到一些本地鏡像搭建榛丢、docker代理配置的問題。推薦用搜索引擎查下面的這幾個(gè)命令挺庞,會有相關(guān)的內(nèi)容出來晰赞。

systemctl show --property=Environment docker
mkdir /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/http-proxy.conf
  1. 調(diào)整用戶權(quán)限,使得不用每次都加sudo運(yùn)行docker命令
    創(chuàng)建docker用戶組sudo groupadd docker
    添加用戶至docker組sudo usermod -aG docker $USER
    更新用戶組newgrp docker
    重啟docker,注銷用戶掖鱼,重登用戶然走。看能否直接運(yùn)行docker run hello-world
  2. 設(shè)置開機(jī)啟動(dòng) sudo systemctl enable docker
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末戏挡,一起剝皮案震驚了整個(gè)濱河市芍瑞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌褐墅,老刑警劉巖拆檬,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妥凳,居然都是意外死亡竟贯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門逝钥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屑那,“玉大人,你說我怎么就攤上這事晌缘∑肓” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵磷箕,是天一觀的道長选酗。 經(jīng)常有香客問我,道長岳枷,這世上最難降的妖魔是什么芒填? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮空繁,結(jié)果婚禮上殿衰,老公的妹妹穿的比我還像新娘。我一直安慰自己盛泡,他們只是感情好闷祥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著傲诵,像睡著了一般凯砍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拴竹,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天悟衩,我揣著相機(jī)與錄音,去河邊找鬼栓拜。 笑死座泳,一個(gè)胖子當(dāng)著我的面吹牛惠昔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挑势,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼镇防,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了薛耻?” 一聲冷哼從身側(cè)響起营罢,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饼齿,沒想到半個(gè)月后饲漾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缕溉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年考传,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片证鸥。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡僚楞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枉层,到底是詐尸還是另有隱情泉褐,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布鸟蜡,位于F島的核電站膜赃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏揉忘。R本人自食惡果不足惜跳座,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泣矛。 院中可真熱鬧疲眷,春花似錦、人聲如沸您朽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哗总。三九已至几颜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間魂奥,已是汗流浹背菠剩。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工易猫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耻煤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像哈蝇,于是被迫代替她去往敵國和親棺妓。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容