揭開docker的面紗——基礎理論梳理和安裝流程演示

揭開docker的面紗(基礎理論和安裝詳解)

前言

​ 本文將圍繞如下幾個方面來揭開docker的面紗:linux

  • 什麼是docker?
  • 爲何須要docker?
  • docker的核心概念

什麼是docker?

​ 基於Linux而言,docker是在其中運行應用的一款開源工具,能夠認爲是一種輕量級的虛擬機。docker的logo是一條載着集裝箱的鯨魚(舊版的logo),新版的logo則是直接簡化了細節,更改了顏色,以下圖。docker

揭開docker的面紗——基礎理論梳理和安裝流程演示

從圖片中就能夠看出來,docker的建立和開發者們的意圖。鯨魚——宿主機,塊狀箱——隔離的容器(後面介紹什麼是docker容器)。而docker的宗旨:Build、Ship and Run Any APP,Anywhere。具體而言,就是經過對應應用組件的封裝、發佈、部署、運行等生命週期的管理,從而達到應用組件級別的「一次封裝、到處運行」的目的。shell

​ 舉個例子就比如本身開發了一款應用軟件,但願它在任何地點,任什麼時候間、任何操做系統中均可以使用的時候,就能夠將它基於docker來實現。固然,對於docker而言,這個組件能夠是一個應用,也能夠是一個配置,甚至能夠是一個完整的操做系統。json

爲何須要docker?

​ 其實docker的出現對於開發人員是莫大的福音。設想目前或將來基於雲平臺的應用或軟件的開發,脫離了底層的硬件,而使用者須要在任什麼時候間、任何地點均可以獲取相關的資源,那麼docker即可以提供這樣的訴求。centos

下面直接給出docker容器與傳統虛擬機的比較安全

特性 Docker容器 虛擬機
啓動速度 秒級 分鐘級
計算機性能損耗 幾乎不損耗 損耗一半左右
性能 接近原生 弱之
系統支持量 上千個 幾十個
隔離性 資源限制 徹底隔離

​ docker核心解決的問題是利用容器實現相似VM的功能,從而以更加節省的硬件資源給用戶提供更多的計算資源,而且docker操做方便,還能夠經過Dockerfile配置文件支持靈活的自動化建立和部署。服務器

​ 接下來看一下Docker與傳統虛擬機架構的對比:網絡

揭開docker的面紗——基礎理論梳理和安裝流程演示

​ 經過上圖發現,虛擬機是在物理資源層面實現的隔離,相對於虛擬機,Docker是基於APP層面實現的隔離,而且省去了虛擬機操做系統,從而節省了一部分的系統資源。架構

​ Docker守護進程能夠直接與主操做系統進行通訊,爲各個Docker容器分配資源;它還能夠將容器與主操做系統隔離(爲了安全),並將各個容器互相隔離。虛擬機啓動須要數分鐘,而Docker容器能夠在數毫秒內啓動。因爲沒有臃腫的從操做系統,Docker能夠節省大量的磁盤空間以及其餘系統資源。app

​ 簡單來講,虛擬機和docker的區別就在於虛擬機須要經過Hypervisor對硬件資源也進行虛擬化,而docker是直接使用宿主機的硬件資源的,所以虛擬機的隔離性更加完全,而docker的隔離性次之。

Docker的核心概念

一、鏡像——image

​ 能夠理解爲相似咱們虛擬機中的快照,是建立容器的基礎,能夠說無鏡像,不容器。

二、容器——container

​ 基於鏡像建立的運行實例,能夠被啓動、中止和刪除。每一個容器之間都是相互隔離、互不可見的。

三、倉庫——repository

​ 保存鏡像的地方,能夠理解爲鏡像囤積地。能夠將本身建立的進行推送到倉庫中,方便隨時隨地拉取使用。

​ 倉庫註冊服務器(registry)是存放倉庫的地方,其中包含了多個倉庫,每一個倉庫中存放一類鏡像,而且使用不一樣的標籤(tag)來區分。目前最大的公共倉庫就是Docker Hub,其中存放了數量龐大的鏡像給用戶下載使用。

這邊補充說明一下docker架構:

​ Docker使用客戶端-服務器架構。Docker 客戶端與Docker 守護進程進行對話,該守護進程完成了構建,運行和分發Docker容器的繁重工做。Docker客戶端和守護程序能夠 在同一系統上運行,或者您能夠將Docker客戶端鏈接到遠程Docker守護程序。Docker客戶端和守護程序在UNIX套接字或網絡接口上使用REST API進行通訊。

架構圖示:

揭開docker的面紗——基礎理論梳理和安裝流程演示

Docker的安裝流程

基於Linux/Centos7的安裝部署流程以下:

操做系統版本:centos7.7

一、環境部署

[root@localhost ~]# hostnamectl  set-hostname docker
[root@localhost ~]# su
[root@docker ~]# cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)

[root@docker ~]# systemctl stop firewalld && systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@docker ~]# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
[root@docker ~]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf #開啓路由轉發
[root@docker ~]# sysctl -p #加載路由轉發功能
net.ipv4.ip_forward = 1
[root@docker ~]# systemctl restart network

二、安裝依賴包

[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
...
更新完畢:
  lvm2.x86_64 7:2.02.185-2.el7_7.2                                                                       

做爲依賴被升級:
  device-mapper.x86_64 7:1.02.158-2.el7_7.2             device-mapper-event.x86_64 7:1.02.158-2.el7_7.2 
  device-mapper-event-libs.x86_64 7:1.02.158-2.el7_7.2  device-mapper-libs.x86_64 7:1.02.158-2.el7_7.2  
  lvm2-libs.x86_64 7:2.02.185-2.el7_7.2                

完畢!

說明:

安裝yum-utils軟件包是爲了提供一個yum-config-manager單元,同時安裝的device-mapper-persistent-data和lvm2用於存儲設備映射必須的兩個軟件包。

三、設置穩定的存儲庫

[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加載插件:fastestmirror, langpacks
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@docker ~]# ls /etc/yum.repos.d/ #查看是否加入了一個docker源
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  docker-ce.repo

四、安裝docker引擎

[root@docker ~]# yum install -y docker-ce 
...
已安裝:
  docker-ce.x86_64 3:19.03.8-3.el7                                                                       

做爲依賴被安裝:
  container-selinux.noarch 2:2.107-3.el7              containerd.io.x86_64 0:1.2.13-3.1.el7             
  docker-ce-cli.x86_64 1:19.03.8-3.el7               

完畢!

五、建立docker目錄,配置鏡像加速服務

[root@docker ~]# mkdir /etc/docker -p
[root@docker ~]# tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://5m9y9qbl.mirror.aliyuncs.com"]
> }
> EOF
{
  "registry-mirrors": ["https://5m9y9qbl.mirror.aliyuncs.com"]
}

說明:tee命令——從標準輸入寫往文件和標準輸出,即把標準輸入的數據複製到每個文件FILE, 同時送往標準輸出。

六、開啓服務,查看版本

[root@docker ~]# systemctl daemon-reload 
[root@docker ~]# systemctl restart docker.service 
[root@docker ~]# docker -v
Docker version 19.03.8, build afacb8b

[root@docker ~]# docker version
Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b
 Built:             Wed Mar 11 01:27:04 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b
  Built:            Wed Mar 11 01:25:42 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

總結

​ 本文主要介紹了docker的做用,將之與傳統虛擬機進行特性對比,以及架構層面的對比,接着講述有關docker的核心三大組成,最終給出基於Linux下Centos7操做系統中docker的安裝流程。

相關文章
相關標籤/搜索