docker:
本身是容器:
容器可以保護(hù)內(nèi)容物
docker最初是dotCloud公司內(nèi)部的一個業(yè)余項目,基于谷歌公司推出的Go語言實現(xiàn)的
以前為了實現(xiàn)同一臺機上的各個應(yīng)用隔離,采用虛擬化技術(shù),但消耗資源過大
各應(yīng)用的隔離是通過namespace的隔離來實現(xiàn)的
玩容器保證linux內(nèi)核版本在3.8以上
user-操作進(jìn)程的用戶和用戶組實現(xiàn)隔離在內(nèi)核3.8版本才實現(xiàn)
docker引擎出道即巔峰,便捷,簡單,規(guī)范
1、Docker是什么?
Docker是一個虛擬環(huán)境容器,可以將你的開發(fā)環(huán)境、代碼、配置文件等一并打包到這個容器中,
并發(fā)布和應(yīng)用到任意平臺中。比如,你在本地用Python開發(fā)網(wǎng)站后臺,
開發(fā)測試完成后,就可以將Python3及其依賴包、Flask及其各種插件、Mysql、Nginx等打包到一個容器中,
然后部署到任意你想部署到的環(huán)境。
Docker的三個概念
鏡像(Image):類似于虛擬機中的鏡像,是一個包含有文件系統(tǒng)的面向Docker引擎的只讀模板。
任何應(yīng)用程序運行都需要環(huán)境,而鏡像就是用來提供這種運行環(huán)境的。
例如一個Ubuntu鏡像就是一個包含Ubuntu操作系統(tǒng)環(huán)境的模板,同理在該鏡像上裝上Apache軟件,
就可以稱為Apache鏡像。
容器(Container):類似于一個輕量級的沙盒,
可以將其看作一個極簡的Linux系統(tǒng)環(huán)境(包括root權(quán)限、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間等),
以及運行在其中的應(yīng)用程序。Docker引擎利用容器來運行、隔離各個應(yīng)用。
容器是鏡像創(chuàng)建的應(yīng)用實例,可以創(chuàng)建、啟動、停止、刪除容器,各個容器之間是是相互隔離的,互不影響。
注意:鏡像本身是只讀的,容器從鏡像啟動時,Docker在鏡像的上層創(chuàng)建一個可寫層,鏡像本身不變。
基于autofs
倉庫(Repository):類似于代碼倉庫,這里是鏡像倉庫,是Docker用來集中存放鏡像文件的地方。
注意與注冊服務(wù)器(Registry)的區(qū)別:注冊服務(wù)器是存放倉庫的地方,一般會有多個倉庫;
而倉庫是存放鏡像的地方,一般每個倉庫存放一類鏡像,每個鏡像利用tag進(jìn)行區(qū)分,
比如Ubuntu倉庫存放有多個版本(12.04、14.04等)的Ubuntu鏡像。
Docker的安裝和卸載
Docker可以安裝在Windows、Linux、Mac等各個平臺上。
具體可以查看文檔Install Docker。安裝完成之后,可以查看Docker的版本信息:
容器:鏡像運行時的實體
鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計中的類和實例一樣,鏡像是靜態(tài)的定義,
容器是鏡像運行時的實體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等 。
容器的實質(zhì)是進(jìn)程,但與直接在宿主執(zhí)行的進(jìn)程不同,
容器進(jìn)程運行于屬于自己的獨立的命名空間。前面講過鏡像使用的是分層存儲,容器也是如此。
容器存儲層的生存周期和容器一樣,容器消亡時,容器存儲層也隨之消亡。
因此,任何保存于容器存儲層的信息都會隨容器刪除而丟失。
按照 Docker 最佳實踐的要求,容器不應(yīng)該向其存儲層內(nèi)寫入任何數(shù)據(jù) ,
容器存儲層要保持無狀態(tài)化。
所有的文件寫入操作,都應(yīng)該使用數(shù)據(jù)卷(Volume)、或者綁定宿主目錄,
在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網(wǎng)絡(luò)存儲)發(fā)生讀寫,其性能和穩(wěn)定性更高。
數(shù)據(jù)卷的生存周期獨立于容器,容器消亡,數(shù)據(jù)卷不會消亡。因此, 使用數(shù)據(jù)卷后,
容器可以隨意刪除、重新 run,數(shù)據(jù)卻不會丟失。
注意:
容器在整個應(yīng)用程序生命周期工作流中提供以下優(yōu)點:隔離性、可移植性、靈活性、可伸縮性和可控性。
最重要的優(yōu)點是可在開發(fā)和運營之間提供隔離。
倉庫:集中存放鏡像文件的地方
鏡像構(gòu)建完成后,可以很容易的在當(dāng)前宿主上運行,但是, 如果需要在其他服務(wù)器上使用這個鏡像,
我們就需要一個集中的存儲、分發(fā)鏡像的服務(wù),Docker Registry 就是這樣的服務(wù)。
一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標(biāo)簽(Tag);
每個標(biāo)簽對應(yīng)一個鏡像。
所以說,鏡像倉庫是 Docker 用來集中存放鏡像文件的地方,類似于我們之前常用的代碼倉庫。
通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標(biāo)簽就常用于對應(yīng)該軟件的各個版本 。
我們可以通過<倉庫名>:<標(biāo)簽>的格式來指定具體是這個軟件哪個版本的鏡像。
如果不給出標(biāo)簽,將以 latest 作為默認(rèn)標(biāo)簽。
這里補充一下 Docker Registry 公開服務(wù)和私有 Docker Registry 的概念:
Docker Registry 公開服務(wù)是開放給用戶使用、允許用戶管理鏡像的 Registry 服務(wù)。
一般這類公開服務(wù)允許用戶免費上傳、下載公開的鏡像,并可能提供收費服務(wù)供用戶管理私有鏡像。
最常使用的 Registry 公開服務(wù)是官方的 Docker Hub ,這也是默認(rèn)的 Registry,
并擁有大量的高質(zhì)量的官方鏡像,網(wǎng)址為:hub.docker.com/ 。
在國內(nèi)訪問 Docker Hub 可能會比較慢,國內(nèi)也有一些云服務(wù)商提供類似于 Docker Hub 的公開服務(wù)。
除了使用公開服務(wù)外,用戶還可以在本地搭建私有 Docker Registry 。
Docker 官方提供了 Docker Registry 鏡像,可以直接使用做為私有 Registry 服務(wù)。
開源的 Docker Registry 鏡像只提供了 Docker Registry API 的服務(wù)端實現(xiàn),足以支持 Docker 命令,
不影響使用。但不包含圖形界面,以及鏡像維護(hù)、用戶管理、訪問控制等高級功能。
Docker的主要應(yīng)用場景
簡化配置
虛擬機的最大好處是能在你的硬件設(shè)施上運行各種配置不一樣的平臺(軟件、系統(tǒng)),
Docker在降低額外開銷的情況下提供了同樣的功能。它能讓你將運行環(huán)境和配置放在代碼中然后部署,
同一個Docker的配置可以在不同的環(huán)境中使用,這樣就降低了硬件要求和應(yīng)用環(huán)境之間耦合度。
簡單的來說,容器鏡像打包完成后,它就是個獨立的個體了,丟到哪里都能跑,而無需針對各個平臺去獨立配置。
代碼流水線(Code Pipeline)管理
前一個場景對于管理代碼的流水線起到了很大的幫助。代碼從開發(fā)者的機器到最終在生產(chǎn)環(huán)境上的部署,
需要經(jīng)過很多的中間環(huán)境。而每一個中間環(huán)境都有自己微小的差別,
Docker給應(yīng)用提供了一個從開發(fā)到上線均一致的環(huán)境,讓代碼的流水線變得簡單不少。
提高開發(fā)效率
不同的開發(fā)環(huán)境中,我們都想把兩件事做好。一是我們想讓開發(fā)環(huán)境盡量貼近生產(chǎn)環(huán)境,
二是我們想快速搭建開發(fā)環(huán)境。
使用Docker非常簡單的就能夠?qū)崿F(xiàn)這兩點,而且哪怕是開發(fā)環(huán)境的機器配置一般的情況下搭建多個生成服務(wù)應(yīng)用。
一臺一般配置服務(wù)器或開發(fā)機也能輕松的跑起多個Docker應(yīng)用,而無需額外增加機器配置。
因為Docker有個非常NB的特性,擁有虛擬化的特性,而幾乎沒有額外的開銷。
Docker改變了什么?
綜上所述,Docker到底改變了什么?筆者是這么理解的:
Docker改變了云服務(wù),使云服務(wù)的共融共通的理想逐步成為了可能。
并且Docker 已經(jīng)是云策略的一部分,許多開發(fā)者正在計劃使用 Docker 將業(yè)務(wù)遷移到云端。
另外,為了避免被云服務(wù)供應(yīng)商綁定,Docker成為很多開發(fā)者的首選。
Docker改變了產(chǎn)品交付,為產(chǎn)品的整個生命周期提供了一整套的解決方案和流程。
Docker改變了開發(fā)方式,提供了簡化的環(huán)境配置、封裝的運行環(huán)境以及統(tǒng)一的環(huán)境。并且提供了快速部署的方式。
Docker改變了測試,多版本測試變得極為方便,快速構(gòu)建測試環(huán)境也變得更加簡單并且無需開發(fā)人員干預(yù)或者搭建。
Docker改變了運維,環(huán)境的一致性讓運維變得更加簡單,同時熱更新的支持讓運維不再需要半夜加班部署更新,
更新可以隨時進(jìn)行。當(dāng)出現(xiàn)重大問題時,還能快速回滾到指定版本。
Docker改變了架構(gòu),自動化擴(kuò)容支持讓架構(gòu)變得更加簡單,分布式系統(tǒng)也更加易于搭建和支持。
同時遺留的單體應(yīng)用也很易于轉(zhuǎn)變?yōu)楝F(xiàn)代應(yīng)用。
總之,在某種程度上,Docker改變了產(chǎn)品開發(fā)中的一些游戲規(guī)則。雖然Docker是一項技術(shù),
但是它也帶來了新的思維,新的流程和工作方法,Docker在推動行業(yè)的發(fā)展,Docker已經(jīng)在改變世界,
并且在逐步的變?yōu)槭聦崱?/p>
缺點:
太依賴操作系統(tǒng)
依賴網(wǎng)絡(luò)
銀行U盾等場景不能用
2、linux上docker安裝
卸載舊版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
Device Mapper
Docker默認(rèn)使用AUFS作為存儲驅(qū)動,但是AUFS并沒有被包括在Linux的主線內(nèi)核中。
CentOS中可以使用Device Mapper作為存儲驅(qū)動,這是在2.6.9內(nèi)核版本引入的新功能。
我們需要先確認(rèn)是否啟用該功能:
$ ls -l /sys/class/misc/device-mapper
lrwxrwxrwx 1 root root 0 May 1 20:55 /sys/class/misc/device-mapper -> …/…/devices/virtual/misc/device-mapper
如果沒有檢測到Device Mapper,需要安裝device-mapper軟件包:
$ sudo yum install -y device-mapper
然后重新加載dm_mod內(nèi)核模塊:
$ sudo modprobe dm_mod
安裝docker-ce
參照阿里鏡像源安裝
CentOS 7(使用 yum 進(jìn)行安裝)
#step 1: 安裝必要的一些系統(tǒng)工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#Step 2: 添加軟件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#Step 3
sudo sed -i ‘s+download.docker.com+mirrors.aliyun.com/docker-ce+’ /etc/yum.repos.d/docker-ce.repo
#Step 4: 更新并安裝Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
#Step 4: 開啟Docker服務(wù)
sudo service docker start
#注意:
#官方軟件源默認(rèn)啟用了最新的軟件,您可以通過編輯軟件源的方式獲取各個版本的軟件包。
例如官方并沒有將測試版本的軟件源置為可用,您可以通過以下方式開啟。同理可以開啟各種測試版本等。
#vim /etc/yum.repos.d/docker-ce.repo
#將[docker-ce-test]下方的enabled=0修改為enabled=1
#安裝指定版本的Docker-CE:
#Step 1: 查找Docker-CE的版本:
#yum list docker-ce.x86_64 --showduplicates | sort -r
#Loading mirror speeds from cached hostfile
#Loaded plugins: branch, fastestmirror, langpacks
#docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
#docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
#docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
#Available Packages
#Step2: 安裝指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
#sudo yum -y install docker-ce-[VERSION]
查看安裝的docker版本:
docker -v
[root@220 ~ ]# docker version
Client: Docker Engine - Community
Version: 20.10.14
API version: 1.41
Go version: go1.16.15
Git commit: a224086
Built: Thu Mar 24 01:49:57 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
docker的配置文件:
/etc/docker/daemon.json
資源目錄:
/var/lib/docker/
little docker ]#cd /var/lib/docker/
[root@little docker ]#ll
total 0
drwx–x–x 4 root root 120 Feb 20 14:48 buildkit
drwx-----x 2 root root 6 Feb 20 14:48 containers 容器信息
drwx------ 3 root root 22 Feb 20 14:48 image 鏡像資源
drwxr-x— 3 root root 19 Feb 20 14:48 network
drwx-----x 3 root root 40 Feb 20 14:48 overlay2
drwx------ 4 root root 32 Feb 20 14:48 plugins
drwx------ 2 root root 6 Feb 20 14:48 runtimes
drwx------ 2 root root 6 Feb 20 14:48 swarm
drwx------ 2 root root 6 Feb 20 14:48 tmp
drwx------ 2 root root 6 Feb 20 14:48 trust
drwx-----x 2 root root 50 Feb 20 14:48 volumes
3、docker加速器:
國內(nèi)使用docker官方鏡像源,會因為網(wǎng)絡(luò)原因無法下載,或一直處于超時狀態(tài)。我們使用
daocloud.io的方法進(jìn)行加速配置
[root@little ~ ]#curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://abcd1234.m.daocloud.io
docker version >= 1.12
{“registry-mirrors”: [“http://abcd1234.m.daocloud.io”]}
Success.
You need to restart docker to take effect: sudo systemctl restart docker
或者修改本地配置文件:
[root@little ~ ]#vim /etc/docker/daemon.json
{“registry-mirrors”: [“http://abcd1234.m.daocloud.io”]}
保存即可
驗證拉取鏡像速度:
docker image pull nginx
阿里云加速
[root@little ~ ]#vim /etc/docker/daemon.json
{“registry-mirrors”: [“https://q2gr04ke.mirror.aliyuns.com”],“insecure-registries”:[“10.1.1.100:5000”]}
~
docker 1.12 開始支持live restore,就是關(guān)閉docker daemon ,而不關(guān)閉容器
有兩種方式開啟:
如果docker daemon正在運行并且你不想停止它,你可以添加配置到docker daemon的配置文件。
例如:在linux系統(tǒng)上默認(rèn)的配置文件是/etc/docker/daemon.json
{“l(fā)ive-restore”: true}文章來源:http://www.zghlxwxcb.cn/news/detail-777001.html
你必須傳遞一個SIGHUP信號給daemon進(jìn)程來重載配置。更多有關(guān)使用config.json來配置docker daemon的信息,
可以參考
daemon configuration file
在使用dockerd啟動時指定–live-restore選項文章來源地址http://www.zghlxwxcb.cn/news/detail-777001.html
到了這里,關(guān)于K8S必備知識--docker的介紹以及安裝的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!