一,Docker簡介
百科說:Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。
看起來有點霧,用過虛擬機的應該對虛擬化技術有點印象,不知道也沒關系,就把它當成輕量級的虛擬機吧(雖然一個是完全虛擬化,一個是操作系統層虛擬化),這個解釋到位:https://www.cnblogs.com/kex1n/p/6933039.html
百科又說:Docker 使用客戶端-服務器 (C/S) 架構模式 使用遠程API來管理和創建Docker容器。Docker 容器(Container)通過 Docker 鏡像(Image)來創建,二者之間的關系類似于面向對象編程中的對象與類
那Docker由什么組成呢, 包括三個基本概念:
倉庫(Repository)
鏡像(Image)
容器(Container)
打個比方:你如果想玩英雄聯盟中騷氣的亞索,你首先得有這個英雄(Docker的鏡像),然后你得花金幣去英雄商店(Docker的倉庫)買,接著進游戲就會看到一個半蹲的發型飄逸的劍客(Docker的容器),所以:
1,其中Registry是Docker用于存放鏡像文件的倉庫,Docker 倉庫的概念跟Git 類似(就像商店存放所有的英雄,只是更改英雄的權限在某些非程序員手里)。
2,所謂鏡像就是構建容器的源代碼,是一個只讀的模板,由一層一層的文件系統組成的,類似于虛擬機的鏡像(英雄也是只讀的,有自己的技能被動,你也不能進行操作)。
3,那么容器就是由Docker鏡像創建的運行實例,類似于虛擬機,容器之間是相互隔離的,包含特定的應用及其所需的依賴文件(好比每個英雄都是隔離的,都有自己的皮膚,技能以及走的路線)。
注:Docker Hub是Docker公司提供的一個注冊服務器(Register)來保存多個倉庫,每個倉庫又可以包含多個具備不同tag的鏡像。
二,安裝Docker
安裝之前,一定查看是否安裝docker,如果有,卸載老版本
我是虛擬機裝的Centos7,linux 3.10 內核,docker官方說至少3.8以上,建議3.10以上(ubuntu下要linux內核3.8以上, RHEL/Centos 的內核修補過, centos6.5的版本就可以——這個可以試試)
1,root賬戶登錄,查看內核版本如下
[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包更新到最新(生產環境慎重!yum update會對軟件包和內核升級,此處只是為了排除系統環境的影響)
[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驅動依賴的
[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,設置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,否則查不到相應版本資源
由于不止什么問題,添加中央倉庫會失敗,這里添加阿里云
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,然后加入開機啟動(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命令,更多命令詳解,請訪問:http://www.docker.org.cn/dockerppt/106.html:
----------------- docker ps 查看當前正在運行的容器
----------------- docker ps -a 查看所有容器的狀態
----------------- docker start/stop id/name 啟動/停止某個容器
----------------- docker attach id 進入某個容器(使用exit退出后容器也跟著停止運行)
----------------- docker exec -ti id 啟動一個偽終端以交互式的方式進入某個容器(使用exit退出后容器不停止運行)
----------------- docker images 查看本地鏡像
----------------- docker rm id/name 刪除某個容器
----------------- docker rmi id/name 刪除某個鏡像
----------------- docker run --name test -ti ubuntu /bin/bash 復制ubuntu容器并且重命名為test且運行,然后以偽終端交互式方式進入容器,運行bash
----------------- docker build -t soar/centos:7.1 . 通過當前目錄下的Dockerfile創建一個名為soar/centos:7.1的鏡像
----------------- docker run -d -p 2222:22 --name test soar/centos:7.1 以鏡像soar/centos:7.1創建名為test的容器,并以后臺模式運行,并做端口映射到宿主機2222端口,P參數重啟容器宿主機端口會發生改變
下面兩個解決方法,請提前設置好,否則會顯示docker 安裝錯誤
# 最開始這樣安裝,就ok啦。
sudo yum install docker-ce-18.09.8-3.el7 docker-ce-cli-18.09.8-3.el7
1. Docker 客戶端和服務器版本不一致
首先,確認 Docker 是否已安裝并列出所有相關的包:
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
在大多數 Linux 發行版中,如果你使用 yum
或 dnf
來安裝軟件包,系統會根據配置的倉庫和更新策略自動檢查和更新軟件包。以下是關于 Docker 自動更新的一些要點:
默認情況下
自動更新:如果沒有進行特別配置,
yum
會定期檢查并更新系統中安裝的軟件包,包括 Docker。版本鎖定:如果你沒有鎖定版本,Docker 及其組件會自動更新到可用的最新版本,這可能導致客戶端和服務器版本不一致。
如何防止自動更新
為了防止 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
禁用自動更新:
如果你希望完全禁用系統的自動更新,可以編輯/etc/yum/yum-cron.conf
(或類似配置文件),并將update_cmd
設置為none
。手動更新:
你可以選擇手動更新系統,定期檢查并決定是否更新特定軟件包。
總結
設置Docker 的客戶端和服務器版本保持一致,使用 versionlock
鎖定版本,并定期手動檢查更新。這樣可以確保在需要時進行更新,而不會意外地導致版本不一致。
2. 安裝鎖定包
[root@localhost ~]# sudo yum versionlock add docker-ce-18.09.8-3.el7
已加載插件:fastestmirror, langpacks
沒有該命令:versionlock。請使用 /bin/yum --help
如果你的系統沒有安裝 versionlock
插件,可能是因為在默認的 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
檢查已鎖定的版本
你可以使用以下命令查看當前已鎖定的軟件包版本:
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
通過這些步驟,你應該能夠成功鎖定 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
經過上面步驟1和2的操作,發現docker-ce沒有啦,怎么辦,重新安裝吧。
從你提供的輸出可以看到,Docker 的核心組件 docker-ce
(Docker Community Edition)并沒有安裝。只有 Docker CLI 和一些插件安裝在系統上。這就是為什么你在嘗試啟動 Docker 服務時會遇到 "Unit not found" 的錯誤,因為沒有找到 Docker 服務的相關文件。
解決步驟
-
安裝 Docker CE:
你需要安裝 Docker CE。可以通過以下命令來安裝:sudo yum install docker-ce-18.09.8-3.el7
如果你希望安裝最新版本的 Docker,可以使用以下命令:
sudo yum install docker
-
啟動 Docker 服務:
安裝完成后,啟動 Docker 服務:sudo systemctl start docker
-
檢查 Docker 服務狀態:
確認 Docker 服務是否正在運行:sudo systemctl status docker
-
設置開機自啟:
如果 Docker 啟動成功,可以設置其開機自啟:sudo systemctl enable docker
三、安裝bug
卸載舊版本(如果安裝過舊版本的話)
$ sudo yum remove docker docker-common docker-selinux docker-engine
參考別人的,未親測,畢竟我是第一次安裝,按照上面安裝就安裝成功啦,對于安裝失敗的情況,在此做筆錄。
1、因為之前已經安裝過舊版本的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.登錄阿里云,找到容器鏡像服務