1、Docker是什么?為什么會出現Docker
假定您在開發一個購物商城,您使用的是一臺筆記本電腦而且您的開發環境具有特定的配置。其他開發人員身處的環境配置也各有不同。您正在開發的應用依賴于您當前的配置且還要依賴于某些配置文件。
此外,您的企業還擁有標準化的測試和生產環境,且具有自身的配置和一系列支持文件。您希望盡可能多在本地模擬這些環境而不產生重新創建服務器環境的開銷。
請問?您要如何確保應用能夠在這些環境中運行和通過質量檢測?并且在部署過程中不出現令人頭疼的版本、配置問題,也無需重新編寫代碼和進行故障修復? 答案就是使用容器。
Docker之所以發展如此迅速,也是因為它對此給出了一個標準化的解決方案-----系統平滑移植,容器虛擬化技術。 環境配置相當麻煩,換一臺機器,就要重來一次,費力費時。很多人想到,能不能從根本上解決問題,軟件可以帶環境安裝?也就是說,安裝的時候,把原始環境一模一樣地復制過來。
開發人員利用 Docker 可以消除協作編碼時“在我的機器上可正常工作”的問題。 之前在服務器配置一個應用的運行環境,要安裝各種軟件,就拿尚硅谷電商項目的環境來說,JAVA/RabbitMQ/MySQL/JDBC驅動包等。安裝和配置這些東西有多麻煩就不說了,它還不能跨平臺。
假如我們是在 windows 上安裝的這些環境,到了 linux 又得重新裝。況且就算不跨操作系統,換另一臺同樣操作系統的服務器,要移植應用也是非常麻煩的。傳統上認為,軟件編碼開發/測試結束后,所產出的成果即是程序或是能夠編譯執行的二進制字節碼等(java為例)。而為了讓這些程序可以順利執行,開發團隊也得準備完整的部署文件,讓維運團隊得以部署應用程式,開發需要清楚的告訴運維部署團隊,用的全部配置文件+所有軟件環境。不過,即便如此,仍然常常發生部署失敗的狀況。Docker的出現使得Docker得以打破過去「程序即應用」的觀念。透過鏡像(images)將作業系統核心除外,運作應用程式所需要的系統環境,由下而上打包,達到應用程式跨平臺間的無縫接軌運作。
簡單一句話:解決了運行環境和配置問題的軟件容器,方便做持續集成并有助于整體發布的容器虛擬化技術。
2、Docker能干什么
- 更快速的應用交付和部署
- 更便捷的升級和擴縮容
- 更簡單的系統運維
- 更高效的計算資源利用
3、Docker官網
- 官網:Docker: Accelerated, ContAInerized Application Development
- 倉庫:Docker Hub
4、Docker基本組成
- 鏡像(image)
Docker 鏡像(Image)就是一個只讀的模板。鏡像可以用來創建 Docker 容器,一個鏡像可以創建很多容器。它也相當于是一個root文件系統。比如官方鏡像 centos:7 就包含了完整的一套 centos:7 最小系統的 root 文件系統。相當于容器的“源代碼”,docker鏡像文件類似于Java的類模板,而docker容器實例類似于java中new出來的實例對象。
- 容器(container)
從面向對象角度Docker 利用容器(Container)獨立運行的一個或一組應用,應用程序或服務運行在容器里面,容器就類似于一個虛擬化的運行環境,容器是用鏡像創建的運行實例。就像是Java中的類和實例對象一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器為鏡像提供了一個標準的和隔離的運行環境,它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺 2 從鏡像容器角度可以把容器看做是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。
- 倉庫(repository)
倉庫(Repository)是集中存放鏡像文件的場所。 類似于Maven倉庫,存放各種jar包的地方;Github倉庫,存放各種git項目的地方;Docker公司提供的官方registry被稱為Docker Hub,存放各種鏡像模板的地方。 倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是 Docker Hub(https://hub.docker.com/),存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括阿里云 、網易云等。
5、RHEL7安裝Docker
5.1、官網安裝教程地址
Install Docker Engine on CentOS | Docker Documentation
5.2、這里我的宿主機是RHEL ,所以我們選擇RHEL 安裝教程 首先看對系統的要求(OS requirements)
#官網英文
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.
#官網英文翻譯
操作系統要求
要安裝 Docker Engine,您需要在 s390x (IBM Z) 上安裝 RHEL 7、RHEL 8 或 RHEL 9 的維護版本。不支持或測試存檔版本。
通過命令 “cat /etc/redhat-release” 確定自己宿主機的版本,這里我的宿主機版本是7.4滿足要求
[root@crmsqlts ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.4 (Maipo)
[root@crmsqlts ~]#
5.3、卸載舊版本
#官網英文
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.
#官網英文翻譯
卸載舊版本
舊版本的 Docker 被稱為docker或docker-engine。如果安裝了這些,請卸載它們以及相關的依賴項。如果已經安裝,還卸載 Podman相關的依賴項。
卸載命令
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
podman
runc
5.4、設置存儲庫命令
官網要求的,這個是個大坑,安裝Docker Engine 時會超時等一系列問題
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.5、安裝Docker Engine 命令
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
注意:在安裝Docker Engine 可能會報錯 404 則是yum 源的問題 建議更換阿里的
執行完命令看到這個結果說明,安裝成功
5.6、Docker啟動
systemctl start docker
5.7、Docker 版本 可以看到Docker想想版本信息
docker version
5.7、Hello World 官方提供
docker run hello-world
5.8、卸載
# 關閉 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