三文搞懂學會Docker容器技術(上)

三文搞懂學會Docker容器技術(上)

1,Docker簡介

  1.1 Docker是什麼?

Docker官網: https://www.docker.com/

Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
Docker 從 17.03 版本之後分為 CE(Community Edition: 社區版) 和 EE(Enterprise Edition: 企業版),我們用社區版就可以了。

  1.2 Docker架構原理?

 

Docker三要素,鏡像,容器,倉庫

1.鏡像

Docker 鏡像(Image)就是一個只讀的模板,它可以是一個可運行軟件(tomcat,mysql),也可以是一個系統(centos)。鏡像可以用來創建 Docker 容器,一個鏡像可以創建很多容器。

2.容器

Docker 利用容器(Container)獨立運行的一個或一組應用。容器是用鏡像創建的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平台。可以把容器看做是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。容器的定義和鏡像幾乎一模一樣,也是一堆層的統一視角,唯一區別在於容器的最上面那一層是可讀可寫的。

3.倉庫

倉庫(Repository)是集中存放鏡像文件的場所,類似GitHub存放項目代碼一樣,只不過Docker Hub是由來存鏡像(image)的。倉庫(Repository)和倉庫註冊服務器(Registry)是有區別的。倉庫註冊服務器上往往存放着多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標籤(tag,類似版本號)。

倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。

最大的公開倉庫是 Docker Hub(https://hub.docker.com/),存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括阿里雲 、網易雲 等。

 

容器與鏡像的關係類似於面向對象編程中的對象與類。

Docker 面向對象
容器 對象
鏡像

  1.3 Docker有什麼用?

    1,簡化環境搭建,提高開發生命周期效率;

    2,大大簡化運維工作量;

    3,微服務利器;

  1.4 Docker容器與虛擬機區別?

Docker是一種輕量級的虛擬化技術,比傳統的虛擬機性能更好。

下圖是虛擬機的體繫結構:

 

  • server – 表示真實電腦。
  • Host OS – 真實電腦的操作系統,例如:Windows,Linux
  • Hypervisor – 虛擬機平台,模擬硬件,如VMWare,VirtualBox
  • Guest OS – 虛擬機平台上安裝的操作系統,例如CentOS Linux
  • App – 虛擬機操作系統上的應用,例如nginx

 

下圖是Docker的體繫結構:

  • server – 表示真實電腦。
  • Host OS – 真實電腦的操作系統,例如:Windows,Linux
  • Docker Engine – 新一代虛擬化技術,不需要包含單獨的操作系統。
  • App – 所有的應用程序現在都作為Docker容器運行。

 

這種體繫結構的明顯優勢是,不需要為虛擬機操作系統提供硬件模擬。所有應用程序都作為Docker容器工作,性能更好。

  Docker容器 虛擬機(VM)
操作系統 與宿主機共享OS 宿主機OS上運行宿主機OS
存儲大小 鏡像小,便於存儲與傳輸 鏡像龐大(vmdk等)
運行性能 幾乎無額外性能損失 操作系統額外的cpu、內存消耗
移植性 輕便、靈活、適用於Linux 笨重、與虛擬化技術耦合度高
硬件親和性  面向軟件開發者 面向硬件運維者

 

Docker優點:輕量級,速度快,運行應用隔離,方便維護…

2,Docker安裝

  2.1 Docker版本介紹

Docker從1.13版本之後採用時間線的方式作為版本號,分為社區版CE和企業版EE。

社區版是免費提供給個人開發者和小型團體使用的,企業版會提供額外的收費服務,比如經過官方測試認證過的基礎設施、容器、插件等。

社區版按照stable和edge兩種方式發布,每個季度更新stable版本,如17.06,17.09;每個月份更新edge版本,如17.09,17.10。

我們平時用社區版就足夠了。所以我們安裝社區版;

  2.2 Docker安裝官方文檔

我們主要參考:https://docs.docker.com/install/linux/docker-ce/centos/  來安裝;

  2.3 工具準備

前置課程:Centos課程  http://www.java1234.com/javaxuexiluxiantu.html

打包下載: http://pan.baidu.com/s/1i55jJAt

虛擬機 VMware

centos7安裝下虛擬機VM上;

連接工具 才用 FinalShell  官方地址:http://www.hostbuf.com/

  2.4 Docker安裝步驟

我們切換到root用戶

1、Docker 要求 CentOS 系統的內核版本高於 3.10 ,查看本頁面的前提條件來驗證你的CentOS 版本是否支持 Docker 。

通過 uname -r 命令查看你當前的內核版本

 $ uname -r

2、使用 root 權限登錄 Centos。確保 yum 包更新到最新。

$ yum update

3、卸載舊版本(如果安裝過舊版本的話)

$ yum remove docker  docker-common docker-selinux docker-engine

4、安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的

$ yum install -y yum-utils device-mapper-persistent-data lvm2

5、設置yum源

$ yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

6,安裝最新版本的Docker

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

7,啟動Docker並設置開機啟動

$ systemctl start docker

$ systemctl enable docker

8,驗證Docker

$ docker version

 

說明安裝OK;

9,Docker HelloWorld測試;

$ docker run hello-world

 

因為本地沒有這個鏡像,所以從遠程官方倉庫去拉取,下載;

然後我們再執行一次;

 

OK了

  2.5 Docker配置阿里雲鏡像倉庫

Docker默認遠程倉庫是 https://hub.docker.com/

比如我們下載一個大點的東西,龜速

 

由於是國外主機,類似Maven倉庫,慢得一腿,經常延遲,破損;

所以我們一般都是配置國內鏡像,比如阿里雲,網易雲等;推薦阿里雲,穩定點;

配置步驟如下:

1,登錄進入阿里雲鏡像服務中心,獲取鏡像地址

進入阿里雲容器鏡像服務地址:點這裏快速進入

使用你的淘寶賬號密碼登錄

 

這裏我們獲取鏡像地址;

2,在/etc/docker目錄下找到在daemon.json文件(沒有就新建),將下面內容寫入

{

 “registry-mirrors”: [“https://xxxxxxx.mirror.aliyuncs.com”]

}

3,重啟daemon

systemctl daemon-reload

4,重啟docker服務

systemctl restart docker

5,測試

由於速度太快,截圖都難;

 

3,HelloWorld運行原理

運行  docker run hello-world

本地倉庫未能找到該鏡像,然後去遠程倉庫尋找以及下載該鏡像;

然後我們再執行該命令:

出來了 Hellowold。我們具體來分析下 執行原理和過程;

從左到右 client客戶端,Docker運行主機,遠程倉庫;

docker build ,pull,run分別是 構建,拉取,運行命令,後面再細講;

中間Docker主機里有 Docker daemon主運行線程,以及Containers容器,容器里可以運行很多實例,(實例是從右側Images鏡像實例化出來的)Images是存儲再本地的鏡像文件,比如 Redis,Tomat這些鏡像文件;

右側是Registry鏡像倉庫,默認遠程鏡像倉庫 https://hub.docker.com/  不過是國外主機,下載很慢,不穩定,所以我們後面要配置成阿里雲倉庫鏡像地址,穩定快捷;

執行 docker run hello-world的過程看如下圖例:

 

 

 

4,Docker基本命令

   4.1 啟動Docker

           systemctl start docker

  4.2 停止Docker

         systemctl stop docker

  4.3 重啟Docker

       systemctl restart docker

  4.4 開機啟動Docker

     systemctl enable docker

  4.5 查看Docker概要信息

   docker info

  4.6 查看Docker幫助文檔

   docker –help

  4.7 查看Docker版本信息

     docker version

5,Docker鏡像

  5.1 docker images 列出本機所有鏡像

 

REPOSITORY 鏡像的倉庫源
TAG 鏡像的標籤(版本)同一個倉庫有多個TAG的鏡像,多個版本;我們用REPOSITORY:TAG來定義不同的鏡像;
IMAGE ID 鏡像ID,鏡像的唯一標識
CREATE 鏡像創建時間
SIZE 鏡像大小

OPTIONS 可選參數:

-a 显示所有鏡像(包括中間層)
q 只显示鏡像ID
-qa 可以組合
–digests 显示鏡像的摘要信息
–no-trunc 显示完整的鏡像信息 

 

  5.2 docker search 搜索鏡像

和 https://hub.docker.com/ 這裏的搜索效果一樣;

OPTIONS可選參數:

–no-trunc 显示完整的鏡像描述
-s 列出收藏數不小於指定值的鏡像
–automated 只列出Docker Hub自動構建類型的鏡像

 

 

 

  5.3 docker pull 下載鏡像

docker pull 鏡像名稱:[TAG]

注意:不加TAG,默認下載最新版本latest

  5.4 docker rmi 刪除鏡像

1,刪除單個:docker rmi 鏡像名稱:[TAG]

如果不寫TAG,默認刪除最新版本latest

有鏡像生成的容器再運行時候,會報錯,刪除失敗;

我們需要加 -f 強制刪除

2,刪除多個:docker rmi -f 鏡像名稱1:[TAG] 鏡像名稱2:[TAG]

中間空格隔開

3,刪除全部:docker rmi -f $(docker images -qa)

 

 

——————————————————————————————————————————

作者: java1234_小鋒

出處:https://www.cnblogs.com/java688/p/13132444.html

版權:本站使用「CC BY 4.0」創作共享協議,轉載請在文章明顯位置註明作者及出處。

——————————————————————————————————————————

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?