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