基于 Linux而言,docker是在其中運行應用的一款 開源工具,可以認為是一種輕量級的虛擬機。docker的logo是一條載著集裝箱的鯨魚(舊版的logo),新版的logo則是直接簡化了細節(jié),更改了顏色,如下圖。 |
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、虛擬主機、營銷軟件、網(wǎng)站建設、雙河網(wǎng)站維護、網(wǎng)站推廣。
從圖片中就可以看出來,docker的創(chuàng)建和開發(fā)者們的意圖。鯨魚——宿主機,塊狀箱——隔離的容器(后面介紹什么是docker容器)。而docker的宗旨:Build、Ship and Run Any APP,Anywhere。具體而言,就是通過對應應用組件的封裝、發(fā)布、部署、運行等生命周期的管理,從而達到應用組件級別的“一次封裝、處處運行”的目的。
舉個例子就好比自己開發(fā)了一款應用軟件,希望它在任何地點,任何時間、任何操作系統(tǒng)中都可以使用的時候,就可以將它基于docker來實現(xiàn)。當然,對于docker而言,這個組件可以是一個應用,也可以是一個配置,甚至可以是一個完整的操作系統(tǒng)。
其實docker的出現(xiàn)對于開發(fā)人員是莫大的福音。設想目前或未來基于云平臺的應用或軟件的開發(fā),脫離了底層的硬件,而使用者需要在任何時間、任何地點都可以獲取相關(guān)的資源,那么docker便可以提供這樣的訴求。
下面直接給出docker容器與傳統(tǒng)虛擬機的比較
特性 | Docker容器 | 虛擬機 |
---|---|---|
啟動速度 | 秒級 | 分鐘級 |
計算機性能損耗 | 幾乎不損耗 | 損耗一半左右 |
性能 | 接近原生 | 弱之 |
系統(tǒng)支持量 | 上千個 | 幾十個 |
隔離性 | 資源限制 | 完全隔離 |
docker核心解決的問題是利用容器實現(xiàn)類似VM的功能,從而以更加節(jié)省的硬件資源給用戶提供更多的計算資源,并且docker操作方便,還可以通過Dockerfile配置文件支持靈活的自動化創(chuàng)建和部署。
接下來看一下Docker與傳統(tǒng)虛擬機架構(gòu)的對比:
通過上圖發(fā)現(xiàn),虛擬機是在物理資源層面實現(xiàn)的隔離,相對于虛擬機,Docker是基于APP層面實現(xiàn)的隔離,并且省去了虛擬機操作系統(tǒng),從而節(jié)省了一部分的系統(tǒng)資源。
Docker守護進程可以直接與主操作系統(tǒng)進行通信,為各個Docker容器分配資源;它還可以將容器與主操作系統(tǒng)隔離(為了安全),并將各個容器互相隔離。虛擬機啟動需要數(shù)分鐘,而Docker容器可以在數(shù)毫秒內(nèi)啟動。由于沒有臃腫的從操作系統(tǒng),Docker可以節(jié)省大量的磁盤空間以及其他系統(tǒng)資源。
簡單來說,虛擬機和docker的區(qū)別就在于虛擬機需要通過Hypervisor對硬件資源也進行虛擬化,而docker是直接使用宿主機的硬件資源的,因此虛擬機的隔離性更加徹底,而docker的隔離性次之。
可以理解為類似我們虛擬機中的快照,是創(chuàng)建容器的基礎,可以說無鏡像,不容器。
基于鏡像創(chuàng)建的運行實例,可以被啟動、停止和刪除。每個容器之間都是相互隔離、互不可見的。
保存鏡像的地方,可以理解為鏡像囤積地??梢詫⒆约簞?chuàng)建的進行推送到倉庫中,方便隨時隨地拉取使用。
倉庫注冊服務器(registry)是存放倉庫的地方,其中包含了多個倉庫,每個倉庫中存放一類鏡像,并且使用不同的標簽(tag)來區(qū)分。目前最大的公共倉庫就是Docker Hub,其中存放了數(shù)量龐大的鏡像給用戶下載使用。
Docker使用客戶端-服務器架構(gòu)。Docker 客戶端與Docker 守護進程進行對話,該 守護進程完成了構(gòu)建,運行和分發(fā)Docker容器的繁重工作。Docker客戶端和守護程序 可以 在同一系統(tǒng)上運行,或者您可以將Docker客戶端連接到遠程Docker守護程序。Docker客戶端和守護程序在UNIX套接字或網(wǎng)絡接口上使用REST API進行通信。
架構(gòu)圖示:
基于Linux/ CentOS7的安裝部署流程如下:
操作系統(tǒng)版本: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 #開啟路由轉(zhuǎn)發(fā) [root@docker ~]# sysctl -p #加載路由轉(zhuǎn)發(fā)功能 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
[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 完畢!
[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 命令——從標準輸入寫往文件和標準輸出,即把標準輸入的數(shù)據(jù)復制到每一個文件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的作用,將之與傳統(tǒng)虛擬機進行特性對比,以及架構(gòu)層面的對比,接著講述有關(guān)docker的核心三大組成,最終給出基于Linux下Centos7操作系統(tǒng)中docker的安裝流程。
原文地址: https://www.linuxprobe.com/docker-logo.html