一捐友,Docker簡介
百科說:Docker 是一個開源的應(yīng)用容器引擎甫恩,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中吟税,然后發(fā)布到任何流行的Linux機(jī)器上,也可以實(shí)現(xiàn)虛擬化稀轨,容器是完全使用沙箱機(jī)制扼脐,相互之間不會有任何接口。
看起來有點(diǎn)霧,用過虛擬機(jī)的應(yīng)該對虛擬化技術(shù)有點(diǎn)印象瓦侮,不知道也沒關(guān)系艰赞,就把它當(dāng)成輕量級的虛擬機(jī)吧(雖然一個是完全虛擬化,一個是操作系統(tǒng)層虛擬化)肚吏,這個解釋到位:https://www.cnblogs.com/kex1n/p/6933039.html
百科又說:Docker 使用客戶端-服務(wù)器 (C/S) 架構(gòu)模式 使用遠(yuǎn)程API來管理和創(chuàng)建Docker容器赶盔。Docker 容器(Container)通過 Docker 鏡像(Image)來創(chuàng)建胜臊,二者之間的關(guān)系類似于面向?qū)ο缶幊讨械膶ο笈c類
那Docker由什么組成呢, 包括三個基本概念:
倉庫(Repository)
鏡像(Image)
容器(Container)
打個比方:你如果想玩英雄聯(lián)盟中騷氣的亞索,你首先得有這個英雄(Docker的鏡像)净当,然后你得花金幣去英雄商店(Docker的倉庫)買培慌,接著進(jìn)游戲就會看到一個半蹲的發(fā)型飄逸的劍客(Docker的容器)蹦浦,所以:
1瓣戚,其中Registry是Docker用于存放鏡像文件的倉庫,Docker 倉庫的概念跟Git 類似(就像商店存放所有的英雄炫掐,只是更改英雄的權(quán)限在某些非程序員手里)魁莉。
2,所謂鏡像就是構(gòu)建容器的源代碼募胃,是一個只讀的模板旗唁,由一層一層的文件系統(tǒng)組成的,類似于虛擬機(jī)的鏡像(英雄也是只讀的痹束,有自己的技能被動检疫,你也不能進(jìn)行操作)。
3祷嘶,那么容器就是由Docker鏡像創(chuàng)建的運(yùn)行實(shí)例屎媳,類似于虛擬機(jī),容器之間是相互隔離的抹蚀,包含特定的應(yīng)用及其所需的依賴文件(好比每個英雄都是隔離的剿牺,都有自己的皮膚企垦,技能以及走的路線)环壤。
注:Docker Hub是Docker公司提供的一個注冊服務(wù)器(Register)來保存多個倉庫,每個倉庫又可以包含多個具備不同tag的鏡像钞诡。
二郑现,安裝Docker
安裝之前,一定查看是否安裝docker荧降,如果有接箫,卸載老版本
我是虛擬機(jī)裝的Centos7,linux 3.10 內(nèi)核朵诫,docker官方說至少3.8以上辛友,建議3.10以上(ubuntu下要linux內(nèi)核3.8以上, RHEL/Centos 的內(nèi)核修補(bǔ)過, centos6.5的版本就可以——這個可以試試)
1废累,root賬戶登錄邓梅,查看內(nèi)核版本如下
[root@iz2zejf0fjkrh3aalbiatoz ~]# uname -a
Linux iz2zejf0fjkrh3aalbiatoz 3.10.0-1160.15.2.el7.x86_64 #1 SMP Wed Feb 3 15:06:38 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
2,(可選)把yum包更新到最新(生產(chǎn)環(huán)境慎重邑滨!yum update會對軟件包和內(nèi)核升級日缨,此處只是為了排除系統(tǒng)環(huán)境的影響)
[root@iz2zejf0fjkrh3aalbiatoz ~]# yum update
Loaded plugins: fastestmirror
Determining fastest mirrors
base | 3.6 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 2.9 kB 00:00:00
google-chrome | 1.3 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/6): epel/x86_64/group_gz | 96 kB 00:00:00
(2/6): epel/x86_64/updateinfo | 1.0 MB 00:00:00
(3/6): extras/7/x86_64/primary_db | 242 kB 00:00:00
(4/6): epel/x86_64/primary_db | 6.9 MB 00:00:00
(5/6): updates/7/x86_64/primary_db | 9.5 MB 00:00:00
(6/6): google-chrome/primary | 1.8 kB 00:00:00
google-chrome 3/3
Resolving Dependencies
--> Running transaction check
---> Package bind-export-libs.x86_64 32:9.11.4-26.P2.el7_9.3 will be updated
---> Package bind-export-libs.x86_64 32:9.11.4-26.P2.el7_9.5 will be an update
---> Package bind-libs-lite.x86_64 32:9.11.4-26.P2.el7_9.3 will be updated
---> Package bind-libs-lite.x86_64 32:9.11.4-26.P2.el7_9.5 will be an update
---> Package bind-license.noarch 32:9.11.4-26.P2.el7_9.3 will be updated
---> Package bind-license.noarch 32:9.11.4-26.P2.el7_9.5 will be an update
......
3,安裝需要的軟件包掖看, yum-util 提供yum-config-manager功能匣距,另外兩個是devicemapper驅(qū)動依賴的
[root@iz2zejf0fjkrh3aalbiatoz ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package device-mapper-persistent-data.x86_64 0:0.8.5-3.el7_9.2 will be installed
---> Package lvm2.x86_64 7:2.02.187-6.el7_9.5 will be installed
--> Processing Dependency: lvm2-libs = 7:2.02.187-6.el7_9.5 for package: 7:lvm2-2.02.187-6.el7_9.5.x86_64
--> Processing Dependency: liblvm2app.so.2.2(Base)(64bit) for package: 7:lvm2-2.02.187-6.el7_9.5.x86_64
--> Processing Dependency: libdevmapper-event.so.1.02(Base)(64bit) for package: 7:lvm2-2.02.187-6.el7_9.5.x86_64
--> Processing Dependency: liblvm2app.so.2.2()(64bit) for package: 7:lvm2-2.02.187-6.el7_9.5.x86_64
--> Processing Dependency: libdevmapper-event.so.1.02()(64bit) for package: 7:lvm2-2.02.187-6.el7_9.5.x86_64
---> Package yum-utils.noarch 0:1.1.31-54.el7_8 will be installed
4,設(shè)置yum源(選擇其中一個)
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央倉庫)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里倉庫)
命令前面一定要添加 sudo哎壳,否則查不到相應(yīng)版本資源
由于不止什么問題毅待,添加中央倉庫會失敗,這里添加阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@iz2zejf0fjkrh3aalbiatoz ~]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
5归榕,可以查看所有倉庫中所有docker版本恩静,并選擇特定版本安裝
[root@iz2zejf0fjkrh3aalbiatoz ~]# yum list docker-ce --showduplicates | sort -r
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.0-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.15-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.14-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.13-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.12-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.11-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.10-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.0-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.09.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.09.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.2.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable
docker-ce.x86_64 17.03.2.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
6,安裝Docker蹲坷,命令:yum install docker-ce-版本號驶乾,我選的是18.03.1,如下
[root@iz2zejf0fjkrh3aalbiatoz ~]# yum install docker-ce-18.03.1.ce
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package docker-ce.x86_64 0:18.03.1.ce-1.el7.centos will be installed
--> Processing Dependency: container-selinux >= 2.9 for package: docker-ce-18.03.1.ce-1.el7.centos.x86_64
--> Processing Dependency: pigz for package: docker-ce-18.03.1.ce-1.el7.centos.x86_64
--> Processing Dependency: libcgroup for package: docker-ce-18.03.1.ce-1.el7.centos.x86_64
--> Processing Dependency: libltdl.so.7()(64bit) for package: docker-ce-18.03.1.ce-1.el7.centos.x86_64
--> Running transaction check
---> Package container-selinux.noarch 2:2.119.2-1.911c772.el7_8 will be installed
--> Processing Dependency: policycoreutils-python for package: 2:container-selinux-2.119.2-1.911c772.el7_8.noarch
---> Package libcgroup.x86_64 0:0.41-21.el7 will be installed
---> Package libtool-ltdl.x86_64 0:2.4.2-22.el7_3 will be installed
---> Package pigz.x86_64 0:2.3.4-1.el7 will be installed
--> Running transaction check
如果安裝其他版本
yum install docker-ce-18.09.8-3.el7 docker-ce-cli-18.09.8-3.el7
7循签, 啟動Docker级乐,命令:systemctl start docker,然后加入開機(jī)啟動(systemctl enable docker)县匠,如下
[root@iz2zejf0fjkrh3aalbiatoz ~]# systemctl start docker
[root@iz2zejf0fjkrh3aalbiatoz ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@iz2zejf0fjkrh3aalbiatoz ~]# docker version
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:20:16 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:23:58 2018
OS/Arch: linux/amd64
Experimental: false
爬一些常用Docker命令风科,更多命令詳解,請?jiān)L問:http://www.docker.org.cn/dockerppt/106.html:
----------------- docker ps 查看當(dāng)前正在運(yùn)行的容器
----------------- docker ps -a 查看所有容器的狀態(tài)
----------------- docker start/stop id/name 啟動/停止某個容器
----------------- docker attach id 進(jìn)入某個容器(使用exit退出后容器也跟著停止運(yùn)行)
----------------- docker exec -ti id 啟動一個偽終端以交互式的方式進(jìn)入某個容器(使用exit退出后容器不停止運(yùn)行)
----------------- docker images 查看本地鏡像
----------------- docker rm id/name 刪除某個容器
----------------- docker rmi id/name 刪除某個鏡像
----------------- docker run --name test -ti ubuntu /bin/bash 復(fù)制ubuntu容器并且重命名為test且運(yùn)行乞旦,然后以偽終端交互式方式進(jìn)入容器贼穆,運(yùn)行bash
----------------- docker build -t soar/centos:7.1 . 通過當(dāng)前目錄下的Dockerfile創(chuàng)建一個名為soar/centos:7.1的鏡像
----------------- docker run -d -p 2222:22 --name test soar/centos:7.1 以鏡像soar/centos:7.1創(chuàng)建名為test的容器,并以后臺模式運(yùn)行兰粉,并做端口映射到宿主機(jī)2222端口故痊,P參數(shù)重啟容器宿主機(jī)端口會發(fā)生改變
下面兩個解決方法,請?zhí)崆霸O(shè)置好玖姑,否則會顯示docker 安裝錯誤
# 最開始這樣安裝愕秫,就ok啦。
sudo yum install docker-ce-18.09.8-3.el7 docker-ce-cli-18.09.8-3.el7
1. Docker 客戶端和服務(wù)器版本不一致
首先焰络,確認(rèn) Docker 是否已安裝并列出所有相關(guān)的包:
rpm -qa | grep docker
確保輸出中包含 docker-ce 和 docker-ce-cli戴甩。
[root@localhost ~]# rpm -qa | grep docker
docker-compose-plugin-2.27.1-1.el7.x86_64
docker-ce-18.09.8-3.el7.x86_64
docker-buildx-plugin-0.14.1-1.el7.x86_64
docker-ce-cli-26.1.4-1.el7.x86_64
在大多數(shù) Linux 發(fā)行版中,如果你使用 yum
或 dnf
來安裝軟件包闪彼,系統(tǒng)會根據(jù)配置的倉庫和更新策略自動檢查和更新軟件包甜孤。以下是關(guān)于 Docker 自動更新的一些要點(diǎn):
默認(rèn)情況下
自動更新:如果沒有進(jìn)行特別配置,
yum
會定期檢查并更新系統(tǒng)中安裝的軟件包,包括 Docker缴川。版本鎖定:如果你沒有鎖定版本囱稽,Docker 及其組件會自動更新到可用的最新版本,這可能導(dǎo)致客戶端和服務(wù)器版本不一致二跋。
如何防止自動更新
為了防止 Docker 或其他特定軟件包自動更新战惊,你可以采取以下措施:
-
使用
versionlock
:
使用yum versionlock
可以鎖定特定版本的軟件包,防止它們被更新扎即。例如:sudo yum versionlock add docker-ce-18.09.8-3.el7 sudo yum versionlock add docker-ce-cli-18.09.8-3.el7
禁用自動更新:
如果你希望完全禁用系統(tǒng)的自動更新吞获,可以編輯/etc/yum/yum-cron.conf
(或類似配置文件),并將update_cmd
設(shè)置為none
谚鄙。手動更新:
你可以選擇手動更新系統(tǒng)各拷,定期檢查并決定是否更新特定軟件包。
總結(jié)
設(shè)置Docker 的客戶端和服務(wù)器版本保持一致闷营,使用 versionlock
鎖定版本烤黍,并定期手動檢查更新。這樣可以確保在需要時進(jìn)行更新傻盟,而不會意外地導(dǎo)致版本不一致速蕊。
2. 安裝鎖定包
[root@localhost ~]# sudo yum versionlock add docker-ce-18.09.8-3.el7
已加載插件:fastestmirror, langpacks
沒有該命令:versionlock。請使用 /bin/yum --help
如果你的系統(tǒng)沒有安裝 versionlock
插件娘赴,可能是因?yàn)樵谀J(rèn)的 YUM 配置中沒有啟用它规哲。versionlock
是一個 YUM 插件,可以幫助你鎖定特定版本的軟件包诽表。要使用 versionlock
唉锌,你需要先安裝 yum-plugin-versionlock
。
安裝 yum-plugin-versionlock
你可以通過以下命令安裝該插件:
sudo yum install yum-plugin-versionlock
安裝完成后竿奏,你就可以使用 versionlock
命令來鎖定軟件包版本了袄简。
鎖定 Docker 版本
安裝完插件后,你可以使用以下命令鎖定 Docker 版本:
sudo yum versionlock add docker-ce-18.09.8-3.el7
sudo yum versionlock add docker-ce-cli-18.09.8-3.el7
檢查已鎖定的版本
你可以使用以下命令查看當(dāng)前已鎖定的軟件包版本:
sudo yum versionlock list
已加載插件:fastestmirror, langpacks, versionlock
3:docker-ce-18.09.8-3.el7.*
1:docker-ce-cli-18.09.8-3.el7.*
versionlock list done
解鎖版本
如果你將來想要解鎖某個軟件包的版本泛啸,可以使用以下命令:
sudo yum versionlock delete docker-ce
sudo yum versionlock delete docker-ce-cli
通過這些步驟绿语,你應(yīng)該能夠成功鎖定 Docker 的版本,防止它們在未來的更新中被自動更改平痰。如果你還有其他問題汞舱,請隨時詢問伍纫!
3. docker安裝失敗
[root@localhost ~]# rpm -qa | grep docker
docker-ce-cli-18.09.8-3.el7.x86_64
docker-compose-plugin-2.27.1-1.el7.x86_64
docker-buildx-plugin-0.14.1-1.el7.x86_64
經(jīng)過上面步驟1和2的操作宗雇,發(fā)現(xiàn)docker-ce沒有啦,怎么辦莹规,重新安裝吧赔蒲。
從你提供的輸出可以看到,Docker 的核心組件 docker-ce
(Docker Community Edition)并沒有安裝。只有 Docker CLI 和一些插件安裝在系統(tǒng)上舞虱。這就是為什么你在嘗試啟動 Docker 服務(wù)時會遇到 "Unit not found" 的錯誤欢际,因?yàn)闆]有找到 Docker 服務(wù)的相關(guān)文件。
解決步驟
-
安裝 Docker CE:
你需要安裝 Docker CE矾兜∷鹎鳎可以通過以下命令來安裝:sudo yum install docker-ce-18.09.8-3.el7
如果你希望安裝最新版本的 Docker,可以使用以下命令:
sudo yum install docker
-
啟動 Docker 服務(wù):
安裝完成后椅寺,啟動 Docker 服務(wù):sudo systemctl start docker
-
檢查 Docker 服務(wù)狀態(tài):
確認(rèn) Docker 服務(wù)是否正在運(yùn)行:sudo systemctl status docker
-
設(shè)置開機(jī)自啟:
如果 Docker 啟動成功浑槽,可以設(shè)置其開機(jī)自啟:sudo systemctl enable docker
三、安裝bug
卸載舊版本(如果安裝過舊版本的話)
$ sudo yum remove docker docker-common docker-selinux docker-engine
參考別人的返帕,未親測桐玻,畢竟我是第一次安裝,按照上面安裝就安裝成功啦荆萤,對于安裝失敗的情況镊靴,在此做筆錄。
1链韭、因?yàn)橹耙呀?jīng)安裝過舊版本的docker偏竟,在安裝的時候報錯如下:
Transaction check error:
file /usr/bin/docker from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd-shim from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/dockerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
2、卸載舊版本的包
$ sudo yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
3敞峭、再次安裝docker
$ sudo yum install docker-ce
四苫耸、卸載
五、鏡像加速器
1.登錄阿里云儡陨,找到容器鏡像服務(wù)