'10分鐘快速掌握Docker必備基礎知識'

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

10分鐘快速掌握Docker必備基礎知識

物理服務器部署應用示意圖

那麼,這種方式有什麼問題呢?其實,在物理機上部署應用有以下幾個缺點:

  • 部署非常慢:因為我們得先準備硬件服務器,接著還要安裝操作系統,然後再部署應用程序,而且應用程序還有很多的依賴軟件,所以這個過程是比較慢的。
  • 成本非常高:主要是物理器成本太高,即使是部署一個簡單的應用,也需要一臺服務器。
  • 資源浪費:如果應用太簡單,也容易浪費硬件資源,比如CPU和內存
  • 遷移和擴展太慢:如果需要遷移應用,或者擴展應用,都要再準備其他的物理服務器,過程很麻煩,也很慢。

那麼有什麼辦法可以解決這些問題呢?答案便是虛擬化技術。

使用虛擬機部署應用程序的年代

什麼是虛擬化技術

談到計算機的虛擬化技術,我們直接想到的便是虛擬機,虛擬機允許我們在一臺物理計算機模擬出多臺機器,簡單地理解,虛擬化技術就是在一臺物理計算機上,通過中間虛擬軟件層Hypervisor隔離CPU、內存等硬件資源,虛擬出多臺虛擬服務器,這樣做的話,一臺物理服務器便可以安裝多個應用程序,達到資源利用的最大化,而且多個應用之間相互隔離,如下圖所示:

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

10分鐘快速掌握Docker必備基礎知識

物理服務器部署應用示意圖

那麼,這種方式有什麼問題呢?其實,在物理機上部署應用有以下幾個缺點:

  • 部署非常慢:因為我們得先準備硬件服務器,接著還要安裝操作系統,然後再部署應用程序,而且應用程序還有很多的依賴軟件,所以這個過程是比較慢的。
  • 成本非常高:主要是物理器成本太高,即使是部署一個簡單的應用,也需要一臺服務器。
  • 資源浪費:如果應用太簡單,也容易浪費硬件資源,比如CPU和內存
  • 遷移和擴展太慢:如果需要遷移應用,或者擴展應用,都要再準備其他的物理服務器,過程很麻煩,也很慢。

那麼有什麼辦法可以解決這些問題呢?答案便是虛擬化技術。

使用虛擬機部署應用程序的年代

什麼是虛擬化技術

談到計算機的虛擬化技術,我們直接想到的便是虛擬機,虛擬機允許我們在一臺物理計算機模擬出多臺機器,簡單地理解,虛擬化技術就是在一臺物理計算機上,通過中間虛擬軟件層Hypervisor隔離CPU、內存等硬件資源,虛擬出多臺虛擬服務器,這樣做的話,一臺物理服務器便可以安裝多個應用程序,達到資源利用的最大化,而且多個應用之間相互隔離,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

虛擬機上部署應用示意圖

虛擬機的優點

  • 可以把資源分配到不同的虛擬機,達到硬件資源的最大化利用
  • 與直接在物理機上部署應用,虛擬機更容易擴展應用。
  • 雲服務:通過虛擬機虛擬出不同的物理資源,可以快速搭建雲服務。

虛擬機的不足之處

虛擬機的不足之處在於對物理服務器資源的消耗,當我們在物理服務器創建一臺虛擬機時,便需要虛擬出一套硬件並在上面運行完整的操作系統,每臺虛擬機都佔用許多的服務器資源。

Docker是什麼?

相對於虛擬機的笨重,Docker則更顯得輕量化,因此不會佔用太多的系統資源。

Docker是使用時下很火的Golang語言進行開發的,其技術核心是Linux內核的Cgroup,Namespace和AUFS類的Union FS等技術,這些技術都是Linux內核中早已存在很多年的技術,所以嚴格來說Docker並不是一個完全創新的技術,Docker通過這些底層的Linux技術,對Linux進程進行封裝隔離,而被隔離的進程也被稱為容器,完全獨立於宿主機的進程。

所以Docker是容器技術的一種實現,也是操作系統層面的一種虛擬化,與虛擬機通過一套硬件再安裝操作系統完全不同。

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

10分鐘快速掌握Docker必備基礎知識

物理服務器部署應用示意圖

那麼,這種方式有什麼問題呢?其實,在物理機上部署應用有以下幾個缺點:

  • 部署非常慢:因為我們得先準備硬件服務器,接著還要安裝操作系統,然後再部署應用程序,而且應用程序還有很多的依賴軟件,所以這個過程是比較慢的。
  • 成本非常高:主要是物理器成本太高,即使是部署一個簡單的應用,也需要一臺服務器。
  • 資源浪費:如果應用太簡單,也容易浪費硬件資源,比如CPU和內存
  • 遷移和擴展太慢:如果需要遷移應用,或者擴展應用,都要再準備其他的物理服務器,過程很麻煩,也很慢。

那麼有什麼辦法可以解決這些問題呢?答案便是虛擬化技術。

使用虛擬機部署應用程序的年代

什麼是虛擬化技術

談到計算機的虛擬化技術,我們直接想到的便是虛擬機,虛擬機允許我們在一臺物理計算機模擬出多臺機器,簡單地理解,虛擬化技術就是在一臺物理計算機上,通過中間虛擬軟件層Hypervisor隔離CPU、內存等硬件資源,虛擬出多臺虛擬服務器,這樣做的話,一臺物理服務器便可以安裝多個應用程序,達到資源利用的最大化,而且多個應用之間相互隔離,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

虛擬機上部署應用示意圖

虛擬機的優點

  • 可以把資源分配到不同的虛擬機,達到硬件資源的最大化利用
  • 與直接在物理機上部署應用,虛擬機更容易擴展應用。
  • 雲服務:通過虛擬機虛擬出不同的物理資源,可以快速搭建雲服務。

虛擬機的不足之處

虛擬機的不足之處在於對物理服務器資源的消耗,當我們在物理服務器創建一臺虛擬機時,便需要虛擬出一套硬件並在上面運行完整的操作系統,每臺虛擬機都佔用許多的服務器資源。

Docker是什麼?

相對於虛擬機的笨重,Docker則更顯得輕量化,因此不會佔用太多的系統資源。

Docker是使用時下很火的Golang語言進行開發的,其技術核心是Linux內核的Cgroup,Namespace和AUFS類的Union FS等技術,這些技術都是Linux內核中早已存在很多年的技術,所以嚴格來說Docker並不是一個完全創新的技術,Docker通過這些底層的Linux技術,對Linux進程進行封裝隔離,而被隔離的進程也被稱為容器,完全獨立於宿主機的進程。

所以Docker是容器技術的一種實現,也是操作系統層面的一種虛擬化,與虛擬機通過一套硬件再安裝操作系統完全不同。

10分鐘快速掌握Docker必備基礎知識

docker容器與系統關係示意圖

Docker與虛擬機之間的比較

Docker是在操作系統進程層面的隔離,而虛擬機是在物理資源層面的隔離,兩者完全不同,另外,我們也可以通過下面的一個比較,瞭解兩者的根本性差異。

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

10分鐘快速掌握Docker必備基礎知識

物理服務器部署應用示意圖

那麼,這種方式有什麼問題呢?其實,在物理機上部署應用有以下幾個缺點:

  • 部署非常慢:因為我們得先準備硬件服務器,接著還要安裝操作系統,然後再部署應用程序,而且應用程序還有很多的依賴軟件,所以這個過程是比較慢的。
  • 成本非常高:主要是物理器成本太高,即使是部署一個簡單的應用,也需要一臺服務器。
  • 資源浪費:如果應用太簡單,也容易浪費硬件資源,比如CPU和內存
  • 遷移和擴展太慢:如果需要遷移應用,或者擴展應用,都要再準備其他的物理服務器,過程很麻煩,也很慢。

那麼有什麼辦法可以解決這些問題呢?答案便是虛擬化技術。

使用虛擬機部署應用程序的年代

什麼是虛擬化技術

談到計算機的虛擬化技術,我們直接想到的便是虛擬機,虛擬機允許我們在一臺物理計算機模擬出多臺機器,簡單地理解,虛擬化技術就是在一臺物理計算機上,通過中間虛擬軟件層Hypervisor隔離CPU、內存等硬件資源,虛擬出多臺虛擬服務器,這樣做的話,一臺物理服務器便可以安裝多個應用程序,達到資源利用的最大化,而且多個應用之間相互隔離,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

虛擬機上部署應用示意圖

虛擬機的優點

  • 可以把資源分配到不同的虛擬機,達到硬件資源的最大化利用
  • 與直接在物理機上部署應用,虛擬機更容易擴展應用。
  • 雲服務:通過虛擬機虛擬出不同的物理資源,可以快速搭建雲服務。

虛擬機的不足之處

虛擬機的不足之處在於對物理服務器資源的消耗,當我們在物理服務器創建一臺虛擬機時,便需要虛擬出一套硬件並在上面運行完整的操作系統,每臺虛擬機都佔用許多的服務器資源。

Docker是什麼?

相對於虛擬機的笨重,Docker則更顯得輕量化,因此不會佔用太多的系統資源。

Docker是使用時下很火的Golang語言進行開發的,其技術核心是Linux內核的Cgroup,Namespace和AUFS類的Union FS等技術,這些技術都是Linux內核中早已存在很多年的技術,所以嚴格來說Docker並不是一個完全創新的技術,Docker通過這些底層的Linux技術,對Linux進程進行封裝隔離,而被隔離的進程也被稱為容器,完全獨立於宿主機的進程。

所以Docker是容器技術的一種實現,也是操作系統層面的一種虛擬化,與虛擬機通過一套硬件再安裝操作系統完全不同。

10分鐘快速掌握Docker必備基礎知識

docker容器與系統關係示意圖

Docker與虛擬機之間的比較

Docker是在操作系統進程層面的隔離,而虛擬機是在物理資源層面的隔離,兩者完全不同,另外,我們也可以通過下面的一個比較,瞭解兩者的根本性差異。

10分鐘快速掌握Docker必備基礎知識

容器與虛擬機的比較【摘自《Docker-從入門到實踐》】

從上面的容器與虛擬機的對比中,我們明白了容器技術的優勢。

容器解決了開發與生產環境的問題

開發環境與生產環境折射的是開發人員與運維人員之間的矛盾,也許我們常常會聽到開發人員對運維人員說的這樣一句話:“在我的電腦運行沒問題,怎麼到了你那裡就出問題了,肯定是你的問題”,而運維人員則認為是開發人員的問題。

開發人員需要在本機安裝各種各樣的測試環境,因此開發的項目需要軟件越多,依賴越多,安裝的環境也就越複雜。

同樣的,運維人員需要為開發人員開發的項目提供生產環境,而運維人員除了應對軟件之間的依賴,還需要考慮安裝軟件與硬件之間的兼容性問題。

就是這樣,所以我們經常看到開發與運維相互甩鍋,怎麼解決這個問題呢?

容器就是一個不錯的解決方案,容器能成為開發與運維之間溝通的語言,因為容器就像一個集裝箱一樣,提供了軟件運行的最小化環境,將應用與其需要的環境一起打包成為鏡像,便可以在開發與運維之間溝通與傳輸。

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

10分鐘快速掌握Docker必備基礎知識

物理服務器部署應用示意圖

那麼,這種方式有什麼問題呢?其實,在物理機上部署應用有以下幾個缺點:

  • 部署非常慢:因為我們得先準備硬件服務器,接著還要安裝操作系統,然後再部署應用程序,而且應用程序還有很多的依賴軟件,所以這個過程是比較慢的。
  • 成本非常高:主要是物理器成本太高,即使是部署一個簡單的應用,也需要一臺服務器。
  • 資源浪費:如果應用太簡單,也容易浪費硬件資源,比如CPU和內存
  • 遷移和擴展太慢:如果需要遷移應用,或者擴展應用,都要再準備其他的物理服務器,過程很麻煩,也很慢。

那麼有什麼辦法可以解決這些問題呢?答案便是虛擬化技術。

使用虛擬機部署應用程序的年代

什麼是虛擬化技術

談到計算機的虛擬化技術,我們直接想到的便是虛擬機,虛擬機允許我們在一臺物理計算機模擬出多臺機器,簡單地理解,虛擬化技術就是在一臺物理計算機上,通過中間虛擬軟件層Hypervisor隔離CPU、內存等硬件資源,虛擬出多臺虛擬服務器,這樣做的話,一臺物理服務器便可以安裝多個應用程序,達到資源利用的最大化,而且多個應用之間相互隔離,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

虛擬機上部署應用示意圖

虛擬機的優點

  • 可以把資源分配到不同的虛擬機,達到硬件資源的最大化利用
  • 與直接在物理機上部署應用,虛擬機更容易擴展應用。
  • 雲服務:通過虛擬機虛擬出不同的物理資源,可以快速搭建雲服務。

虛擬機的不足之處

虛擬機的不足之處在於對物理服務器資源的消耗,當我們在物理服務器創建一臺虛擬機時,便需要虛擬出一套硬件並在上面運行完整的操作系統,每臺虛擬機都佔用許多的服務器資源。

Docker是什麼?

相對於虛擬機的笨重,Docker則更顯得輕量化,因此不會佔用太多的系統資源。

Docker是使用時下很火的Golang語言進行開發的,其技術核心是Linux內核的Cgroup,Namespace和AUFS類的Union FS等技術,這些技術都是Linux內核中早已存在很多年的技術,所以嚴格來說Docker並不是一個完全創新的技術,Docker通過這些底層的Linux技術,對Linux進程進行封裝隔離,而被隔離的進程也被稱為容器,完全獨立於宿主機的進程。

所以Docker是容器技術的一種實現,也是操作系統層面的一種虛擬化,與虛擬機通過一套硬件再安裝操作系統完全不同。

10分鐘快速掌握Docker必備基礎知識

docker容器與系統關係示意圖

Docker與虛擬機之間的比較

Docker是在操作系統進程層面的隔離,而虛擬機是在物理資源層面的隔離,兩者完全不同,另外,我們也可以通過下面的一個比較,瞭解兩者的根本性差異。

10分鐘快速掌握Docker必備基礎知識

容器與虛擬機的比較【摘自《Docker-從入門到實踐》】

從上面的容器與虛擬機的對比中,我們明白了容器技術的優勢。

容器解決了開發與生產環境的問題

開發環境與生產環境折射的是開發人員與運維人員之間的矛盾,也許我們常常會聽到開發人員對運維人員說的這樣一句話:“在我的電腦運行沒問題,怎麼到了你那裡就出問題了,肯定是你的問題”,而運維人員則認為是開發人員的問題。

開發人員需要在本機安裝各種各樣的測試環境,因此開發的項目需要軟件越多,依賴越多,安裝的環境也就越複雜。

同樣的,運維人員需要為開發人員開發的項目提供生產環境,而運維人員除了應對軟件之間的依賴,還需要考慮安裝軟件與硬件之間的兼容性問題。

就是這樣,所以我們經常看到開發與運維相互甩鍋,怎麼解決這個問題呢?

容器就是一個不錯的解決方案,容器能成為開發與運維之間溝通的語言,因為容器就像一個集裝箱一樣,提供了軟件運行的最小化環境,將應用與其需要的環境一起打包成為鏡像,便可以在開發與運維之間溝通與傳輸。

10分鐘快速掌握Docker必備基礎知識

Docker的版本

Docker分為社區版(CE)和企業版(EE)兩個版本,社區版本可以免費使用,而企業版則需要付費使用,對於我們個人開發者或小企業來說,一般是使用社區版的。

Docker CE有三個更新頻道,分別為stable、test、nightly,stable是穩定版本,test是測試後的預發佈版本,而nightly則是開發中準備在下一個版本正式發佈的版本,我們可以根據自己的需求下載安裝。

如何安裝Docker?

好了,通過前面的介紹,我們應該對Docker有了初步的瞭解,下面開始進入Docker的學習之旅了。

而學習Docker的第一步,從安裝Docker運行環境開始,我們以Docker的社區版本(CE)安裝為例。

Docker社區版本提供了Mac OS,Microsoft Windows和Linux(Centos,Ubuntu,Fedora,Debian)等操作系統的安裝包,同時也支持在雲服務器上的安裝,比如AWS Cloud。

在Windows系統上安裝

Docker Desktop for Windows

Docker為Windows提供了一個桌面應用程序管理的安裝包(Docker Desktop for Windows),不過對系統有以下幾點要求:

  1. 必須是64位Windows10專業版,企業版,教育版,構建在15063或更高版本,
  2. 在BIOS中啟用虛擬化。通常,默認情況下啟用虛擬化。
  3. 至少有4GB內存。
  4. CPU支持SLAT。

如果操作系統滿足上面的要求,則可以直接下載安裝包直接安裝,在安裝成功後,Docker並不會自動啟動,需要我們自己啟動,我們可以在開始菜單中找到Docker,如下圖,單擊啟動便可啟動。

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

10分鐘快速掌握Docker必備基礎知識

物理服務器部署應用示意圖

那麼,這種方式有什麼問題呢?其實,在物理機上部署應用有以下幾個缺點:

  • 部署非常慢:因為我們得先準備硬件服務器,接著還要安裝操作系統,然後再部署應用程序,而且應用程序還有很多的依賴軟件,所以這個過程是比較慢的。
  • 成本非常高:主要是物理器成本太高,即使是部署一個簡單的應用,也需要一臺服務器。
  • 資源浪費:如果應用太簡單,也容易浪費硬件資源,比如CPU和內存
  • 遷移和擴展太慢:如果需要遷移應用,或者擴展應用,都要再準備其他的物理服務器,過程很麻煩,也很慢。

那麼有什麼辦法可以解決這些問題呢?答案便是虛擬化技術。

使用虛擬機部署應用程序的年代

什麼是虛擬化技術

談到計算機的虛擬化技術,我們直接想到的便是虛擬機,虛擬機允許我們在一臺物理計算機模擬出多臺機器,簡單地理解,虛擬化技術就是在一臺物理計算機上,通過中間虛擬軟件層Hypervisor隔離CPU、內存等硬件資源,虛擬出多臺虛擬服務器,這樣做的話,一臺物理服務器便可以安裝多個應用程序,達到資源利用的最大化,而且多個應用之間相互隔離,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

虛擬機上部署應用示意圖

虛擬機的優點

  • 可以把資源分配到不同的虛擬機,達到硬件資源的最大化利用
  • 與直接在物理機上部署應用,虛擬機更容易擴展應用。
  • 雲服務:通過虛擬機虛擬出不同的物理資源,可以快速搭建雲服務。

虛擬機的不足之處

虛擬機的不足之處在於對物理服務器資源的消耗,當我們在物理服務器創建一臺虛擬機時,便需要虛擬出一套硬件並在上面運行完整的操作系統,每臺虛擬機都佔用許多的服務器資源。

Docker是什麼?

相對於虛擬機的笨重,Docker則更顯得輕量化,因此不會佔用太多的系統資源。

Docker是使用時下很火的Golang語言進行開發的,其技術核心是Linux內核的Cgroup,Namespace和AUFS類的Union FS等技術,這些技術都是Linux內核中早已存在很多年的技術,所以嚴格來說Docker並不是一個完全創新的技術,Docker通過這些底層的Linux技術,對Linux進程進行封裝隔離,而被隔離的進程也被稱為容器,完全獨立於宿主機的進程。

所以Docker是容器技術的一種實現,也是操作系統層面的一種虛擬化,與虛擬機通過一套硬件再安裝操作系統完全不同。

10分鐘快速掌握Docker必備基礎知識

docker容器與系統關係示意圖

Docker與虛擬機之間的比較

Docker是在操作系統進程層面的隔離,而虛擬機是在物理資源層面的隔離,兩者完全不同,另外,我們也可以通過下面的一個比較,瞭解兩者的根本性差異。

10分鐘快速掌握Docker必備基礎知識

容器與虛擬機的比較【摘自《Docker-從入門到實踐》】

從上面的容器與虛擬機的對比中,我們明白了容器技術的優勢。

容器解決了開發與生產環境的問題

開發環境與生產環境折射的是開發人員與運維人員之間的矛盾,也許我們常常會聽到開發人員對運維人員說的這樣一句話:“在我的電腦運行沒問題,怎麼到了你那裡就出問題了,肯定是你的問題”,而運維人員則認為是開發人員的問題。

開發人員需要在本機安裝各種各樣的測試環境,因此開發的項目需要軟件越多,依賴越多,安裝的環境也就越複雜。

同樣的,運維人員需要為開發人員開發的項目提供生產環境,而運維人員除了應對軟件之間的依賴,還需要考慮安裝軟件與硬件之間的兼容性問題。

就是這樣,所以我們經常看到開發與運維相互甩鍋,怎麼解決這個問題呢?

容器就是一個不錯的解決方案,容器能成為開發與運維之間溝通的語言,因為容器就像一個集裝箱一樣,提供了軟件運行的最小化環境,將應用與其需要的環境一起打包成為鏡像,便可以在開發與運維之間溝通與傳輸。

10分鐘快速掌握Docker必備基礎知識

Docker的版本

Docker分為社區版(CE)和企業版(EE)兩個版本,社區版本可以免費使用,而企業版則需要付費使用,對於我們個人開發者或小企業來說,一般是使用社區版的。

Docker CE有三個更新頻道,分別為stable、test、nightly,stable是穩定版本,test是測試後的預發佈版本,而nightly則是開發中準備在下一個版本正式發佈的版本,我們可以根據自己的需求下載安裝。

如何安裝Docker?

好了,通過前面的介紹,我們應該對Docker有了初步的瞭解,下面開始進入Docker的學習之旅了。

而學習Docker的第一步,從安裝Docker運行環境開始,我們以Docker的社區版本(CE)安裝為例。

Docker社區版本提供了Mac OS,Microsoft Windows和Linux(Centos,Ubuntu,Fedora,Debian)等操作系統的安裝包,同時也支持在雲服務器上的安裝,比如AWS Cloud。

在Windows系統上安裝

Docker Desktop for Windows

Docker為Windows提供了一個桌面應用程序管理的安裝包(Docker Desktop for Windows),不過對系統有以下幾點要求:

  1. 必須是64位Windows10專業版,企業版,教育版,構建在15063或更高版本,
  2. 在BIOS中啟用虛擬化。通常,默認情況下啟用虛擬化。
  3. 至少有4GB內存。
  4. CPU支持SLAT。

如果操作系統滿足上面的要求,則可以直接下載安裝包直接安裝,在安裝成功後,Docker並不會自動啟動,需要我們自己啟動,我們可以在開始菜單中找到Docker,如下圖,單擊啟動便可啟動。

10分鐘快速掌握Docker必備基礎知識

Docker Toolbox

如果系統達不到上面的要求,比如說你用的是Windows 7操作系統,這時候要想使用Docker,便需要藉助Docker Toolbox,Docker Toolbox是Docker提供的在比較舊的Mac OS,Windows操作系統上安裝Docker環境的工具集。

Docker Toolbox包括docker-cli(就是我們在終端使用的docker命令行工具),docker-compose(多容器管理工具),docker-mecahine,VirtualBox(虛擬機),Kitematic(docker的GUI管理工具)。

本質上使用Docker Toolbox安裝Docker環境,實際上是在VirtualBox中創建一個Linux虛擬機,並在虛擬機上安裝Docker。

另外,在安裝過程中會開啟Windows的Hyper-V模塊(Windows操作系統實現虛擬化的一種技術),這裡面有個要注意的點是如果開啟了Hyper-V,則VirtualBox不再生效了。

在Mac OS上安裝

如同Windows操作系統一樣,Docker為Mac OS也一樣提供一個桌面應用程序(Docker Desktop for Mac),比較簡單,從docker官網上下載Dokcer.dmg安裝,打開Docker.dmg,如下圖所示:

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

10分鐘快速掌握Docker必備基礎知識

物理服務器部署應用示意圖

那麼,這種方式有什麼問題呢?其實,在物理機上部署應用有以下幾個缺點:

  • 部署非常慢:因為我們得先準備硬件服務器,接著還要安裝操作系統,然後再部署應用程序,而且應用程序還有很多的依賴軟件,所以這個過程是比較慢的。
  • 成本非常高:主要是物理器成本太高,即使是部署一個簡單的應用,也需要一臺服務器。
  • 資源浪費:如果應用太簡單,也容易浪費硬件資源,比如CPU和內存
  • 遷移和擴展太慢:如果需要遷移應用,或者擴展應用,都要再準備其他的物理服務器,過程很麻煩,也很慢。

那麼有什麼辦法可以解決這些問題呢?答案便是虛擬化技術。

使用虛擬機部署應用程序的年代

什麼是虛擬化技術

談到計算機的虛擬化技術,我們直接想到的便是虛擬機,虛擬機允許我們在一臺物理計算機模擬出多臺機器,簡單地理解,虛擬化技術就是在一臺物理計算機上,通過中間虛擬軟件層Hypervisor隔離CPU、內存等硬件資源,虛擬出多臺虛擬服務器,這樣做的話,一臺物理服務器便可以安裝多個應用程序,達到資源利用的最大化,而且多個應用之間相互隔離,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

虛擬機上部署應用示意圖

虛擬機的優點

  • 可以把資源分配到不同的虛擬機,達到硬件資源的最大化利用
  • 與直接在物理機上部署應用,虛擬機更容易擴展應用。
  • 雲服務:通過虛擬機虛擬出不同的物理資源,可以快速搭建雲服務。

虛擬機的不足之處

虛擬機的不足之處在於對物理服務器資源的消耗,當我們在物理服務器創建一臺虛擬機時,便需要虛擬出一套硬件並在上面運行完整的操作系統,每臺虛擬機都佔用許多的服務器資源。

Docker是什麼?

相對於虛擬機的笨重,Docker則更顯得輕量化,因此不會佔用太多的系統資源。

Docker是使用時下很火的Golang語言進行開發的,其技術核心是Linux內核的Cgroup,Namespace和AUFS類的Union FS等技術,這些技術都是Linux內核中早已存在很多年的技術,所以嚴格來說Docker並不是一個完全創新的技術,Docker通過這些底層的Linux技術,對Linux進程進行封裝隔離,而被隔離的進程也被稱為容器,完全獨立於宿主機的進程。

所以Docker是容器技術的一種實現,也是操作系統層面的一種虛擬化,與虛擬機通過一套硬件再安裝操作系統完全不同。

10分鐘快速掌握Docker必備基礎知識

docker容器與系統關係示意圖

Docker與虛擬機之間的比較

Docker是在操作系統進程層面的隔離,而虛擬機是在物理資源層面的隔離,兩者完全不同,另外,我們也可以通過下面的一個比較,瞭解兩者的根本性差異。

10分鐘快速掌握Docker必備基礎知識

容器與虛擬機的比較【摘自《Docker-從入門到實踐》】

從上面的容器與虛擬機的對比中,我們明白了容器技術的優勢。

容器解決了開發與生產環境的問題

開發環境與生產環境折射的是開發人員與運維人員之間的矛盾,也許我們常常會聽到開發人員對運維人員說的這樣一句話:“在我的電腦運行沒問題,怎麼到了你那裡就出問題了,肯定是你的問題”,而運維人員則認為是開發人員的問題。

開發人員需要在本機安裝各種各樣的測試環境,因此開發的項目需要軟件越多,依賴越多,安裝的環境也就越複雜。

同樣的,運維人員需要為開發人員開發的項目提供生產環境,而運維人員除了應對軟件之間的依賴,還需要考慮安裝軟件與硬件之間的兼容性問題。

就是這樣,所以我們經常看到開發與運維相互甩鍋,怎麼解決這個問題呢?

容器就是一個不錯的解決方案,容器能成為開發與運維之間溝通的語言,因為容器就像一個集裝箱一樣,提供了軟件運行的最小化環境,將應用與其需要的環境一起打包成為鏡像,便可以在開發與運維之間溝通與傳輸。

10分鐘快速掌握Docker必備基礎知識

Docker的版本

Docker分為社區版(CE)和企業版(EE)兩個版本,社區版本可以免費使用,而企業版則需要付費使用,對於我們個人開發者或小企業來說,一般是使用社區版的。

Docker CE有三個更新頻道,分別為stable、test、nightly,stable是穩定版本,test是測試後的預發佈版本,而nightly則是開發中準備在下一個版本正式發佈的版本,我們可以根據自己的需求下載安裝。

如何安裝Docker?

好了,通過前面的介紹,我們應該對Docker有了初步的瞭解,下面開始進入Docker的學習之旅了。

而學習Docker的第一步,從安裝Docker運行環境開始,我們以Docker的社區版本(CE)安裝為例。

Docker社區版本提供了Mac OS,Microsoft Windows和Linux(Centos,Ubuntu,Fedora,Debian)等操作系統的安裝包,同時也支持在雲服務器上的安裝,比如AWS Cloud。

在Windows系統上安裝

Docker Desktop for Windows

Docker為Windows提供了一個桌面應用程序管理的安裝包(Docker Desktop for Windows),不過對系統有以下幾點要求:

  1. 必須是64位Windows10專業版,企業版,教育版,構建在15063或更高版本,
  2. 在BIOS中啟用虛擬化。通常,默認情況下啟用虛擬化。
  3. 至少有4GB內存。
  4. CPU支持SLAT。

如果操作系統滿足上面的要求,則可以直接下載安裝包直接安裝,在安裝成功後,Docker並不會自動啟動,需要我們自己啟動,我們可以在開始菜單中找到Docker,如下圖,單擊啟動便可啟動。

10分鐘快速掌握Docker必備基礎知識

Docker Toolbox

如果系統達不到上面的要求,比如說你用的是Windows 7操作系統,這時候要想使用Docker,便需要藉助Docker Toolbox,Docker Toolbox是Docker提供的在比較舊的Mac OS,Windows操作系統上安裝Docker環境的工具集。

Docker Toolbox包括docker-cli(就是我們在終端使用的docker命令行工具),docker-compose(多容器管理工具),docker-mecahine,VirtualBox(虛擬機),Kitematic(docker的GUI管理工具)。

本質上使用Docker Toolbox安裝Docker環境,實際上是在VirtualBox中創建一個Linux虛擬機,並在虛擬機上安裝Docker。

另外,在安裝過程中會開啟Windows的Hyper-V模塊(Windows操作系統實現虛擬化的一種技術),這裡面有個要注意的點是如果開啟了Hyper-V,則VirtualBox不再生效了。

在Mac OS上安裝

如同Windows操作系統一樣,Docker為Mac OS也一樣提供一個桌面應用程序(Docker Desktop for Mac),比較簡單,從docker官網上下載Dokcer.dmg安裝,打開Docker.dmg,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

直接拖動Docker圖標便完成了安裝。

對於比較老的Mac OS操作系統,也可以像Windows一樣,使用Docker Toolbox,這點可以參考上面的介紹。

在Mac OS上安裝完成之後,在Application中找到Docker圖標,雙擊打開便可以啟動Docker了,如下:

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

10分鐘快速掌握Docker必備基礎知識

物理服務器部署應用示意圖

那麼,這種方式有什麼問題呢?其實,在物理機上部署應用有以下幾個缺點:

  • 部署非常慢:因為我們得先準備硬件服務器,接著還要安裝操作系統,然後再部署應用程序,而且應用程序還有很多的依賴軟件,所以這個過程是比較慢的。
  • 成本非常高:主要是物理器成本太高,即使是部署一個簡單的應用,也需要一臺服務器。
  • 資源浪費:如果應用太簡單,也容易浪費硬件資源,比如CPU和內存
  • 遷移和擴展太慢:如果需要遷移應用,或者擴展應用,都要再準備其他的物理服務器,過程很麻煩,也很慢。

那麼有什麼辦法可以解決這些問題呢?答案便是虛擬化技術。

使用虛擬機部署應用程序的年代

什麼是虛擬化技術

談到計算機的虛擬化技術,我們直接想到的便是虛擬機,虛擬機允許我們在一臺物理計算機模擬出多臺機器,簡單地理解,虛擬化技術就是在一臺物理計算機上,通過中間虛擬軟件層Hypervisor隔離CPU、內存等硬件資源,虛擬出多臺虛擬服務器,這樣做的話,一臺物理服務器便可以安裝多個應用程序,達到資源利用的最大化,而且多個應用之間相互隔離,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

虛擬機上部署應用示意圖

虛擬機的優點

  • 可以把資源分配到不同的虛擬機,達到硬件資源的最大化利用
  • 與直接在物理機上部署應用,虛擬機更容易擴展應用。
  • 雲服務:通過虛擬機虛擬出不同的物理資源,可以快速搭建雲服務。

虛擬機的不足之處

虛擬機的不足之處在於對物理服務器資源的消耗,當我們在物理服務器創建一臺虛擬機時,便需要虛擬出一套硬件並在上面運行完整的操作系統,每臺虛擬機都佔用許多的服務器資源。

Docker是什麼?

相對於虛擬機的笨重,Docker則更顯得輕量化,因此不會佔用太多的系統資源。

Docker是使用時下很火的Golang語言進行開發的,其技術核心是Linux內核的Cgroup,Namespace和AUFS類的Union FS等技術,這些技術都是Linux內核中早已存在很多年的技術,所以嚴格來說Docker並不是一個完全創新的技術,Docker通過這些底層的Linux技術,對Linux進程進行封裝隔離,而被隔離的進程也被稱為容器,完全獨立於宿主機的進程。

所以Docker是容器技術的一種實現,也是操作系統層面的一種虛擬化,與虛擬機通過一套硬件再安裝操作系統完全不同。

10分鐘快速掌握Docker必備基礎知識

docker容器與系統關係示意圖

Docker與虛擬機之間的比較

Docker是在操作系統進程層面的隔離,而虛擬機是在物理資源層面的隔離,兩者完全不同,另外,我們也可以通過下面的一個比較,瞭解兩者的根本性差異。

10分鐘快速掌握Docker必備基礎知識

容器與虛擬機的比較【摘自《Docker-從入門到實踐》】

從上面的容器與虛擬機的對比中,我們明白了容器技術的優勢。

容器解決了開發與生產環境的問題

開發環境與生產環境折射的是開發人員與運維人員之間的矛盾,也許我們常常會聽到開發人員對運維人員說的這樣一句話:“在我的電腦運行沒問題,怎麼到了你那裡就出問題了,肯定是你的問題”,而運維人員則認為是開發人員的問題。

開發人員需要在本機安裝各種各樣的測試環境,因此開發的項目需要軟件越多,依賴越多,安裝的環境也就越複雜。

同樣的,運維人員需要為開發人員開發的項目提供生產環境,而運維人員除了應對軟件之間的依賴,還需要考慮安裝軟件與硬件之間的兼容性問題。

就是這樣,所以我們經常看到開發與運維相互甩鍋,怎麼解決這個問題呢?

容器就是一個不錯的解決方案,容器能成為開發與運維之間溝通的語言,因為容器就像一個集裝箱一樣,提供了軟件運行的最小化環境,將應用與其需要的環境一起打包成為鏡像,便可以在開發與運維之間溝通與傳輸。

10分鐘快速掌握Docker必備基礎知識

Docker的版本

Docker分為社區版(CE)和企業版(EE)兩個版本,社區版本可以免費使用,而企業版則需要付費使用,對於我們個人開發者或小企業來說,一般是使用社區版的。

Docker CE有三個更新頻道,分別為stable、test、nightly,stable是穩定版本,test是測試後的預發佈版本,而nightly則是開發中準備在下一個版本正式發佈的版本,我們可以根據自己的需求下載安裝。

如何安裝Docker?

好了,通過前面的介紹,我們應該對Docker有了初步的瞭解,下面開始進入Docker的學習之旅了。

而學習Docker的第一步,從安裝Docker運行環境開始,我們以Docker的社區版本(CE)安裝為例。

Docker社區版本提供了Mac OS,Microsoft Windows和Linux(Centos,Ubuntu,Fedora,Debian)等操作系統的安裝包,同時也支持在雲服務器上的安裝,比如AWS Cloud。

在Windows系統上安裝

Docker Desktop for Windows

Docker為Windows提供了一個桌面應用程序管理的安裝包(Docker Desktop for Windows),不過對系統有以下幾點要求:

  1. 必須是64位Windows10專業版,企業版,教育版,構建在15063或更高版本,
  2. 在BIOS中啟用虛擬化。通常,默認情況下啟用虛擬化。
  3. 至少有4GB內存。
  4. CPU支持SLAT。

如果操作系統滿足上面的要求,則可以直接下載安裝包直接安裝,在安裝成功後,Docker並不會自動啟動,需要我們自己啟動,我們可以在開始菜單中找到Docker,如下圖,單擊啟動便可啟動。

10分鐘快速掌握Docker必備基礎知識

Docker Toolbox

如果系統達不到上面的要求,比如說你用的是Windows 7操作系統,這時候要想使用Docker,便需要藉助Docker Toolbox,Docker Toolbox是Docker提供的在比較舊的Mac OS,Windows操作系統上安裝Docker環境的工具集。

Docker Toolbox包括docker-cli(就是我們在終端使用的docker命令行工具),docker-compose(多容器管理工具),docker-mecahine,VirtualBox(虛擬機),Kitematic(docker的GUI管理工具)。

本質上使用Docker Toolbox安裝Docker環境,實際上是在VirtualBox中創建一個Linux虛擬機,並在虛擬機上安裝Docker。

另外,在安裝過程中會開啟Windows的Hyper-V模塊(Windows操作系統實現虛擬化的一種技術),這裡面有個要注意的點是如果開啟了Hyper-V,則VirtualBox不再生效了。

在Mac OS上安裝

如同Windows操作系統一樣,Docker為Mac OS也一樣提供一個桌面應用程序(Docker Desktop for Mac),比較簡單,從docker官網上下載Dokcer.dmg安裝,打開Docker.dmg,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

直接拖動Docker圖標便完成了安裝。

對於比較老的Mac OS操作系統,也可以像Windows一樣,使用Docker Toolbox,這點可以參考上面的介紹。

在Mac OS上安裝完成之後,在Application中找到Docker圖標,雙擊打開便可以啟動Docker了,如下:

10分鐘快速掌握Docker必備基礎知識

在Linux上安裝

在Linux操作系統上的安裝,主要以Centos7為例,其他Linux系統的發行版本,如Ubuntu,Debian,Fedora等,可以自行查詢Docker的官方文檔

刪除舊的docker版本

可能有些Linux預先安裝Docker,但一般版本比較舊,所以可以先執行以下代碼來刪除舊版本的Docker。

$ sudo dnf remove docker \\

docker-client \\

docker-client-latest \\

docker-common \\

docker-latest \\

docker-latest-logrotate \\

docker-logrotate \\

docker-selinux \\

docker-engine-selinux \\

docker-engine

指定安裝版本

$ sudo yum-config-manager \\

--add-repo \\

https://download.docker.com/linux/centos/docker-ce.repo

使用yum安裝docker

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

啟動docker服務器

# 啟動docker守護進程

$ sudo systemctl start docker

測試安裝是否成功

通過上面幾種方式安裝了Docker之後,我們可以通過下面的方法來檢測安裝是否成功。

打印docker版本

# 打印docker版本

$ docker version

拉取鏡像並運行容器

# 拉取hello-world鏡像

docker pull hello-world

# 使用hello-world運行一個容器

docker run hello-world

運行上面的命令之後,如果有如下圖所示的輸出結果,則說明安裝已經成功了。

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

10分鐘快速掌握Docker必備基礎知識

物理服務器部署應用示意圖

那麼,這種方式有什麼問題呢?其實,在物理機上部署應用有以下幾個缺點:

  • 部署非常慢:因為我們得先準備硬件服務器,接著還要安裝操作系統,然後再部署應用程序,而且應用程序還有很多的依賴軟件,所以這個過程是比較慢的。
  • 成本非常高:主要是物理器成本太高,即使是部署一個簡單的應用,也需要一臺服務器。
  • 資源浪費:如果應用太簡單,也容易浪費硬件資源,比如CPU和內存
  • 遷移和擴展太慢:如果需要遷移應用,或者擴展應用,都要再準備其他的物理服務器,過程很麻煩,也很慢。

那麼有什麼辦法可以解決這些問題呢?答案便是虛擬化技術。

使用虛擬機部署應用程序的年代

什麼是虛擬化技術

談到計算機的虛擬化技術,我們直接想到的便是虛擬機,虛擬機允許我們在一臺物理計算機模擬出多臺機器,簡單地理解,虛擬化技術就是在一臺物理計算機上,通過中間虛擬軟件層Hypervisor隔離CPU、內存等硬件資源,虛擬出多臺虛擬服務器,這樣做的話,一臺物理服務器便可以安裝多個應用程序,達到資源利用的最大化,而且多個應用之間相互隔離,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

虛擬機上部署應用示意圖

虛擬機的優點

  • 可以把資源分配到不同的虛擬機,達到硬件資源的最大化利用
  • 與直接在物理機上部署應用,虛擬機更容易擴展應用。
  • 雲服務:通過虛擬機虛擬出不同的物理資源,可以快速搭建雲服務。

虛擬機的不足之處

虛擬機的不足之處在於對物理服務器資源的消耗,當我們在物理服務器創建一臺虛擬機時,便需要虛擬出一套硬件並在上面運行完整的操作系統,每臺虛擬機都佔用許多的服務器資源。

Docker是什麼?

相對於虛擬機的笨重,Docker則更顯得輕量化,因此不會佔用太多的系統資源。

Docker是使用時下很火的Golang語言進行開發的,其技術核心是Linux內核的Cgroup,Namespace和AUFS類的Union FS等技術,這些技術都是Linux內核中早已存在很多年的技術,所以嚴格來說Docker並不是一個完全創新的技術,Docker通過這些底層的Linux技術,對Linux進程進行封裝隔離,而被隔離的進程也被稱為容器,完全獨立於宿主機的進程。

所以Docker是容器技術的一種實現,也是操作系統層面的一種虛擬化,與虛擬機通過一套硬件再安裝操作系統完全不同。

10分鐘快速掌握Docker必備基礎知識

docker容器與系統關係示意圖

Docker與虛擬機之間的比較

Docker是在操作系統進程層面的隔離,而虛擬機是在物理資源層面的隔離,兩者完全不同,另外,我們也可以通過下面的一個比較,瞭解兩者的根本性差異。

10分鐘快速掌握Docker必備基礎知識

容器與虛擬機的比較【摘自《Docker-從入門到實踐》】

從上面的容器與虛擬機的對比中,我們明白了容器技術的優勢。

容器解決了開發與生產環境的問題

開發環境與生產環境折射的是開發人員與運維人員之間的矛盾,也許我們常常會聽到開發人員對運維人員說的這樣一句話:“在我的電腦運行沒問題,怎麼到了你那裡就出問題了,肯定是你的問題”,而運維人員則認為是開發人員的問題。

開發人員需要在本機安裝各種各樣的測試環境,因此開發的項目需要軟件越多,依賴越多,安裝的環境也就越複雜。

同樣的,運維人員需要為開發人員開發的項目提供生產環境,而運維人員除了應對軟件之間的依賴,還需要考慮安裝軟件與硬件之間的兼容性問題。

就是這樣,所以我們經常看到開發與運維相互甩鍋,怎麼解決這個問題呢?

容器就是一個不錯的解決方案,容器能成為開發與運維之間溝通的語言,因為容器就像一個集裝箱一樣,提供了軟件運行的最小化環境,將應用與其需要的環境一起打包成為鏡像,便可以在開發與運維之間溝通與傳輸。

10分鐘快速掌握Docker必備基礎知識

Docker的版本

Docker分為社區版(CE)和企業版(EE)兩個版本,社區版本可以免費使用,而企業版則需要付費使用,對於我們個人開發者或小企業來說,一般是使用社區版的。

Docker CE有三個更新頻道,分別為stable、test、nightly,stable是穩定版本,test是測試後的預發佈版本,而nightly則是開發中準備在下一個版本正式發佈的版本,我們可以根據自己的需求下載安裝。

如何安裝Docker?

好了,通過前面的介紹,我們應該對Docker有了初步的瞭解,下面開始進入Docker的學習之旅了。

而學習Docker的第一步,從安裝Docker運行環境開始,我們以Docker的社區版本(CE)安裝為例。

Docker社區版本提供了Mac OS,Microsoft Windows和Linux(Centos,Ubuntu,Fedora,Debian)等操作系統的安裝包,同時也支持在雲服務器上的安裝,比如AWS Cloud。

在Windows系統上安裝

Docker Desktop for Windows

Docker為Windows提供了一個桌面應用程序管理的安裝包(Docker Desktop for Windows),不過對系統有以下幾點要求:

  1. 必須是64位Windows10專業版,企業版,教育版,構建在15063或更高版本,
  2. 在BIOS中啟用虛擬化。通常,默認情況下啟用虛擬化。
  3. 至少有4GB內存。
  4. CPU支持SLAT。

如果操作系統滿足上面的要求,則可以直接下載安裝包直接安裝,在安裝成功後,Docker並不會自動啟動,需要我們自己啟動,我們可以在開始菜單中找到Docker,如下圖,單擊啟動便可啟動。

10分鐘快速掌握Docker必備基礎知識

Docker Toolbox

如果系統達不到上面的要求,比如說你用的是Windows 7操作系統,這時候要想使用Docker,便需要藉助Docker Toolbox,Docker Toolbox是Docker提供的在比較舊的Mac OS,Windows操作系統上安裝Docker環境的工具集。

Docker Toolbox包括docker-cli(就是我們在終端使用的docker命令行工具),docker-compose(多容器管理工具),docker-mecahine,VirtualBox(虛擬機),Kitematic(docker的GUI管理工具)。

本質上使用Docker Toolbox安裝Docker環境,實際上是在VirtualBox中創建一個Linux虛擬機,並在虛擬機上安裝Docker。

另外,在安裝過程中會開啟Windows的Hyper-V模塊(Windows操作系統實現虛擬化的一種技術),這裡面有個要注意的點是如果開啟了Hyper-V,則VirtualBox不再生效了。

在Mac OS上安裝

如同Windows操作系統一樣,Docker為Mac OS也一樣提供一個桌面應用程序(Docker Desktop for Mac),比較簡單,從docker官網上下載Dokcer.dmg安裝,打開Docker.dmg,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

直接拖動Docker圖標便完成了安裝。

對於比較老的Mac OS操作系統,也可以像Windows一樣,使用Docker Toolbox,這點可以參考上面的介紹。

在Mac OS上安裝完成之後,在Application中找到Docker圖標,雙擊打開便可以啟動Docker了,如下:

10分鐘快速掌握Docker必備基礎知識

在Linux上安裝

在Linux操作系統上的安裝,主要以Centos7為例,其他Linux系統的發行版本,如Ubuntu,Debian,Fedora等,可以自行查詢Docker的官方文檔

刪除舊的docker版本

可能有些Linux預先安裝Docker,但一般版本比較舊,所以可以先執行以下代碼來刪除舊版本的Docker。

$ sudo dnf remove docker \\

docker-client \\

docker-client-latest \\

docker-common \\

docker-latest \\

docker-latest-logrotate \\

docker-logrotate \\

docker-selinux \\

docker-engine-selinux \\

docker-engine

指定安裝版本

$ sudo yum-config-manager \\

--add-repo \\

https://download.docker.com/linux/centos/docker-ce.repo

使用yum安裝docker

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

啟動docker服務器

# 啟動docker守護進程

$ sudo systemctl start docker

測試安裝是否成功

通過上面幾種方式安裝了Docker之後,我們可以通過下面的方法來檢測安裝是否成功。

打印docker版本

# 打印docker版本

$ docker version

拉取鏡像並運行容器

# 拉取hello-world鏡像

docker pull hello-world

# 使用hello-world運行一個容器

docker run hello-world

運行上面的命令之後,如果有如下圖所示的輸出結果,則說明安裝已經成功了。

10分鐘快速掌握Docker必備基礎知識

Docker的基本概念

鏡像(Image)、容器(Container)與倉庫(Repository),這三個是docker中最基本也是最核心的概念,對這三個概念的掌握與理解,是學習docker的關鍵。

鏡像(Image)

什麼是Docker的鏡像?

Docker本質上是一個運行在Linux操作系統上的應用,而Linux操作系統分為內核和用戶空間,無論是Centos還是Ubuntu,都是在啟動內核之後,通過掛載Root文件系統來提供用戶空間的,而Docker鏡像就是一個Root文件系統

Docker鏡像是一個特殊的文件系統,提供容器運行時所需的程序、庫、資源、配置等文件,另外還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。

鏡像是一個靜態的概念,不包含任何動態數據,其內容在構建之後也不會被改變。

下面的命令是一些對鏡像的基本操作,如下:

查看鏡像列表

# 列出所有鏡像

docker image ls

由於我們前面已經拉取了hello-world鏡像,所以會輸出下面的內容:

REPOSITORY TAG IMAGE ID CREATED SIZE

hello-world latest fce289e99eb9 7 months ago 1.84kB

下面的命令也一樣可以查看本地的鏡像列表,而且寫法更簡潔。

# 列表所有鏡像

docker images

從倉庫拉取鏡像

前面我們已經演示過使用docker pull命令拉取了hello-world鏡像了,當然使用docker image pull命令也是一樣的。

一般默認是從Docker Hub上拉取鏡像的,Docker Hub是Docker官方提供的鏡像倉庫服務(Docker Registry),有大量官方或第三方鏡像供我們使用,比如我們可以在命令行中輸入下面的命令直接拉取一個Centos鏡像:

docker pull centos

docker pull命令的完整寫法如下:

docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標籤]

拉取一個鏡像,需要指定Docker Registry的地址和端口號,默認是Docker Hub,還需要指定倉庫名和標籤,倉庫名和標籤唯一確定一個鏡像,而標籤是可能省略,如果省略,則默認使用latest作為標籤名,另外,倉庫名則由作者名和軟件名組成。

那麼,我們上面使用centos,那是因為省略作者名,則作者名library,表示Docker官方的鏡像,所以上面的命令等同於:

docker pull library/centos:latest

因此,如果拉取非官方的第三方鏡像,則需要指定完整倉庫名,如下:

docker pull mysql/mysql-server:latest

運行鏡像

使用docker run命令,可以通過鏡像創建一個容器,如下:

docker run -it centos /bin/bash

刪除鏡像

當本地有些鏡像我們不需要時,那我們也可以刪除該鏡像,以節省存儲空間,不過要注意,如果有使用該鏡像創建的容器未刪除,則不允許刪除鏡像。

# image_name表示鏡像名,image_id表示鏡像id

dockere image rm image_name/image_id

刪除鏡像的快捷命令:

docker rmi image_name/image_id

好了,關於Docker鏡像的相關知識,我們就簡單地介紹到這裡,有機會的話,我們單獨寫一篇文章來談談,特別構建Docker鏡像部分的相關知識,有必要深入再學習一下。

容器(Container)

Docker的鏡像是用於生成容器的模板,鏡像分層的,鏡像與容器的關係,就是面向對象編程中類與對象的關係,我們定好每一個類,然後使用類創建對象,對應到Docker的使用上,則是構建好每一個鏡像,然後使用鏡像創建我們需要的容器。

啟動和停止容器

啟動容器有兩種方式,一種是我們前面已經介紹過的,使用docker run命令通過鏡像創建一個全新的容器,如下:

docker run hello-world

另外一種啟動容器的方式就是啟動一個已經停止運行的容器:

# container_id表示容器的id

docker start container_id

要停止正在運行的容器可以使用docker container stop或docker stop命令,如下:

# container_id表示容器的id

docker stop container_id

查看所有容器

如果要查看本地所有的容器,可以使用docker container ls命令:

# 查看所有容器

docker container ls

查看所有容器也有簡潔的寫法,如下:

# 查看所有容器

docker ps

刪除容器

我們也可以使用docker container rm命令,或簡潔的寫法docker rm命令來刪除容器,不過不允許刪除正在運行的容器,因此如果要刪除的話,就必須先停止容器,

# container_id表示容器id,通過docker ps可以看到容器id

$ docker rm container_id

當我們需要批量刪除所有容器,可以用下面的命令:

# 刪除所有容器

docker rm $(docker ps -q)

# 刪除所有退出的容器

docker container prune

進入容器

# 進入容器,container_id表示容器的id,command表示linux命令,如/bin/bash

docker exec -it container_id command

倉庫(Repository)

在前面的例子中,我們使用兩種方式構建鏡像,構建完成之後,可以在本地運行鏡像,生成容器,但如果在更多的服務器運行鏡像呢?很明顯,這時候我們需要一個可以讓我們集中存儲和分發鏡像的服務,就像Github可以讓我們自己存儲和分發代碼一樣。

Docker Hub就是Docker提供用於存儲和分佈鏡像的官方Docker Registry,也是默認的Registry,其網址為https://hub.docker.com,前面我們使用docker pull命令便從Docker Hub上拉取鏡像。

Docker Hub有很多官方或其他開發提供的高質量鏡像供我們使用,當然,如果要將我們自己構建的鏡像上傳到Docker Hub上,我們需要在Docker Hub上註冊一個賬號,然後把自己在本地構建的鏡像發送到Docker Hub的倉庫當中,Docker Registry包含很多個倉庫,每個倉庫對應多個標籤,不同標籤對應一個軟件的不同版本。

Docker的組成與架構

在安裝好並啟動了Docker之後,我們可以使用在命令行中使用docker命令操作docker,比如我們使用如下命令打印docker的版本信息。

docker verion

其結果如下:

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

10分鐘快速掌握Docker必備基礎知識

物理服務器部署應用示意圖

那麼,這種方式有什麼問題呢?其實,在物理機上部署應用有以下幾個缺點:

  • 部署非常慢:因為我們得先準備硬件服務器,接著還要安裝操作系統,然後再部署應用程序,而且應用程序還有很多的依賴軟件,所以這個過程是比較慢的。
  • 成本非常高:主要是物理器成本太高,即使是部署一個簡單的應用,也需要一臺服務器。
  • 資源浪費:如果應用太簡單,也容易浪費硬件資源,比如CPU和內存
  • 遷移和擴展太慢:如果需要遷移應用,或者擴展應用,都要再準備其他的物理服務器,過程很麻煩,也很慢。

那麼有什麼辦法可以解決這些問題呢?答案便是虛擬化技術。

使用虛擬機部署應用程序的年代

什麼是虛擬化技術

談到計算機的虛擬化技術,我們直接想到的便是虛擬機,虛擬機允許我們在一臺物理計算機模擬出多臺機器,簡單地理解,虛擬化技術就是在一臺物理計算機上,通過中間虛擬軟件層Hypervisor隔離CPU、內存等硬件資源,虛擬出多臺虛擬服務器,這樣做的話,一臺物理服務器便可以安裝多個應用程序,達到資源利用的最大化,而且多個應用之間相互隔離,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

虛擬機上部署應用示意圖

虛擬機的優點

  • 可以把資源分配到不同的虛擬機,達到硬件資源的最大化利用
  • 與直接在物理機上部署應用,虛擬機更容易擴展應用。
  • 雲服務:通過虛擬機虛擬出不同的物理資源,可以快速搭建雲服務。

虛擬機的不足之處

虛擬機的不足之處在於對物理服務器資源的消耗,當我們在物理服務器創建一臺虛擬機時,便需要虛擬出一套硬件並在上面運行完整的操作系統,每臺虛擬機都佔用許多的服務器資源。

Docker是什麼?

相對於虛擬機的笨重,Docker則更顯得輕量化,因此不會佔用太多的系統資源。

Docker是使用時下很火的Golang語言進行開發的,其技術核心是Linux內核的Cgroup,Namespace和AUFS類的Union FS等技術,這些技術都是Linux內核中早已存在很多年的技術,所以嚴格來說Docker並不是一個完全創新的技術,Docker通過這些底層的Linux技術,對Linux進程進行封裝隔離,而被隔離的進程也被稱為容器,完全獨立於宿主機的進程。

所以Docker是容器技術的一種實現,也是操作系統層面的一種虛擬化,與虛擬機通過一套硬件再安裝操作系統完全不同。

10分鐘快速掌握Docker必備基礎知識

docker容器與系統關係示意圖

Docker與虛擬機之間的比較

Docker是在操作系統進程層面的隔離,而虛擬機是在物理資源層面的隔離,兩者完全不同,另外,我們也可以通過下面的一個比較,瞭解兩者的根本性差異。

10分鐘快速掌握Docker必備基礎知識

容器與虛擬機的比較【摘自《Docker-從入門到實踐》】

從上面的容器與虛擬機的對比中,我們明白了容器技術的優勢。

容器解決了開發與生產環境的問題

開發環境與生產環境折射的是開發人員與運維人員之間的矛盾,也許我們常常會聽到開發人員對運維人員說的這樣一句話:“在我的電腦運行沒問題,怎麼到了你那裡就出問題了,肯定是你的問題”,而運維人員則認為是開發人員的問題。

開發人員需要在本機安裝各種各樣的測試環境,因此開發的項目需要軟件越多,依賴越多,安裝的環境也就越複雜。

同樣的,運維人員需要為開發人員開發的項目提供生產環境,而運維人員除了應對軟件之間的依賴,還需要考慮安裝軟件與硬件之間的兼容性問題。

就是這樣,所以我們經常看到開發與運維相互甩鍋,怎麼解決這個問題呢?

容器就是一個不錯的解決方案,容器能成為開發與運維之間溝通的語言,因為容器就像一個集裝箱一樣,提供了軟件運行的最小化環境,將應用與其需要的環境一起打包成為鏡像,便可以在開發與運維之間溝通與傳輸。

10分鐘快速掌握Docker必備基礎知識

Docker的版本

Docker分為社區版(CE)和企業版(EE)兩個版本,社區版本可以免費使用,而企業版則需要付費使用,對於我們個人開發者或小企業來說,一般是使用社區版的。

Docker CE有三個更新頻道,分別為stable、test、nightly,stable是穩定版本,test是測試後的預發佈版本,而nightly則是開發中準備在下一個版本正式發佈的版本,我們可以根據自己的需求下載安裝。

如何安裝Docker?

好了,通過前面的介紹,我們應該對Docker有了初步的瞭解,下面開始進入Docker的學習之旅了。

而學習Docker的第一步,從安裝Docker運行環境開始,我們以Docker的社區版本(CE)安裝為例。

Docker社區版本提供了Mac OS,Microsoft Windows和Linux(Centos,Ubuntu,Fedora,Debian)等操作系統的安裝包,同時也支持在雲服務器上的安裝,比如AWS Cloud。

在Windows系統上安裝

Docker Desktop for Windows

Docker為Windows提供了一個桌面應用程序管理的安裝包(Docker Desktop for Windows),不過對系統有以下幾點要求:

  1. 必須是64位Windows10專業版,企業版,教育版,構建在15063或更高版本,
  2. 在BIOS中啟用虛擬化。通常,默認情況下啟用虛擬化。
  3. 至少有4GB內存。
  4. CPU支持SLAT。

如果操作系統滿足上面的要求,則可以直接下載安裝包直接安裝,在安裝成功後,Docker並不會自動啟動,需要我們自己啟動,我們可以在開始菜單中找到Docker,如下圖,單擊啟動便可啟動。

10分鐘快速掌握Docker必備基礎知識

Docker Toolbox

如果系統達不到上面的要求,比如說你用的是Windows 7操作系統,這時候要想使用Docker,便需要藉助Docker Toolbox,Docker Toolbox是Docker提供的在比較舊的Mac OS,Windows操作系統上安裝Docker環境的工具集。

Docker Toolbox包括docker-cli(就是我們在終端使用的docker命令行工具),docker-compose(多容器管理工具),docker-mecahine,VirtualBox(虛擬機),Kitematic(docker的GUI管理工具)。

本質上使用Docker Toolbox安裝Docker環境,實際上是在VirtualBox中創建一個Linux虛擬機,並在虛擬機上安裝Docker。

另外,在安裝過程中會開啟Windows的Hyper-V模塊(Windows操作系統實現虛擬化的一種技術),這裡面有個要注意的點是如果開啟了Hyper-V,則VirtualBox不再生效了。

在Mac OS上安裝

如同Windows操作系統一樣,Docker為Mac OS也一樣提供一個桌面應用程序(Docker Desktop for Mac),比較簡單,從docker官網上下載Dokcer.dmg安裝,打開Docker.dmg,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

直接拖動Docker圖標便完成了安裝。

對於比較老的Mac OS操作系統,也可以像Windows一樣,使用Docker Toolbox,這點可以參考上面的介紹。

在Mac OS上安裝完成之後,在Application中找到Docker圖標,雙擊打開便可以啟動Docker了,如下:

10分鐘快速掌握Docker必備基礎知識

在Linux上安裝

在Linux操作系統上的安裝,主要以Centos7為例,其他Linux系統的發行版本,如Ubuntu,Debian,Fedora等,可以自行查詢Docker的官方文檔

刪除舊的docker版本

可能有些Linux預先安裝Docker,但一般版本比較舊,所以可以先執行以下代碼來刪除舊版本的Docker。

$ sudo dnf remove docker \\

docker-client \\

docker-client-latest \\

docker-common \\

docker-latest \\

docker-latest-logrotate \\

docker-logrotate \\

docker-selinux \\

docker-engine-selinux \\

docker-engine

指定安裝版本

$ sudo yum-config-manager \\

--add-repo \\

https://download.docker.com/linux/centos/docker-ce.repo

使用yum安裝docker

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

啟動docker服務器

# 啟動docker守護進程

$ sudo systemctl start docker

測試安裝是否成功

通過上面幾種方式安裝了Docker之後,我們可以通過下面的方法來檢測安裝是否成功。

打印docker版本

# 打印docker版本

$ docker version

拉取鏡像並運行容器

# 拉取hello-world鏡像

docker pull hello-world

# 使用hello-world運行一個容器

docker run hello-world

運行上面的命令之後,如果有如下圖所示的輸出結果,則說明安裝已經成功了。

10分鐘快速掌握Docker必備基礎知識

Docker的基本概念

鏡像(Image)、容器(Container)與倉庫(Repository),這三個是docker中最基本也是最核心的概念,對這三個概念的掌握與理解,是學習docker的關鍵。

鏡像(Image)

什麼是Docker的鏡像?

Docker本質上是一個運行在Linux操作系統上的應用,而Linux操作系統分為內核和用戶空間,無論是Centos還是Ubuntu,都是在啟動內核之後,通過掛載Root文件系統來提供用戶空間的,而Docker鏡像就是一個Root文件系統

Docker鏡像是一個特殊的文件系統,提供容器運行時所需的程序、庫、資源、配置等文件,另外還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。

鏡像是一個靜態的概念,不包含任何動態數據,其內容在構建之後也不會被改變。

下面的命令是一些對鏡像的基本操作,如下:

查看鏡像列表

# 列出所有鏡像

docker image ls

由於我們前面已經拉取了hello-world鏡像,所以會輸出下面的內容:

REPOSITORY TAG IMAGE ID CREATED SIZE

hello-world latest fce289e99eb9 7 months ago 1.84kB

下面的命令也一樣可以查看本地的鏡像列表,而且寫法更簡潔。

# 列表所有鏡像

docker images

從倉庫拉取鏡像

前面我們已經演示過使用docker pull命令拉取了hello-world鏡像了,當然使用docker image pull命令也是一樣的。

一般默認是從Docker Hub上拉取鏡像的,Docker Hub是Docker官方提供的鏡像倉庫服務(Docker Registry),有大量官方或第三方鏡像供我們使用,比如我們可以在命令行中輸入下面的命令直接拉取一個Centos鏡像:

docker pull centos

docker pull命令的完整寫法如下:

docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標籤]

拉取一個鏡像,需要指定Docker Registry的地址和端口號,默認是Docker Hub,還需要指定倉庫名和標籤,倉庫名和標籤唯一確定一個鏡像,而標籤是可能省略,如果省略,則默認使用latest作為標籤名,另外,倉庫名則由作者名和軟件名組成。

那麼,我們上面使用centos,那是因為省略作者名,則作者名library,表示Docker官方的鏡像,所以上面的命令等同於:

docker pull library/centos:latest

因此,如果拉取非官方的第三方鏡像,則需要指定完整倉庫名,如下:

docker pull mysql/mysql-server:latest

運行鏡像

使用docker run命令,可以通過鏡像創建一個容器,如下:

docker run -it centos /bin/bash

刪除鏡像

當本地有些鏡像我們不需要時,那我們也可以刪除該鏡像,以節省存儲空間,不過要注意,如果有使用該鏡像創建的容器未刪除,則不允許刪除鏡像。

# image_name表示鏡像名,image_id表示鏡像id

dockere image rm image_name/image_id

刪除鏡像的快捷命令:

docker rmi image_name/image_id

好了,關於Docker鏡像的相關知識,我們就簡單地介紹到這裡,有機會的話,我們單獨寫一篇文章來談談,特別構建Docker鏡像部分的相關知識,有必要深入再學習一下。

容器(Container)

Docker的鏡像是用於生成容器的模板,鏡像分層的,鏡像與容器的關係,就是面向對象編程中類與對象的關係,我們定好每一個類,然後使用類創建對象,對應到Docker的使用上,則是構建好每一個鏡像,然後使用鏡像創建我們需要的容器。

啟動和停止容器

啟動容器有兩種方式,一種是我們前面已經介紹過的,使用docker run命令通過鏡像創建一個全新的容器,如下:

docker run hello-world

另外一種啟動容器的方式就是啟動一個已經停止運行的容器:

# container_id表示容器的id

docker start container_id

要停止正在運行的容器可以使用docker container stop或docker stop命令,如下:

# container_id表示容器的id

docker stop container_id

查看所有容器

如果要查看本地所有的容器,可以使用docker container ls命令:

# 查看所有容器

docker container ls

查看所有容器也有簡潔的寫法,如下:

# 查看所有容器

docker ps

刪除容器

我們也可以使用docker container rm命令,或簡潔的寫法docker rm命令來刪除容器,不過不允許刪除正在運行的容器,因此如果要刪除的話,就必須先停止容器,

# container_id表示容器id,通過docker ps可以看到容器id

$ docker rm container_id

當我們需要批量刪除所有容器,可以用下面的命令:

# 刪除所有容器

docker rm $(docker ps -q)

# 刪除所有退出的容器

docker container prune

進入容器

# 進入容器,container_id表示容器的id,command表示linux命令,如/bin/bash

docker exec -it container_id command

倉庫(Repository)

在前面的例子中,我們使用兩種方式構建鏡像,構建完成之後,可以在本地運行鏡像,生成容器,但如果在更多的服務器運行鏡像呢?很明顯,這時候我們需要一個可以讓我們集中存儲和分發鏡像的服務,就像Github可以讓我們自己存儲和分發代碼一樣。

Docker Hub就是Docker提供用於存儲和分佈鏡像的官方Docker Registry,也是默認的Registry,其網址為https://hub.docker.com,前面我們使用docker pull命令便從Docker Hub上拉取鏡像。

Docker Hub有很多官方或其他開發提供的高質量鏡像供我們使用,當然,如果要將我們自己構建的鏡像上傳到Docker Hub上,我們需要在Docker Hub上註冊一個賬號,然後把自己在本地構建的鏡像發送到Docker Hub的倉庫當中,Docker Registry包含很多個倉庫,每個倉庫對應多個標籤,不同標籤對應一個軟件的不同版本。

Docker的組成與架構

在安裝好並啟動了Docker之後,我們可以使用在命令行中使用docker命令操作docker,比如我們使用如下命令打印docker的版本信息。

docker verion

其結果如下:

10分鐘快速掌握Docker必備基礎知識

從上面的圖中,我們看到打出了兩個部分的信息:Client和Server。

這是因為Docker跟大部分服務端軟件一樣(如MySQL),都是使用C/S的架構模型,也就是通過客戶端調用服務器,只是我們現在剛好服務端和客戶端都在同一臺機器上而已。

因此,我們可以使用下面的圖來表示Docker的架構,DOCKER_HOST是Docker server,而Clinet便是我們在命令中使用docker命令。

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

10分鐘快速掌握Docker必備基礎知識

物理服務器部署應用示意圖

那麼,這種方式有什麼問題呢?其實,在物理機上部署應用有以下幾個缺點:

  • 部署非常慢:因為我們得先準備硬件服務器,接著還要安裝操作系統,然後再部署應用程序,而且應用程序還有很多的依賴軟件,所以這個過程是比較慢的。
  • 成本非常高:主要是物理器成本太高,即使是部署一個簡單的應用,也需要一臺服務器。
  • 資源浪費:如果應用太簡單,也容易浪費硬件資源,比如CPU和內存
  • 遷移和擴展太慢:如果需要遷移應用,或者擴展應用,都要再準備其他的物理服務器,過程很麻煩,也很慢。

那麼有什麼辦法可以解決這些問題呢?答案便是虛擬化技術。

使用虛擬機部署應用程序的年代

什麼是虛擬化技術

談到計算機的虛擬化技術,我們直接想到的便是虛擬機,虛擬機允許我們在一臺物理計算機模擬出多臺機器,簡單地理解,虛擬化技術就是在一臺物理計算機上,通過中間虛擬軟件層Hypervisor隔離CPU、內存等硬件資源,虛擬出多臺虛擬服務器,這樣做的話,一臺物理服務器便可以安裝多個應用程序,達到資源利用的最大化,而且多個應用之間相互隔離,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

虛擬機上部署應用示意圖

虛擬機的優點

  • 可以把資源分配到不同的虛擬機,達到硬件資源的最大化利用
  • 與直接在物理機上部署應用,虛擬機更容易擴展應用。
  • 雲服務:通過虛擬機虛擬出不同的物理資源,可以快速搭建雲服務。

虛擬機的不足之處

虛擬機的不足之處在於對物理服務器資源的消耗,當我們在物理服務器創建一臺虛擬機時,便需要虛擬出一套硬件並在上面運行完整的操作系統,每臺虛擬機都佔用許多的服務器資源。

Docker是什麼?

相對於虛擬機的笨重,Docker則更顯得輕量化,因此不會佔用太多的系統資源。

Docker是使用時下很火的Golang語言進行開發的,其技術核心是Linux內核的Cgroup,Namespace和AUFS類的Union FS等技術,這些技術都是Linux內核中早已存在很多年的技術,所以嚴格來說Docker並不是一個完全創新的技術,Docker通過這些底層的Linux技術,對Linux進程進行封裝隔離,而被隔離的進程也被稱為容器,完全獨立於宿主機的進程。

所以Docker是容器技術的一種實現,也是操作系統層面的一種虛擬化,與虛擬機通過一套硬件再安裝操作系統完全不同。

10分鐘快速掌握Docker必備基礎知識

docker容器與系統關係示意圖

Docker與虛擬機之間的比較

Docker是在操作系統進程層面的隔離,而虛擬機是在物理資源層面的隔離,兩者完全不同,另外,我們也可以通過下面的一個比較,瞭解兩者的根本性差異。

10分鐘快速掌握Docker必備基礎知識

容器與虛擬機的比較【摘自《Docker-從入門到實踐》】

從上面的容器與虛擬機的對比中,我們明白了容器技術的優勢。

容器解決了開發與生產環境的問題

開發環境與生產環境折射的是開發人員與運維人員之間的矛盾,也許我們常常會聽到開發人員對運維人員說的這樣一句話:“在我的電腦運行沒問題,怎麼到了你那裡就出問題了,肯定是你的問題”,而運維人員則認為是開發人員的問題。

開發人員需要在本機安裝各種各樣的測試環境,因此開發的項目需要軟件越多,依賴越多,安裝的環境也就越複雜。

同樣的,運維人員需要為開發人員開發的項目提供生產環境,而運維人員除了應對軟件之間的依賴,還需要考慮安裝軟件與硬件之間的兼容性問題。

就是這樣,所以我們經常看到開發與運維相互甩鍋,怎麼解決這個問題呢?

容器就是一個不錯的解決方案,容器能成為開發與運維之間溝通的語言,因為容器就像一個集裝箱一樣,提供了軟件運行的最小化環境,將應用與其需要的環境一起打包成為鏡像,便可以在開發與運維之間溝通與傳輸。

10分鐘快速掌握Docker必備基礎知識

Docker的版本

Docker分為社區版(CE)和企業版(EE)兩個版本,社區版本可以免費使用,而企業版則需要付費使用,對於我們個人開發者或小企業來說,一般是使用社區版的。

Docker CE有三個更新頻道,分別為stable、test、nightly,stable是穩定版本,test是測試後的預發佈版本,而nightly則是開發中準備在下一個版本正式發佈的版本,我們可以根據自己的需求下載安裝。

如何安裝Docker?

好了,通過前面的介紹,我們應該對Docker有了初步的瞭解,下面開始進入Docker的學習之旅了。

而學習Docker的第一步,從安裝Docker運行環境開始,我們以Docker的社區版本(CE)安裝為例。

Docker社區版本提供了Mac OS,Microsoft Windows和Linux(Centos,Ubuntu,Fedora,Debian)等操作系統的安裝包,同時也支持在雲服務器上的安裝,比如AWS Cloud。

在Windows系統上安裝

Docker Desktop for Windows

Docker為Windows提供了一個桌面應用程序管理的安裝包(Docker Desktop for Windows),不過對系統有以下幾點要求:

  1. 必須是64位Windows10專業版,企業版,教育版,構建在15063或更高版本,
  2. 在BIOS中啟用虛擬化。通常,默認情況下啟用虛擬化。
  3. 至少有4GB內存。
  4. CPU支持SLAT。

如果操作系統滿足上面的要求,則可以直接下載安裝包直接安裝,在安裝成功後,Docker並不會自動啟動,需要我們自己啟動,我們可以在開始菜單中找到Docker,如下圖,單擊啟動便可啟動。

10分鐘快速掌握Docker必備基礎知識

Docker Toolbox

如果系統達不到上面的要求,比如說你用的是Windows 7操作系統,這時候要想使用Docker,便需要藉助Docker Toolbox,Docker Toolbox是Docker提供的在比較舊的Mac OS,Windows操作系統上安裝Docker環境的工具集。

Docker Toolbox包括docker-cli(就是我們在終端使用的docker命令行工具),docker-compose(多容器管理工具),docker-mecahine,VirtualBox(虛擬機),Kitematic(docker的GUI管理工具)。

本質上使用Docker Toolbox安裝Docker環境,實際上是在VirtualBox中創建一個Linux虛擬機,並在虛擬機上安裝Docker。

另外,在安裝過程中會開啟Windows的Hyper-V模塊(Windows操作系統實現虛擬化的一種技術),這裡面有個要注意的點是如果開啟了Hyper-V,則VirtualBox不再生效了。

在Mac OS上安裝

如同Windows操作系統一樣,Docker為Mac OS也一樣提供一個桌面應用程序(Docker Desktop for Mac),比較簡單,從docker官網上下載Dokcer.dmg安裝,打開Docker.dmg,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

直接拖動Docker圖標便完成了安裝。

對於比較老的Mac OS操作系統,也可以像Windows一樣,使用Docker Toolbox,這點可以參考上面的介紹。

在Mac OS上安裝完成之後,在Application中找到Docker圖標,雙擊打開便可以啟動Docker了,如下:

10分鐘快速掌握Docker必備基礎知識

在Linux上安裝

在Linux操作系統上的安裝,主要以Centos7為例,其他Linux系統的發行版本,如Ubuntu,Debian,Fedora等,可以自行查詢Docker的官方文檔

刪除舊的docker版本

可能有些Linux預先安裝Docker,但一般版本比較舊,所以可以先執行以下代碼來刪除舊版本的Docker。

$ sudo dnf remove docker \\

docker-client \\

docker-client-latest \\

docker-common \\

docker-latest \\

docker-latest-logrotate \\

docker-logrotate \\

docker-selinux \\

docker-engine-selinux \\

docker-engine

指定安裝版本

$ sudo yum-config-manager \\

--add-repo \\

https://download.docker.com/linux/centos/docker-ce.repo

使用yum安裝docker

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

啟動docker服務器

# 啟動docker守護進程

$ sudo systemctl start docker

測試安裝是否成功

通過上面幾種方式安裝了Docker之後,我們可以通過下面的方法來檢測安裝是否成功。

打印docker版本

# 打印docker版本

$ docker version

拉取鏡像並運行容器

# 拉取hello-world鏡像

docker pull hello-world

# 使用hello-world運行一個容器

docker run hello-world

運行上面的命令之後,如果有如下圖所示的輸出結果,則說明安裝已經成功了。

10分鐘快速掌握Docker必備基礎知識

Docker的基本概念

鏡像(Image)、容器(Container)與倉庫(Repository),這三個是docker中最基本也是最核心的概念,對這三個概念的掌握與理解,是學習docker的關鍵。

鏡像(Image)

什麼是Docker的鏡像?

Docker本質上是一個運行在Linux操作系統上的應用,而Linux操作系統分為內核和用戶空間,無論是Centos還是Ubuntu,都是在啟動內核之後,通過掛載Root文件系統來提供用戶空間的,而Docker鏡像就是一個Root文件系統

Docker鏡像是一個特殊的文件系統,提供容器運行時所需的程序、庫、資源、配置等文件,另外還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。

鏡像是一個靜態的概念,不包含任何動態數據,其內容在構建之後也不會被改變。

下面的命令是一些對鏡像的基本操作,如下:

查看鏡像列表

# 列出所有鏡像

docker image ls

由於我們前面已經拉取了hello-world鏡像,所以會輸出下面的內容:

REPOSITORY TAG IMAGE ID CREATED SIZE

hello-world latest fce289e99eb9 7 months ago 1.84kB

下面的命令也一樣可以查看本地的鏡像列表,而且寫法更簡潔。

# 列表所有鏡像

docker images

從倉庫拉取鏡像

前面我們已經演示過使用docker pull命令拉取了hello-world鏡像了,當然使用docker image pull命令也是一樣的。

一般默認是從Docker Hub上拉取鏡像的,Docker Hub是Docker官方提供的鏡像倉庫服務(Docker Registry),有大量官方或第三方鏡像供我們使用,比如我們可以在命令行中輸入下面的命令直接拉取一個Centos鏡像:

docker pull centos

docker pull命令的完整寫法如下:

docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標籤]

拉取一個鏡像,需要指定Docker Registry的地址和端口號,默認是Docker Hub,還需要指定倉庫名和標籤,倉庫名和標籤唯一確定一個鏡像,而標籤是可能省略,如果省略,則默認使用latest作為標籤名,另外,倉庫名則由作者名和軟件名組成。

那麼,我們上面使用centos,那是因為省略作者名,則作者名library,表示Docker官方的鏡像,所以上面的命令等同於:

docker pull library/centos:latest

因此,如果拉取非官方的第三方鏡像,則需要指定完整倉庫名,如下:

docker pull mysql/mysql-server:latest

運行鏡像

使用docker run命令,可以通過鏡像創建一個容器,如下:

docker run -it centos /bin/bash

刪除鏡像

當本地有些鏡像我們不需要時,那我們也可以刪除該鏡像,以節省存儲空間,不過要注意,如果有使用該鏡像創建的容器未刪除,則不允許刪除鏡像。

# image_name表示鏡像名,image_id表示鏡像id

dockere image rm image_name/image_id

刪除鏡像的快捷命令:

docker rmi image_name/image_id

好了,關於Docker鏡像的相關知識,我們就簡單地介紹到這裡,有機會的話,我們單獨寫一篇文章來談談,特別構建Docker鏡像部分的相關知識,有必要深入再學習一下。

容器(Container)

Docker的鏡像是用於生成容器的模板,鏡像分層的,鏡像與容器的關係,就是面向對象編程中類與對象的關係,我們定好每一個類,然後使用類創建對象,對應到Docker的使用上,則是構建好每一個鏡像,然後使用鏡像創建我們需要的容器。

啟動和停止容器

啟動容器有兩種方式,一種是我們前面已經介紹過的,使用docker run命令通過鏡像創建一個全新的容器,如下:

docker run hello-world

另外一種啟動容器的方式就是啟動一個已經停止運行的容器:

# container_id表示容器的id

docker start container_id

要停止正在運行的容器可以使用docker container stop或docker stop命令,如下:

# container_id表示容器的id

docker stop container_id

查看所有容器

如果要查看本地所有的容器,可以使用docker container ls命令:

# 查看所有容器

docker container ls

查看所有容器也有簡潔的寫法,如下:

# 查看所有容器

docker ps

刪除容器

我們也可以使用docker container rm命令,或簡潔的寫法docker rm命令來刪除容器,不過不允許刪除正在運行的容器,因此如果要刪除的話,就必須先停止容器,

# container_id表示容器id,通過docker ps可以看到容器id

$ docker rm container_id

當我們需要批量刪除所有容器,可以用下面的命令:

# 刪除所有容器

docker rm $(docker ps -q)

# 刪除所有退出的容器

docker container prune

進入容器

# 進入容器,container_id表示容器的id,command表示linux命令,如/bin/bash

docker exec -it container_id command

倉庫(Repository)

在前面的例子中,我們使用兩種方式構建鏡像,構建完成之後,可以在本地運行鏡像,生成容器,但如果在更多的服務器運行鏡像呢?很明顯,這時候我們需要一個可以讓我們集中存儲和分發鏡像的服務,就像Github可以讓我們自己存儲和分發代碼一樣。

Docker Hub就是Docker提供用於存儲和分佈鏡像的官方Docker Registry,也是默認的Registry,其網址為https://hub.docker.com,前面我們使用docker pull命令便從Docker Hub上拉取鏡像。

Docker Hub有很多官方或其他開發提供的高質量鏡像供我們使用,當然,如果要將我們自己構建的鏡像上傳到Docker Hub上,我們需要在Docker Hub上註冊一個賬號,然後把自己在本地構建的鏡像發送到Docker Hub的倉庫當中,Docker Registry包含很多個倉庫,每個倉庫對應多個標籤,不同標籤對應一個軟件的不同版本。

Docker的組成與架構

在安裝好並啟動了Docker之後,我們可以使用在命令行中使用docker命令操作docker,比如我們使用如下命令打印docker的版本信息。

docker verion

其結果如下:

10分鐘快速掌握Docker必備基礎知識

從上面的圖中,我們看到打出了兩個部分的信息:Client和Server。

這是因為Docker跟大部分服務端軟件一樣(如MySQL),都是使用C/S的架構模型,也就是通過客戶端調用服務器,只是我們現在剛好服務端和客戶端都在同一臺機器上而已。

因此,我們可以使用下面的圖來表示Docker的架構,DOCKER_HOST是Docker server,而Clinet便是我們在命令中使用docker命令。

10分鐘快速掌握Docker必備基礎知識

Docker Engine

docker server為客戶端提供了容器、鏡像、數據卷、網絡管理等功能,其實,這些功能都是由Docker Engine來實現的。

  1. dockerd:服務器守護進程。
  2. Client docker Cli:命令行接口
  3. REST API:除了cli命令行接口,也可以通過REST API調用docker

下面是Docker Engine的示例圖:

"

專注於Java領域優質技術,歡迎關注

作者:張君鴻

Docker是時下熱門的容器技術,相信作為一名開發人員,你一定聽說過或者使用過,很多人會把Docker理解為一個輕量級虛擬機,但其實Docker與虛擬機(VM)是兩種不同的計算機虛擬化技術,也有很多人會覺得,有了虛擬機,那為什麼還要使用Docker呢?

帶著心裡的一點點疑問,讓我們一起來學習Docker吧。

沒有虛擬化技術的原始年代

我們仔細想想,在沒有計算虛擬化技術的“遠古”年代,如果我們要部署一個應用程序(Application),一般的步驟是怎麼樣的?

第一步肯定是先要準備一臺物理服務器,然後在物理服務器上安裝一個操作系統(Operating System),有了操作系統之後,便在操作系統上安裝運行我們的應用程序,這個過程可以用下面的圖來表示:

10分鐘快速掌握Docker必備基礎知識

物理服務器部署應用示意圖

那麼,這種方式有什麼問題呢?其實,在物理機上部署應用有以下幾個缺點:

  • 部署非常慢:因為我們得先準備硬件服務器,接著還要安裝操作系統,然後再部署應用程序,而且應用程序還有很多的依賴軟件,所以這個過程是比較慢的。
  • 成本非常高:主要是物理器成本太高,即使是部署一個簡單的應用,也需要一臺服務器。
  • 資源浪費:如果應用太簡單,也容易浪費硬件資源,比如CPU和內存
  • 遷移和擴展太慢:如果需要遷移應用,或者擴展應用,都要再準備其他的物理服務器,過程很麻煩,也很慢。

那麼有什麼辦法可以解決這些問題呢?答案便是虛擬化技術。

使用虛擬機部署應用程序的年代

什麼是虛擬化技術

談到計算機的虛擬化技術,我們直接想到的便是虛擬機,虛擬機允許我們在一臺物理計算機模擬出多臺機器,簡單地理解,虛擬化技術就是在一臺物理計算機上,通過中間虛擬軟件層Hypervisor隔離CPU、內存等硬件資源,虛擬出多臺虛擬服務器,這樣做的話,一臺物理服務器便可以安裝多個應用程序,達到資源利用的最大化,而且多個應用之間相互隔離,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

虛擬機上部署應用示意圖

虛擬機的優點

  • 可以把資源分配到不同的虛擬機,達到硬件資源的最大化利用
  • 與直接在物理機上部署應用,虛擬機更容易擴展應用。
  • 雲服務:通過虛擬機虛擬出不同的物理資源,可以快速搭建雲服務。

虛擬機的不足之處

虛擬機的不足之處在於對物理服務器資源的消耗,當我們在物理服務器創建一臺虛擬機時,便需要虛擬出一套硬件並在上面運行完整的操作系統,每臺虛擬機都佔用許多的服務器資源。

Docker是什麼?

相對於虛擬機的笨重,Docker則更顯得輕量化,因此不會佔用太多的系統資源。

Docker是使用時下很火的Golang語言進行開發的,其技術核心是Linux內核的Cgroup,Namespace和AUFS類的Union FS等技術,這些技術都是Linux內核中早已存在很多年的技術,所以嚴格來說Docker並不是一個完全創新的技術,Docker通過這些底層的Linux技術,對Linux進程進行封裝隔離,而被隔離的進程也被稱為容器,完全獨立於宿主機的進程。

所以Docker是容器技術的一種實現,也是操作系統層面的一種虛擬化,與虛擬機通過一套硬件再安裝操作系統完全不同。

10分鐘快速掌握Docker必備基礎知識

docker容器與系統關係示意圖

Docker與虛擬機之間的比較

Docker是在操作系統進程層面的隔離,而虛擬機是在物理資源層面的隔離,兩者完全不同,另外,我們也可以通過下面的一個比較,瞭解兩者的根本性差異。

10分鐘快速掌握Docker必備基礎知識

容器與虛擬機的比較【摘自《Docker-從入門到實踐》】

從上面的容器與虛擬機的對比中,我們明白了容器技術的優勢。

容器解決了開發與生產環境的問題

開發環境與生產環境折射的是開發人員與運維人員之間的矛盾,也許我們常常會聽到開發人員對運維人員說的這樣一句話:“在我的電腦運行沒問題,怎麼到了你那裡就出問題了,肯定是你的問題”,而運維人員則認為是開發人員的問題。

開發人員需要在本機安裝各種各樣的測試環境,因此開發的項目需要軟件越多,依賴越多,安裝的環境也就越複雜。

同樣的,運維人員需要為開發人員開發的項目提供生產環境,而運維人員除了應對軟件之間的依賴,還需要考慮安裝軟件與硬件之間的兼容性問題。

就是這樣,所以我們經常看到開發與運維相互甩鍋,怎麼解決這個問題呢?

容器就是一個不錯的解決方案,容器能成為開發與運維之間溝通的語言,因為容器就像一個集裝箱一樣,提供了軟件運行的最小化環境,將應用與其需要的環境一起打包成為鏡像,便可以在開發與運維之間溝通與傳輸。

10分鐘快速掌握Docker必備基礎知識

Docker的版本

Docker分為社區版(CE)和企業版(EE)兩個版本,社區版本可以免費使用,而企業版則需要付費使用,對於我們個人開發者或小企業來說,一般是使用社區版的。

Docker CE有三個更新頻道,分別為stable、test、nightly,stable是穩定版本,test是測試後的預發佈版本,而nightly則是開發中準備在下一個版本正式發佈的版本,我們可以根據自己的需求下載安裝。

如何安裝Docker?

好了,通過前面的介紹,我們應該對Docker有了初步的瞭解,下面開始進入Docker的學習之旅了。

而學習Docker的第一步,從安裝Docker運行環境開始,我們以Docker的社區版本(CE)安裝為例。

Docker社區版本提供了Mac OS,Microsoft Windows和Linux(Centos,Ubuntu,Fedora,Debian)等操作系統的安裝包,同時也支持在雲服務器上的安裝,比如AWS Cloud。

在Windows系統上安裝

Docker Desktop for Windows

Docker為Windows提供了一個桌面應用程序管理的安裝包(Docker Desktop for Windows),不過對系統有以下幾點要求:

  1. 必須是64位Windows10專業版,企業版,教育版,構建在15063或更高版本,
  2. 在BIOS中啟用虛擬化。通常,默認情況下啟用虛擬化。
  3. 至少有4GB內存。
  4. CPU支持SLAT。

如果操作系統滿足上面的要求,則可以直接下載安裝包直接安裝,在安裝成功後,Docker並不會自動啟動,需要我們自己啟動,我們可以在開始菜單中找到Docker,如下圖,單擊啟動便可啟動。

10分鐘快速掌握Docker必備基礎知識

Docker Toolbox

如果系統達不到上面的要求,比如說你用的是Windows 7操作系統,這時候要想使用Docker,便需要藉助Docker Toolbox,Docker Toolbox是Docker提供的在比較舊的Mac OS,Windows操作系統上安裝Docker環境的工具集。

Docker Toolbox包括docker-cli(就是我們在終端使用的docker命令行工具),docker-compose(多容器管理工具),docker-mecahine,VirtualBox(虛擬機),Kitematic(docker的GUI管理工具)。

本質上使用Docker Toolbox安裝Docker環境,實際上是在VirtualBox中創建一個Linux虛擬機,並在虛擬機上安裝Docker。

另外,在安裝過程中會開啟Windows的Hyper-V模塊(Windows操作系統實現虛擬化的一種技術),這裡面有個要注意的點是如果開啟了Hyper-V,則VirtualBox不再生效了。

在Mac OS上安裝

如同Windows操作系統一樣,Docker為Mac OS也一樣提供一個桌面應用程序(Docker Desktop for Mac),比較簡單,從docker官網上下載Dokcer.dmg安裝,打開Docker.dmg,如下圖所示:

10分鐘快速掌握Docker必備基礎知識

直接拖動Docker圖標便完成了安裝。

對於比較老的Mac OS操作系統,也可以像Windows一樣,使用Docker Toolbox,這點可以參考上面的介紹。

在Mac OS上安裝完成之後,在Application中找到Docker圖標,雙擊打開便可以啟動Docker了,如下:

10分鐘快速掌握Docker必備基礎知識

在Linux上安裝

在Linux操作系統上的安裝,主要以Centos7為例,其他Linux系統的發行版本,如Ubuntu,Debian,Fedora等,可以自行查詢Docker的官方文檔

刪除舊的docker版本

可能有些Linux預先安裝Docker,但一般版本比較舊,所以可以先執行以下代碼來刪除舊版本的Docker。

$ sudo dnf remove docker \\

docker-client \\

docker-client-latest \\

docker-common \\

docker-latest \\

docker-latest-logrotate \\

docker-logrotate \\

docker-selinux \\

docker-engine-selinux \\

docker-engine

指定安裝版本

$ sudo yum-config-manager \\

--add-repo \\

https://download.docker.com/linux/centos/docker-ce.repo

使用yum安裝docker

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

啟動docker服務器

# 啟動docker守護進程

$ sudo systemctl start docker

測試安裝是否成功

通過上面幾種方式安裝了Docker之後,我們可以通過下面的方法來檢測安裝是否成功。

打印docker版本

# 打印docker版本

$ docker version

拉取鏡像並運行容器

# 拉取hello-world鏡像

docker pull hello-world

# 使用hello-world運行一個容器

docker run hello-world

運行上面的命令之後,如果有如下圖所示的輸出結果,則說明安裝已經成功了。

10分鐘快速掌握Docker必備基礎知識

Docker的基本概念

鏡像(Image)、容器(Container)與倉庫(Repository),這三個是docker中最基本也是最核心的概念,對這三個概念的掌握與理解,是學習docker的關鍵。

鏡像(Image)

什麼是Docker的鏡像?

Docker本質上是一個運行在Linux操作系統上的應用,而Linux操作系統分為內核和用戶空間,無論是Centos還是Ubuntu,都是在啟動內核之後,通過掛載Root文件系統來提供用戶空間的,而Docker鏡像就是一個Root文件系統

Docker鏡像是一個特殊的文件系統,提供容器運行時所需的程序、庫、資源、配置等文件,另外還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。

鏡像是一個靜態的概念,不包含任何動態數據,其內容在構建之後也不會被改變。

下面的命令是一些對鏡像的基本操作,如下:

查看鏡像列表

# 列出所有鏡像

docker image ls

由於我們前面已經拉取了hello-world鏡像,所以會輸出下面的內容:

REPOSITORY TAG IMAGE ID CREATED SIZE

hello-world latest fce289e99eb9 7 months ago 1.84kB

下面的命令也一樣可以查看本地的鏡像列表,而且寫法更簡潔。

# 列表所有鏡像

docker images

從倉庫拉取鏡像

前面我們已經演示過使用docker pull命令拉取了hello-world鏡像了,當然使用docker image pull命令也是一樣的。

一般默認是從Docker Hub上拉取鏡像的,Docker Hub是Docker官方提供的鏡像倉庫服務(Docker Registry),有大量官方或第三方鏡像供我們使用,比如我們可以在命令行中輸入下面的命令直接拉取一個Centos鏡像:

docker pull centos

docker pull命令的完整寫法如下:

docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標籤]

拉取一個鏡像,需要指定Docker Registry的地址和端口號,默認是Docker Hub,還需要指定倉庫名和標籤,倉庫名和標籤唯一確定一個鏡像,而標籤是可能省略,如果省略,則默認使用latest作為標籤名,另外,倉庫名則由作者名和軟件名組成。

那麼,我們上面使用centos,那是因為省略作者名,則作者名library,表示Docker官方的鏡像,所以上面的命令等同於:

docker pull library/centos:latest

因此,如果拉取非官方的第三方鏡像,則需要指定完整倉庫名,如下:

docker pull mysql/mysql-server:latest

運行鏡像

使用docker run命令,可以通過鏡像創建一個容器,如下:

docker run -it centos /bin/bash

刪除鏡像

當本地有些鏡像我們不需要時,那我們也可以刪除該鏡像,以節省存儲空間,不過要注意,如果有使用該鏡像創建的容器未刪除,則不允許刪除鏡像。

# image_name表示鏡像名,image_id表示鏡像id

dockere image rm image_name/image_id

刪除鏡像的快捷命令:

docker rmi image_name/image_id

好了,關於Docker鏡像的相關知識,我們就簡單地介紹到這裡,有機會的話,我們單獨寫一篇文章來談談,特別構建Docker鏡像部分的相關知識,有必要深入再學習一下。

容器(Container)

Docker的鏡像是用於生成容器的模板,鏡像分層的,鏡像與容器的關係,就是面向對象編程中類與對象的關係,我們定好每一個類,然後使用類創建對象,對應到Docker的使用上,則是構建好每一個鏡像,然後使用鏡像創建我們需要的容器。

啟動和停止容器

啟動容器有兩種方式,一種是我們前面已經介紹過的,使用docker run命令通過鏡像創建一個全新的容器,如下:

docker run hello-world

另外一種啟動容器的方式就是啟動一個已經停止運行的容器:

# container_id表示容器的id

docker start container_id

要停止正在運行的容器可以使用docker container stop或docker stop命令,如下:

# container_id表示容器的id

docker stop container_id

查看所有容器

如果要查看本地所有的容器,可以使用docker container ls命令:

# 查看所有容器

docker container ls

查看所有容器也有簡潔的寫法,如下:

# 查看所有容器

docker ps

刪除容器

我們也可以使用docker container rm命令,或簡潔的寫法docker rm命令來刪除容器,不過不允許刪除正在運行的容器,因此如果要刪除的話,就必須先停止容器,

# container_id表示容器id,通過docker ps可以看到容器id

$ docker rm container_id

當我們需要批量刪除所有容器,可以用下面的命令:

# 刪除所有容器

docker rm $(docker ps -q)

# 刪除所有退出的容器

docker container prune

進入容器

# 進入容器,container_id表示容器的id,command表示linux命令,如/bin/bash

docker exec -it container_id command

倉庫(Repository)

在前面的例子中,我們使用兩種方式構建鏡像,構建完成之後,可以在本地運行鏡像,生成容器,但如果在更多的服務器運行鏡像呢?很明顯,這時候我們需要一個可以讓我們集中存儲和分發鏡像的服務,就像Github可以讓我們自己存儲和分發代碼一樣。

Docker Hub就是Docker提供用於存儲和分佈鏡像的官方Docker Registry,也是默認的Registry,其網址為https://hub.docker.com,前面我們使用docker pull命令便從Docker Hub上拉取鏡像。

Docker Hub有很多官方或其他開發提供的高質量鏡像供我們使用,當然,如果要將我們自己構建的鏡像上傳到Docker Hub上,我們需要在Docker Hub上註冊一個賬號,然後把自己在本地構建的鏡像發送到Docker Hub的倉庫當中,Docker Registry包含很多個倉庫,每個倉庫對應多個標籤,不同標籤對應一個軟件的不同版本。

Docker的組成與架構

在安裝好並啟動了Docker之後,我們可以使用在命令行中使用docker命令操作docker,比如我們使用如下命令打印docker的版本信息。

docker verion

其結果如下:

10分鐘快速掌握Docker必備基礎知識

從上面的圖中,我們看到打出了兩個部分的信息:Client和Server。

這是因為Docker跟大部分服務端軟件一樣(如MySQL),都是使用C/S的架構模型,也就是通過客戶端調用服務器,只是我們現在剛好服務端和客戶端都在同一臺機器上而已。

因此,我們可以使用下面的圖來表示Docker的架構,DOCKER_HOST是Docker server,而Clinet便是我們在命令中使用docker命令。

10分鐘快速掌握Docker必備基礎知識

Docker Engine

docker server為客戶端提供了容器、鏡像、數據卷、網絡管理等功能,其實,這些功能都是由Docker Engine來實現的。

  1. dockerd:服務器守護進程。
  2. Client docker Cli:命令行接口
  3. REST API:除了cli命令行接口,也可以通過REST API調用docker

下面是Docker Engine的示例圖:

10分鐘快速掌握Docker必備基礎知識

小結

作為一名開發人員,在學習或開發過程中,總需要安裝各種各樣的開發環境,另外,一個技術團隊在開發項目的過程,也常常需要統一開發環境,這樣可能避免環境不一致引發的一些問題。

雖然使用虛擬機可以解決上面的問題,但虛擬機太重,對宿主機資源消耗太大,而作為輕量級容器技術,Docker可以簡單輕鬆地解決上述問題,讓開發環境的安裝以及應用的部署變得非常簡單,而且使用Docker,比在虛擬機安裝操作系統,要簡單得多。

來自掘金,https://juejin.im/entry/5d58ef75e51d4561c02a2529

"

相關推薦

推薦中...