Docker 簡(jiǎn)介與安裝,十分鐘入門(mén)指南
1、Docker是什么?為什么會(huì)出現(xiàn)Docker
假定您在開(kāi)發(fā)一個(gè)購(gòu)物商城,您使用的是一臺(tái)筆記本電腦而且您的開(kāi)發(fā)環(huán)境具有特定的配置。其他開(kāi)發(fā)人員身處的環(huán)境配置也各有不同。您正在開(kāi)發(fā)的應(yīng)用依賴(lài)于您當(dāng)前的配置且還要依賴(lài)于某些配置文件。
此外,您的企業(yè)還擁有標(biāo)準(zhǔn)化的測(cè)試和生產(chǎn)環(huán)境,且具有自身的配置和一系列支持文件。您希望盡可能多在本地模擬這些環(huán)境而不產(chǎn)生重新創(chuàng)建服務(wù)器環(huán)境的開(kāi)銷(xiāo)。
請(qǐng)問(wèn)?您要如何確保應(yīng)用能夠在這些環(huán)境中運(yùn)行和通過(guò)質(zhì)量檢測(cè)?并且在部署過(guò)程中不出現(xiàn)令人頭疼的版本、配置問(wèn)題,也無(wú)需重新編寫(xiě)代碼和進(jìn)行故障修復(fù)? 答案就是使用容器。
Docker之所以發(fā)展如此迅速,也是因?yàn)樗鼘?duì)此給出了一個(gè)標(biāo)準(zhǔn)化的解決方案-----系統(tǒng)平滑移植,容器虛擬化技術(shù)。 環(huán)境配置相當(dāng)麻煩,換一臺(tái)機(jī)器,就要重來(lái)一次,費(fèi)力費(fèi)時(shí)。很多人想到,能不能從根本上解決問(wèn)題,軟件可以帶環(huán)境安裝?也就是說(shuō),安裝的時(shí)候,把原始環(huán)境一模一樣地復(fù)制過(guò)來(lái)。
開(kāi)發(fā)人員利用 Docker 可以消除協(xié)作編碼時(shí)“在我的機(jī)器上可正常工作”的問(wèn)題。 之前在服務(wù)器配置一個(gè)應(yīng)用的運(yùn)行環(huán)境,要安裝各種軟件,就拿尚硅谷電商項(xiàng)目的環(huán)境來(lái)說(shuō),Java/RabbitMQ/MySQL/JDBC驅(qū)動(dòng)包等。安裝和配置這些東西有多麻煩就不說(shuō)了,它還不能跨平臺(tái)。
假如我們是在 Windows 上安裝的這些環(huán)境,到了 Linux 又得重新裝。況且就算不跨操作系統(tǒng),換另一臺(tái)同樣操作系統(tǒng)的服務(wù)器,要移植應(yīng)用也是非常麻煩的。傳統(tǒng)上認(rèn)為,軟件編碼開(kāi)發(fā)/測(cè)試結(jié)束后,所產(chǎn)出的成果即是程序或是能夠編譯執(zhí)行的二進(jìn)制字節(jié)碼等(java為例)。而為了讓這些程序可以順利執(zhí)行,開(kāi)發(fā)團(tuán)隊(duì)也得準(zhǔn)備完整的部署文件,讓維運(yùn)團(tuán)隊(duì)得以部署應(yīng)用程式,開(kāi)發(fā)需要清楚的告訴運(yùn)維部署團(tuán)隊(duì),用的全部配置文件+所有軟件環(huán)境。不過(guò),即便如此,仍然常常發(fā)生部署失敗的狀況。Docker的出現(xiàn)使得Docker得以打破過(guò)去「程序即應(yīng)用」的觀念。透過(guò)鏡像(images)將作業(yè)系統(tǒng)核心除外,運(yùn)作應(yīng)用程式所需要的系統(tǒng)環(huán)境,由下而上打包,達(dá)到應(yīng)用程式跨平臺(tái)間的無(wú)縫接軌運(yùn)作。
簡(jiǎn)單一句話(huà):解決了運(yùn)行環(huán)境和配置問(wèn)題的軟件容器,方便做持續(xù)集成并有助于整體發(fā)布的容器虛擬化技術(shù)。
2、Docker能干什么
- 更快速的應(yīng)用交付和部署
- 更便捷的升級(jí)和擴(kuò)縮容
- 更簡(jiǎn)單的系統(tǒng)運(yùn)維
- 更高效的計(jì)算資源利用
3、Docker官網(wǎng)
- 官網(wǎng):Docker: Accelerated, Containerized Application Development
- 倉(cāng)庫(kù):Docker Hub
4、Docker基本組成
- 鏡像(image)
Docker 鏡像(Image)就是一個(gè)只讀的模板。鏡像可以用來(lái)創(chuàng)建 Docker 容器,一個(gè)鏡像可以創(chuàng)建很多容器。它也相當(dāng)于是一個(gè)root文件系統(tǒng)。比如官方鏡像 centos:7 就包含了完整的一套 centos:7 最小系統(tǒng)的 root 文件系統(tǒng)。相當(dāng)于容器的“源代碼”,docker鏡像文件類(lèi)似于Java的類(lèi)模板,而docker容器實(shí)例類(lèi)似于java中new出來(lái)的實(shí)例對(duì)象。
- 容器(container)
從面向?qū)ο蠼嵌菵ocker 利用容器(Container)獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用,應(yīng)用程序或服務(wù)運(yùn)行在容器里面,容器就類(lèi)似于一個(gè)虛擬化的運(yùn)行環(huán)境,容器是用鏡像創(chuàng)建的運(yùn)行實(shí)例。就像是Java中的類(lèi)和實(shí)例對(duì)象一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器為鏡像提供了一個(gè)標(biāo)準(zhǔn)的和隔離的運(yùn)行環(huán)境,它可以被啟動(dòng)、開(kāi)始、停止、刪除。每個(gè)容器都是相互隔離的、保證安全的平臺(tái) 2 從鏡像容器角度可以把容器看做是一個(gè)簡(jiǎn)易版的 Linux 環(huán)境(包括root用戶(hù)權(quán)限、進(jìn)程空間、用戶(hù)空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。
- 倉(cāng)庫(kù)(repository)
倉(cāng)庫(kù)(Repository)是集中存放鏡像文件的場(chǎng)所。 類(lèi)似于Maven倉(cāng)庫(kù),存放各種jar包的地方;github倉(cāng)庫(kù),存放各種git項(xiàng)目的地方;Docker公司提供的官方registry被稱(chēng)為Docker Hub,存放各種鏡像模板的地方。 倉(cāng)庫(kù)分為公開(kāi)倉(cāng)庫(kù)(Public)和私有倉(cāng)庫(kù)(Private)兩種形式。最大的公開(kāi)倉(cāng)庫(kù)是 Docker Hub(https://hub.docker.com/),存放了數(shù)量龐大的鏡像供用戶(hù)下載。國(guó)內(nèi)的公開(kāi)倉(cāng)庫(kù)包括阿里云 、網(wǎng)易云等。
5、RHEL7安裝Docker
(1)官網(wǎng)安裝教程地址
Install Docker Engine on CentOS | Docker Documentation。
(2)這里我的宿主機(jī)是RHEL ,所以我們選擇RHEL 安裝教程 首先看對(duì)系統(tǒng)的要求(OS requirements)
#官網(wǎng)英文
OS requirements
To install Docker Engine, you need a maintained version of RHEL 7, RHEL 8 or RHEL 9 on s390x (IBM Z). Archived versions aren’t supported or tested.
#官網(wǎng)英文翻譯
操作系統(tǒng)要求
要安裝 Docker Engine,您需要在 s390x (IBM Z) 上安裝 RHEL 7、RHEL 8 或 RHEL 9 的維護(hù)版本。不支持或測(cè)試存檔版本。
通過(guò)命令 “cat /etc/redhat-release” 確定自己宿主機(jī)的版本,這里我的宿主機(jī)版本是7.4滿(mǎn)足要求。
[root@crmsqlts ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.4 (Maipo)
[root@crmsqlts ~]#
(3)卸載舊版本
#官網(wǎng)英文
Uninstall old versions
Older versions of Docker were called docker or docker-engine. If these are installed, uninstall them, along with associated dependencies. Also uninstall Podman and the associated dependencies if installed already.
#官網(wǎng)英文翻譯
卸載舊版本
舊版本的 Docker 被稱(chēng)為docker或docker-engine。如果安裝了這些,請(qǐng)卸載它們以及相關(guān)的依賴(lài)項(xiàng)。如果已經(jīng)安裝,還卸載 Podman相關(guān)的依賴(lài)項(xiàng)。
卸載命令
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
podman \
runc
(4)設(shè)置存儲(chǔ)庫(kù)命令
官網(wǎng)要求的,這個(gè)是個(gè)大坑,安裝Docker Engine 時(shí)會(huì)超時(shí)等一系列問(wèn)題。
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/rhel/docker-ce.repo
推薦:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(5)安裝Docker Engine 命令
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
注意:在安裝Docker Engine 可能會(huì)報(bào)錯(cuò) 404 則是yum 源的問(wèn)題 建議更換阿里的。
執(zhí)行完命令看到這個(gè)結(jié)果說(shuō)明,安裝成功。
(6)Docker啟動(dòng)
systemctl start docker
(7)Docker 版本 可以看到Docker想想版本信息
docker version
(8)Hello World 官方提供
docker run hello-world
(9)卸載
# 關(guān)閉 docker
systemctl stop docker
# 卸載
yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 刪除遺留
rm -rf /var/lib/docker
rm -rf /var/lib/containerd