docker系列教程之docker安裝

2021-10-09 12:54:19 字數 4157 閱讀 2759

2023年發布至今, docker 一直廣受矚目,被認為可能會改變軟體行業。

一、環境配置的難題

軟體開發最大的麻煩事之一,就是環境配置。使用者計算機的環境都不相同,你怎麼知道自家的軟體,能在那些機器跑起來?

使用者必須保證兩件事:作業系統的設定,各種庫和元件的安裝。只有它們都正確,軟體才能執行。舉例來說,安裝乙個 python 應用,計算機必須有 python 引擎,還必須有各種依賴,可能還要配置環境變數。

如果某些老舊的模組與當前環境不相容,那就麻煩了。開發者常常會說:「它在我的機器可以跑了」(it works on my machine),言下之意就是,其他機器很可能跑不了。

環境配置如此麻煩,換一台機器,就要重來一次,曠日費時。很多人想到,能不能從根本上解決問題,軟體可以帶環境安裝?也就是說,安裝的時候,把原始環境一模一樣地複製過來。

二、虛擬機器

虛擬機器(virtual machine)就是帶環境安裝的一種解決方案。它可以在一種作業系統裡面執行另一種作業系統,比如在 windows 系統裡面執行 linux 系統。應用程式對此毫無感知,因為虛擬機器看上去跟真實系統一模一樣,而對於底層系統來說,虛擬機器就是乙個普通檔案,不需要了就刪掉,對其他部分毫無影響。

雖然使用者可以通過虛擬機器還原軟體的原始環境。但是,這個方案有幾個缺點。

(1)資源占用多

虛擬機會獨佔一部分記憶體和硬碟空間。它執行的時候,其他程式就不能使用這些資源了。哪怕虛擬機器裡面的應用程式,真正使用的記憶體只有 1mb,虛擬機器依然需要幾百 mb 的記憶體才能執行。

(2)冗餘步驟多

虛擬機器是完整的作業系統,一些系統級別的操作步驟,往往無法跳過,比如使用者登入。

(3)啟動慢

啟動作業系統需要多久,啟動虛擬機器就需要多久。可能要等幾分鐘,應用程式才能真正執行。

三、linux 容器

由於虛擬機器存在這些缺點,linux 發展出了另一種虛擬化技術:linux 容器(linux containers,縮寫為 lxc)。

linux 容器不是模擬乙個完整的作業系統,而是對程序進行隔離。或者說,在正常程序的外面套了乙個保護層。對於容器裡面的程序來說,它接觸到的各種資源都是虛擬的,從而實現與底層系統的隔離。

由於容器是程序級別的,相比虛擬機器有很多優勢。

(1)啟動快

容器裡面的應用,直接就是底層系統的乙個程序,而不是虛擬機器內部的程序。所以,啟動容器相當於啟動本機的乙個程序,而不是啟動乙個作業系統,速度就快很多。

(2)資源占用少

容器只占用需要的資源,不占用那些沒有用到的資源;虛擬機器由於是完整的作業系統,不可避免要占用所有資源。另外,多個容器可以共享資源,虛擬機器都是獨享資源。

(3)體積小

容器只要包含用到的元件即可,而虛擬機器是整個作業系統的打包,所以容器檔案比虛擬機器檔案要小很多。

總之,容器有點像輕量級的虛擬機器,能夠提供虛擬化的環境,但是成本開銷小得多。

四、docker 是什麼?

docker 屬於 linux 容器的一種封裝,提供簡單易用的容器使用介面。它是目前最流行的 linux 容器解決方案。

docker 將應用程式與該程式的依賴,打包在乙個檔案裡面。執行這個檔案,就會生成乙個虛擬容器。程式在這個虛擬容器裡執行,就好像在真實的物理機上執行一樣。有了 docker,就不用擔心環境問題。

總體來說,docker 的介面相當簡單,使用者可以方便地建立和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的**一樣。

五、docker 的用途

docker 的主要用途,目前有三大類。

(1)提供一次性的環境。比如,本地測試他人的軟體、持續整合的時候提供單元測試和構建的環境。

(2)提供彈性的雲服務。因為 docker 容器可以隨開隨關,很適合動態擴容和縮容。

(3)組建微服務架構。通過多個容器,一台機器可以跑多個服務,因此在本機就可以模擬出微服務架構。

六、docker 安裝

docker 是乙個開源的商業產品,有兩個版本:社群版(community edition,縮寫為 ce)和企業版(enterprise edition,縮寫為 ee)。企業版包含了一些收費服務,個人開發者一般用不到。下面的介紹都針對社群版。

以centos docker 安裝為例,其他系統安裝方式請參考官網:

較舊的 docker 版本稱為 docker 或 docker-engine 。如果已安裝這些程式,請解除安裝它們以及相關的依賴項

$ sudo yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-engine

設定倉庫
$ sudo yum install -y yum-utils \

lvm2

設定映象倉庫

國外的映象倉庫比較慢,我使用阿里雲映象

$ sudo yum-config-manager \

--add-repo \

安裝docker

這個命令是安裝最新版本的docker

$ sudo yum install docker-ce docker-ce-cli containerd.io

docker 安裝完預設未啟動。並且已經建立好 docker 使用者組,但該使用者組下沒有使用者

docker 需要使用者具有 sudo 許可權,為了避免每次命令都輸入sudo,可以把使用者加入 docker 使用者組

$ sudo

usermod -ag docker $user

要安裝特定版本的 docker engine-community,請在儲存庫中列出可用版本,然後選擇並安裝

$ yum list docker-ce --showduplicates |

sort -r

docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable

docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable

docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable

docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable

通過其完整的軟體包名稱安裝特定版本,該軟體包名稱是軟體包名稱(docker-ce)加上版本字串(第二列),從第乙個冒號(:)一直到第乙個連字元,並用連字元(-)分隔。例如:docker-ce-18.09.1。

$ sudo yum install docker-ce- docker-ce-cli- containerd.io

執行下面命令檢視是否安裝成功

$ docker version

啟動docker

$ sudo systemctl start docker
docker 輸出hello world來建立乙個容器,檢視是否可用

[root@localhost admin]

# docker run ubuntu:15.10 /bin/echo "hello world"

hello world

各個引數解析:

docker: docker 的二進位制執行檔案。

run: 與前面的 docker 組合來執行乙個容器。

/bin/echo 「hello world」: 在啟動的容器裡執行的命令

以上命令完整的意思可以解釋為:docker 以 ubuntu15.10 映象建立乙個新容器,然後在容器裡執行 bin/echo 「hello world」,然後輸出結果。

docker系列教程之容器互聯

一 docker互聯場景 docker搭建開發環境用的非常多,通常開發機器上既有容器形式的應用,又有本機跑著或者除錯的程式,它們之間互相依賴,如何讓它們之間通訊順暢,有時候是乙個挺困難的事情。容器應用和容器外應用互相訪問分為三種情況 1 容器內應用和容器內應用 2 容器內應用訪問容器外應用 3 容器...

Docker 教程之Docker Hub詳細介紹

docker hub 倉庫 repository 是集中存放映象的地方。乙個容易混淆的概念是註冊伺服器 registry 實際上註冊伺服器是管理倉庫的具體伺服器,每個伺服器上可以有多個倉庫,而每個倉庫下面有多個映象。從這方面來說,倉庫可以被認為是乙個具體的專案或目錄。例如對於倉庫位址 dl.dock...

docker 系列 Dock高階知識點文章匯集

書籍 docker 從入門到精通 這可能是最為詳細的docker入門 總結 麥子學院的教程 將 springboot 打包進 docker spring 官方的教程 docker 部署 springboot 專案整合 redis 映象做訪問計數demo docker 容器使用者管理 預設情況下,容器...