大多數(shù)的Python程序員使用的都是virtualenv,但當(dāng)項(xiàng)目要求你快速上線或者部署多臺(tái)服務(wù)器環(huán)境的時(shí)候就需要將服務(wù)器一臺(tái)一臺(tái)的yum install、vim、restart…而docker就可以幫助你快速的粘貼過(guò)去。
我的云服務(wù)器是Linux centOS(版本大于等于7.0)
1.刪除可能存在的舊版本
停止Docker服務(wù)器:systemctl stop docker
查看當(dāng)前版本:rpm -qa |grep docker
卸載軟件包:
sudo yum remove docker docker-client docker-client-latest docker-common docker-
latest docker-latest-logrotate docker-logrotate docker-engine
刪除相關(guān)配置文件
2. 新版本安裝
軟件包安裝:yum install -y yum-utils device-mapper-persistent-data lvm2
添加Docker源:yum-config-manager \ --add-repo \ https://download.docker.com/lin
查看可安裝的版本:yum list docker-ce --showduplicates |sort -r
安裝最新版本:
yum makecache fast
yum install docker-ce -y
啟動(dòng)并開(kāi)機(jī)自啟:
systemctl start docker
systemctl enable docker
查看版本:docker version
二、基本概念
鏡像
操作系統(tǒng)分為內(nèi)核和用戶空間。對(duì)于Linux而言,內(nèi)核啟動(dòng)后,會(huì)掛載root文件系統(tǒng)為其提供用戶空間支持。而Docker鏡像(Image),就相當(dāng)于是一個(gè)root文件系統(tǒng)。
Docker鏡像是一個(gè)特殊的文件系統(tǒng),除了提供容器運(yùn)行時(shí)所需的程序、庫(kù)、資源、配置等文件外,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。 鏡像不包含任何動(dòng)態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會(huì)被改變。
分層存儲(chǔ) 鏡像只是一個(gè)虛擬的概念,其實(shí)際體現(xiàn)并非由一個(gè)文件組成,而是由一組文件系統(tǒng)組成,或者說(shuō),由多層文件系統(tǒng)聯(lián)合組成。
Docker設(shè)計(jì)時(shí),就充分利用Union FS的技術(shù),將其設(shè)計(jì)為分層存儲(chǔ)的架構(gòu)。 鏡像實(shí)際是由多層文件系統(tǒng)聯(lián)合組成。
Union FS
聯(lián)合文件系統(tǒng)是(Union FS)是linux的存儲(chǔ)技術(shù),也是Docker鏡像的存儲(chǔ)方式。 它是分層的文件系統(tǒng),將不同目錄拉到同一個(gè)虛擬目錄下。下圖展示了Docker用Union FS 搭建的分層鏡像:(比如最下層是操作系統(tǒng)的引導(dǎo),上一層是Linux操作系統(tǒng),再上一層是Tomcat,jdk,再上一層是應(yīng)用代碼)這些層是只讀的,加載完后這些文件會(huì)被看成是同一個(gè)目錄,相當(dāng)于只有一個(gè)文件系統(tǒng)。
鏡像構(gòu)建時(shí),會(huì)一層層構(gòu)建,前一層是后一層的基礎(chǔ)。每一層構(gòu)建完就不會(huì)再發(fā)生改變,后一層上的任何改變只發(fā)生在自己這一層。比如,刪除前一層文件的操作,實(shí)際不是真的刪除前一層的文件,而是僅在當(dāng)前層標(biāo)記為該文件已刪除。在最終容器運(yùn)行的時(shí)候,雖然不會(huì)看到這個(gè)文件,但是實(shí)際上該文件會(huì)一直跟隨鏡像。因此,在構(gòu)建鏡像的時(shí)候,需要額外小心,每一層盡量只包含該層需要添加的東西,任何額外的東西應(yīng)該在該層構(gòu)建結(jié)束前清理掉。
容器(Container)——鏡像運(yùn)行時(shí)的實(shí)體
鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計(jì)中的類(lèi)和實(shí)例一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟動(dòng)、停止、刪除、暫停等 。
容器的實(shí)質(zhì)是進(jìn)程,但與直接在宿主執(zhí)行的進(jìn)程不同,容器進(jìn)程運(yùn)行于屬于自己的獨(dú)立的命名空間。前面講過(guò)鏡像使用的是分層存儲(chǔ),容器也是如此。
容器存儲(chǔ)層的生存周期和容器一樣,容器消亡時(shí),容器存儲(chǔ)層也隨之消亡。因此,任何保存于容器存儲(chǔ)層的信息都會(huì)隨容器刪除而丟失。
倉(cāng)庫(kù)(Repository)——集中存放鏡像文件的地方
鏡像構(gòu)建完成后,可以很容易的在當(dāng)前宿主上運(yùn)行,但是, 如果需要在其它服務(wù)器上使用這個(gè)鏡像,我們就需要一個(gè)集中的存儲(chǔ)、分發(fā)鏡像的服務(wù),Docker Registry就是這樣的服務(wù)。
一個(gè)Docker Registry中可以包含多個(gè)倉(cāng)庫(kù)(Repository);每個(gè)倉(cāng)庫(kù)可以包含多個(gè)標(biāo)簽(Tag);每個(gè)標(biāo)簽對(duì)應(yīng)一個(gè)鏡像。所以說(shuō):鏡像倉(cāng)庫(kù)是Docker用來(lái)集中存放鏡像文件的地方類(lèi)似于我們之前常用的代碼倉(cāng)庫(kù)。
通常,一個(gè)倉(cāng)庫(kù)會(huì)包含同一個(gè)軟件不同版本的鏡像,而標(biāo)簽就常用于對(duì)應(yīng)該軟件的各個(gè)版本 。我們可以通過(guò)<倉(cāng)庫(kù)名>:<標(biāo)簽>的格式來(lái)指定具體是這個(gè)軟件哪個(gè)版本的鏡像。如果不給出標(biāo)簽,將以latest作為默認(rèn)標(biāo)簽。(以 Ubuntu 鏡像為例,ubuntu是倉(cāng)庫(kù)的名字,其內(nèi)包含有不同的版本標(biāo)簽,如,14.04,16.04。我們可以通過(guò)ubuntu:14.04,或者ubuntu:16.04來(lái)具體指定所需哪個(gè)版本的鏡像。如果忽略了標(biāo)簽,比如ubuntu,那將視為ubuntu:latest。)
Docker Registry公開(kāi)服務(wù)和私有Docker Registry的概念:
Docker Registry公開(kāi)服務(wù)是開(kāi)放給用戶使用、允許用戶管理鏡像的Registry服務(wù)。一般這類(lèi)公開(kāi)服務(wù)允許用戶免費(fèi)上傳、下載公開(kāi)的鏡像,并可能提供收費(fèi)服務(wù)供用戶管理私有鏡像。
最后如果你對(duì)Python培訓(xùn)課程感興趣的話,不妨來(lái)千鋒Python培訓(xùn)班了解一下我們的Python培訓(xùn)課程,更有免費(fèi)的Python學(xué)習(xí)資料可以領(lǐng)取,趕緊來(lái)咨詢一下吧。