目錄
一、理論
1.Doker概述
2.Docker核心概念
3.Docker安裝
4.Docker的鏡像管理命令
二、實(shí)驗(yàn)
1.Docker安裝
2.查看Docker信息
3.Docker的鏡像管理命令
三、問(wèn)題
1.如何注冊(cè)Docker賬號(hào)
?2.如何設(shè)置Docker公共存儲(chǔ)庫(kù)
四、總結(jié)
一、理論
1.Doker概述
(1) IT架構(gòu)
裸金屬 → 虛擬機(jī) → 容器→ 函數(shù)化、代碼化
云計(jì)算涌現(xiàn)出很多改變傳統(tǒng)IT架構(gòu)和運(yùn)維方式的新技術(shù),比如虛擬機(jī)、容器、微服務(wù)、Serverless(無(wú)服務(wù)),無(wú)論這些技術(shù)應(yīng)用在哪些場(chǎng)景,降低成本、提升效率是云服務(wù)永恒的主題。
①?運(yùn)行物理機(jī),也稱為裸金屬
②?虛擬機(jī)VM,可以在一臺(tái)物理機(jī)上創(chuàng)建多個(gè)虛擬機(jī),并把物理配置分發(fā)成多個(gè)虛擬配置
缺點(diǎn):性能損耗大,大約損耗50%
?
虛擬機(jī)常用軟件:
VMware workstation(windows)
vm Sphere+ESXI (Windows server)
KVM(linux內(nèi)核)
③?容器 (常用軟件:docker、podman、rocket、container)
- 容器內(nèi)部自身有一個(gè)小型操作系統(tǒng)
④?函數(shù)(函數(shù)化,代碼化)
(2)Docker初始
Docker是一個(gè)開源的應(yīng)用容器引擎,基于go語(yǔ)言開發(fā)并遵守了apache2.0協(xié)議開源。
Docker是在Linux容器里運(yùn)行應(yīng)用的開源工具,是一種輕量級(jí)的“虛擬機(jī)”。
Docker的容器技術(shù)可以在一臺(tái)主機(jī)上輕松為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。
Docker的Logo:
- Docker的Logo設(shè)計(jì)為藍(lán)色鯨魚,拖著許多集裝箱。
- 鯨魚可看作為宿主機(jī),集裝箱可理解為相互隔離的容器,每個(gè)集裝箱中都包含自己的應(yīng)用程序。
Docker的設(shè)計(jì)宗旨:
Docker的設(shè)計(jì)宗旨:Build,Ship and Run Any App,Anywhere
即通過(guò)對(duì)應(yīng)用組件的封裝、發(fā)布、部署、運(yùn)行等生命周期的管理,達(dá)到應(yīng)用組件級(jí)別的“一次封裝,到處運(yùn)行”的目的。這里的組件,既可以是一個(gè)應(yīng)用,也可以是一套服務(wù),甚至是一個(gè)完整的操作系統(tǒng)。
docker是創(chuàng)建容器的工具。應(yīng)用運(yùn)行在容器中,每個(gè)容器都有一致的運(yùn)行環(huán)境,所以可以在任何主機(jī)中運(yùn)行。即實(shí)現(xiàn)“一次封裝,到處運(yùn)行”的目的。
(3)容器的特點(diǎn)
容器化越來(lái)越受歡迎,因?yàn)槿萜魇牵?/p>
①靈活:即使是最復(fù)雜的應(yīng)用也可以集裝箱化。
②輕量級(jí):容器利用并共享主機(jī)內(nèi)核。
③可互換:可以即時(shí)部署更新和升級(jí)。
④便攜式:可以在本地構(gòu)建,部署到云,并在任何地方運(yùn)行。
⑤可擴(kuò)展:可以增加并自動(dòng)分發(fā)容器副本。
⑥可堆疊:可以垂直和即時(shí)堆疊服務(wù)。
(4)Docker容器與虛擬機(jī)的區(qū)別
容器是在linux上本機(jī)運(yùn)行,并與其他容器共享主機(jī)的內(nèi)核,它運(yùn)行的是一個(gè)獨(dú)立的進(jìn)程,不占用共他任何可執(zhí)行文件的內(nèi)存,非常輕量。
虛擬機(jī)運(yùn)行的是一個(gè)完整的操作系統(tǒng),每個(gè)虛擬機(jī)使用獨(dú)立的內(nèi)核,通過(guò)虛擬機(jī)管理程序?qū)χ鳈C(jī)資源進(jìn)行虛擬訪問(wèn),相比之下需要的資源更多。
?
①?docker就相當(dāng)于宿主機(jī)的一個(gè)進(jìn)程,所以損耗微乎其微。
②?虛擬機(jī)和操作系統(tǒng)之間是hypervisor,虛擬化管理程序,虛擬化各種硬件資源,這中間就會(huì)有資源損耗。
?(5)容器在內(nèi)核中支持2種重要技術(shù)
docker本質(zhì)就是宿主機(jī)的一個(gè)進(jìn)程,docker是通過(guò) namespace 實(shí)現(xiàn)資源隔離,通過(guò) cgroup 實(shí)現(xiàn)資源限制(限制硬件資源,限制2個(gè)容器相互之間搶資源),通過(guò)寫時(shí)復(fù)制技術(shù)(copy-on-write)實(shí)現(xiàn)了高效的文件操作(類似虛擬機(jī)的磁盤比如分配500g并不是實(shí)際占用物理磁盤500g)。
linux六大namespace(命名空間):
?
?
2.Docker核心概念
(1)鏡像
①Docker的鏡像是創(chuàng)建容器的基礎(chǔ),類似虛擬機(jī)的快照,可以理解為一個(gè)面向 Docker 容器引擎的只讀模板。
②通過(guò)鏡像啟動(dòng)一個(gè)容器,一個(gè)鏡像是一個(gè)可執(zhí)行的包,其中包括運(yùn)行應(yīng)用程序所需要的所有內(nèi)容包含代碼,運(yùn)行時(shí)間,庫(kù)、環(huán)境變量、和配置文件。
(2)容器
Docker的容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例,它可以被啟動(dòng)、停止和刪除。所創(chuàng)建的每一個(gè)容器都是相互隔離、互不可見,以保證平臺(tái)的安全性。
可以把容器看做是要給簡(jiǎn)易版的linux環(huán)境(包括root用戶權(quán)限、鏡像空間、用戶空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。
(3)倉(cāng)庫(kù)
Docker倉(cāng)庫(kù)是用來(lái)集中保存鏡像的地方,當(dāng)創(chuàng)建了自己的鏡像之后,可以使用push命令將它上傳到公有倉(cāng)庫(kù)(Public)或者私有倉(cāng)庫(kù)(Private)。當(dāng)下次要在另外一臺(tái)機(jī)器上使用這個(gè)鏡像時(shí),只需從倉(cāng)庫(kù)獲取。
Docker 的鏡像、容器、日志等內(nèi)容全部都默認(rèn)存儲(chǔ)在 /var/lib/docker 目錄下。
?
3.Docker安裝
(1)YUM安裝Docker
目前 Docker 只能支持 64 位系統(tǒng)。
#關(guān)閉防火墻和selinux
systemctl stop firewalld.service
setenforce 0
?
#安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
--------------------------------------------------------------------------------------------
#yum-utils:提供了 yum-config-manager 工具。
#device mapper: 是Linux內(nèi)核中支持邏輯卷管理的通用設(shè)備映射機(jī)制,
它為實(shí)現(xiàn)用于存儲(chǔ)資源管理的塊設(shè)備驅(qū)動(dòng)提供了一個(gè)高度模塊化的內(nèi)核架構(gòu)。
#device mapper存儲(chǔ)驅(qū)動(dòng)程序需要 device-mapper-persistent-data 和 lvm2。
--------------------------------------------------------------------------------------------
?
#設(shè)置阿里云鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
?
#安裝 Docker-CE并設(shè)置為開機(jī)自動(dòng)啟動(dòng)
yum install -y docker-ce #docker-ce-cli、containerd.io 會(huì)作為依賴包被安裝
?
systemctl start docker.service
systemctl enable docker.service
(2)?查看Docker信息
#查看 docker 版本信息
docker version
#注意:Yum安裝默認(rèn)安裝最新版本,目前最新版本是2020版本。但工作中不會(huì)用這么新的版本,前一個(gè)版本是2019版本。
?
#docker信息查看
docker info
//查看的部分信息如下:
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
scan: Docker Scan (Docker Inc., v0.17.0)
?
Server:
Containers: 0 #容器數(shù)量
Running: 0
Paused: 0
Stopped: 0
Images: 0 #鏡像數(shù)量
Server Version: 20.10.17 #server版本
Storage Driver: overlay2 #docker使用的是overlay2 文件驅(qū)動(dòng)
Backing Filesystem: xfs #宿主機(jī)上的底層文件系統(tǒng)
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs #cgroups 驅(qū)動(dòng),默認(rèn)為cgroupfs,也可以修改為systemd
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
4.Docker的鏡像管理命令
?
(1)?搜索鏡像
格式:docker search 關(guān)鍵字(鏡像名稱或倉(cāng)庫(kù)名)
?
docker search nginx #搜索nginx的鏡像
?
docker search clearlinux #搜索指定倉(cāng)庫(kù)clearlinux中的鏡像
(2)?獲取鏡像(下載鏡像)
格式:docker pull 鏡像名稱[:標(biāo)簽]
#如果下載鏡像時(shí)不指定標(biāo)簽,則默認(rèn)會(huì)下載倉(cāng)庫(kù)中最新版本的鏡像,即選擇標(biāo)簽為 latest 的鏡像。
?
docker pull nginx #下載nginx鏡像
(3)?鏡像加速下載
瀏覽器訪問(wèn) https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 獲取鏡像加速器配置
?
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"] #寫入自己的加速器地址
}
EOF
?
systemctl daemon-reload #重新加載
systemctl restart docker #重啟docker
?
docker info #查看是否啟用了鏡像加速
登錄阿里云平臺(tái),獲取加速器地址:
配置鏡像加速
(4)?查看本地有哪些鏡像
鏡像下載后存放在 /var/lib/docker
#查看下載到本地的所有鏡像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 89da1fb6dcb9 2 weeks ago 187MB
------------------------------------------------------------------------------------
#注釋:
REPOSITORY:鏡像屬于的倉(cāng)庫(kù);
TAG:鏡像的標(biāo)簽信息,標(biāo)記同一個(gè)倉(cāng)庫(kù)中的不同鏡像;
IMAGE ID:鏡像的唯一ID 號(hào),唯一標(biāo)識(shí)一個(gè)鏡像;
CREATED:鏡像創(chuàng)建時(shí)間;
VIRTUAL SIZE:鏡像大小;
------------------------------------------------------------------------------------
?
#鏡像下載后存放在 /var/lib/docker
#查看下載的鏡像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
(5)?查看鏡像的詳細(xì)信息( 獲取容器/鏡像的元數(shù)據(jù) )
格式:docker inspect 鏡像ID號(hào)/容器ID #根據(jù)鏡像的唯一標(biāo)識(shí) ID 號(hào),獲取鏡像詳細(xì)信息
?
docker inspect 89da1fb6dcb9
(6)?為本地的鏡像添加新的標(biāo)簽
添加標(biāo)簽后,鏡像的ID號(hào)并不會(huì)改變。
格式:docker tag 名稱:[標(biāo)簽] [倉(cāng)庫(kù)名/]名稱:[新標(biāo)簽]
?
示例:
docker tag nginx:latest nginx:web #為nginx鏡像添加web標(biāo)簽
docker tag nginx:latest 倉(cāng)庫(kù)名/nginx:web #為鏡像添加庫(kù)標(biāo)識(shí),方便上傳到官方倉(cāng)庫(kù),因?yàn)樯蟼麋R像時(shí)必須指定倉(cāng)庫(kù)
docker images | grep nginx
(7)?刪除鏡像
注意:如果該鏡像已經(jīng)被容器使用,正確的做法是先刪除依賴該鏡像的所有容器,再去刪除鏡像。
格式:
docker rmi 鏡像名:標(biāo)簽 #刪除指定標(biāo)簽
docker rmi 鏡像ID -f #刪除指定鏡像
?
?
docker rmi nginx:web #刪除nginx鏡像的web標(biāo)簽
docker rmi ac826143758d #刪除鏡像,該鏡像只有單個(gè)標(biāo)簽的情況下
docker rmi 89da1fb6dcb9 -f #刪除鏡像,鏡像有多個(gè)標(biāo)簽時(shí)需要加-f
(8)?批量刪除鏡像
docker images #查看本地所有鏡像
docker images -q #查看本地有哪些鏡像,只顯示鏡像ID
docker rmi $(docker images -q) -f #批量刪除本地所有鏡像
(9)?存出鏡像:將鏡像保存成為本地文件
將鏡像保存成為本地文件,實(shí)際是將鏡像打包成一個(gè)tar包。
格式:docker save -o 存儲(chǔ)文件名 存儲(chǔ)的鏡像
docker save -o mynginx.tar nginx:latest #打包鏡像命名為mynginx.tar存在當(dāng)前目錄下
ls -lh
(10)?載入鏡像:將鏡像文件導(dǎo)入到鏡像庫(kù)中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件
?
#主機(jī)A通過(guò)scp命令將打包好鏡像文件傳給主機(jī)B,主機(jī)B將鏡像文件導(dǎo)入到docker本地
scp ~/mynginx.tar 192.168.204.141:/root/
?
#主機(jī)B將鏡像文件導(dǎo)入到鏡像庫(kù)中
docker load < mynginx.tar 或者 docker load -i mynginx.tar
(11)?上傳鏡像(將鏡像上傳到官方倉(cāng)庫(kù))
默認(rèn)上傳到 docker Hub 官方公共倉(cāng)庫(kù),需要注冊(cè)使用公共倉(cāng)庫(kù)的賬號(hào),hub.docker.com 。默認(rèn)上傳到公有倉(cāng)庫(kù),其他人可以下載倉(cāng)庫(kù)中的鏡像。如果想設(shè)置成私有倉(cāng)庫(kù)(僅自己可見),不允許其他人下載,需要付費(fèi)。?
可以使用 docker login 命令來(lái)輸入用戶名、密碼和郵箱來(lái)完成注冊(cè)和登錄。docker logout 命令進(jìn)行登出。
在上傳鏡像之前,還需要先對(duì)本地鏡像添加新的標(biāo)簽,在鏡像名稱前加上倉(cāng)庫(kù)名,然后再使用 docker push 命令進(jìn)行上傳。
docker tag nginx:latest jiajianwei/nginx #添加新的標(biāo)簽,在鏡像名稱前加上倉(cāng)庫(kù)名,jiajianwei為倉(cāng)庫(kù)名稱
?
docker login #登錄公共倉(cāng)庫(kù)
Username: #賬號(hào)
password: #密碼
?
docker push jiajianwei/nginx #上傳鏡像
docker search jiajianwei #搜索jiajianwei倉(cāng)庫(kù)中的鏡像
docker pull jiajianwei/nginx #下載jiajianwei倉(cāng)庫(kù)中的鏡像
docker logout #登出公共倉(cāng)庫(kù)
?
二、實(shí)驗(yàn)
1.Docker安裝
(1)YUM安裝Docker
①關(guān)閉防火墻和selinux
②?安裝依賴包
③?設(shè)置阿里云鏡像源
④?安裝 Docker-CE并設(shè)置為開機(jī)自動(dòng)啟動(dòng)
?⑤啟動(dòng)服務(wù)
2.查看Docker信息
①查看 docker 版本信息
②docker信息查看
3.Docker的鏡像管理命令
(1)搜索鏡像
①搜索nginx的鏡像,STARS越多,表示使用的人越多
?②?搜索指定倉(cāng)庫(kù)clearlinux中的鏡像
?(2)獲取鏡像(下載鏡像)
如果下載鏡像時(shí)不指定標(biāo)簽,則默認(rèn)會(huì)下載倉(cāng)庫(kù)中最新版本的鏡像,即選擇標(biāo)簽為 latest 的鏡像。
?(3)鏡像加速下載
①查詢
②?配置鏡像加速器(添加地址)
?③重新加載、重啟docker
④?查看是否啟用了鏡像加速
?(4)查看本地有哪些鏡像
①查看下載到本地的所有鏡像
②查看下載的鏡像文件信息
?(5)查看鏡像的詳細(xì)信息( 獲取容器/鏡像的元數(shù)據(jù) )
?(6)為本地的鏡像添加新的標(biāo)簽
添加標(biāo)簽后,鏡像的ID號(hào)并不會(huì)改變。
為nginx鏡像添加web標(biāo)簽
(7)刪除鏡像
注意:如果該鏡像已經(jīng)被容器使用,正確的做法是先刪除依賴該鏡像的所有容器,再去刪除鏡像。
刪除鏡像,鏡像有多個(gè)標(biāo)簽時(shí)需要加-f
?
(8)?批量刪除鏡像
(9)?存出鏡像:將鏡像保存成為本地文件
將鏡像保存成為本地文件,實(shí)際是將鏡像打包成一個(gè)tar包。
(10)?載入鏡像:將鏡像文件導(dǎo)入到鏡像庫(kù)中
①主機(jī)A通過(guò)scp命令將打包好鏡像文件傳給主機(jī)B,主機(jī)B將鏡像文件導(dǎo)入到docker本地
?②主機(jī)B將鏡像文件導(dǎo)入到鏡像庫(kù)中
③鏡像ID和主機(jī)A中的一致
(11)上傳鏡像(將鏡像上傳到官方倉(cāng)庫(kù))
①添加新的標(biāo)簽,在鏡像名稱前加上倉(cāng)庫(kù)名,jiajianwei為倉(cāng)庫(kù)名稱
②?登錄公共倉(cāng)庫(kù)
③?上傳鏡像
?④在自己的倉(cāng)庫(kù)中可以看到上傳的鏡像,默認(rèn)上傳到公共倉(cāng)庫(kù)中
私有倉(cāng)庫(kù)需要付費(fèi)
⑤登出公共倉(cāng)庫(kù)
⑥?搜索jiajianwei倉(cāng)庫(kù)中的鏡像
⑦?下載jaijianwei倉(cāng)庫(kù)中的鏡像
三、問(wèn)題
1.如何注冊(cè)Docker賬號(hào)
(1)注冊(cè)界面
?https://hub.docker.com
(2)填寫完信息,出現(xiàn)人機(jī)驗(yàn)證
?(3)點(diǎn)擊人機(jī)驗(yàn)證
?(4)郵箱驗(yàn)證
?2.如何設(shè)置Docker公共存儲(chǔ)庫(kù)
(1)公共存儲(chǔ)庫(kù)
公共存儲(chǔ)庫(kù)可用于托管Docker鏡像,可供其他人使用。Docker Hub中提供的鏡像就是一個(gè)例子。大多數(shù)鏡像,如Centos,Ubuntu和Jenkins都可以公開提供給所有人。我們還可以通過(guò)將其發(fā)布到Docker Hub上的公共存儲(chǔ)庫(kù)中,使鏡像可用。
(2)選擇命名空間Namespace、創(chuàng)建存儲(chǔ)庫(kù)? Repository Name
?(3) 創(chuàng)建成功
四、總結(jié)
Docker是創(chuàng)建容器的工具。應(yīng)用運(yùn)行在容器中,每個(gè)容器都有一致的運(yùn)行環(huán)境,所以可以在任何主機(jī)中運(yùn)行。即實(shí)現(xiàn)“一次封裝,到處運(yùn)行”的目的。
Docker是基于go語(yǔ)言開發(fā)的開源容器引擎,可以在任何主機(jī)上運(yùn)行容器應(yīng)用,并且每個(gè)容器都是一個(gè)輕量級(jí)的虛擬機(jī)。實(shí)現(xiàn)“一次封裝,到處運(yùn)行”的目的。
Docker的三大核心概念:鏡像、容器、倉(cāng)庫(kù)
鏡像管理命令:
命令 作用
docker search <倉(cāng)庫(kù)/鏡像名> 搜索鏡像
docker pull <倉(cāng)庫(kù)/鏡像名> 下載鏡像
docker images 查看本地的所有鏡像
docker images -q 只顯示本地所有鏡像的ID號(hào)
docker inspect <鏡像ID/容器ID> 查看鏡像的詳細(xì)信息( 獲取鏡像/容器的元數(shù)據(jù) )
docker tag 名稱:[標(biāo)簽] [倉(cāng)庫(kù)名/]名稱:[新標(biāo)簽] 為本地的鏡像添加新的標(biāo)簽docker rmi < 鏡像名稱:標(biāo)簽>
docker rmi <鏡像ID> -f 刪除指定鏡像
docker rmi $(docker images -q) 刪除本地所有鏡像
docker save -o 鏡像文件.tar 鏡像名稱:標(biāo)簽 存出鏡像:將鏡像保存為本地文件
docker load -i[或<] 鏡像文件 載入鏡像:將鏡像文件導(dǎo)入到鏡像庫(kù)中
docker login 登錄公共倉(cāng)庫(kù)docker hub
docker push 倉(cāng)庫(kù)名/鏡像名:標(biāo)簽 上傳鏡像(將鏡像上傳到官方倉(cāng)庫(kù))docker logout
鏡像加速
mkdir -p /etc/docker
vim /etc/docker/daemon.json
鏡像下載后存放位置文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-682860.html
/var/lib/docker
查看下載的鏡像文件信息文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-682860.html
cat /var/lib/docker/image/overlay2/repositories.json
到了這里,關(guān)于Docker容器與虛擬化技術(shù):Docker架構(gòu)、鏡像操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!