环境
centos | 7.9 |
docker ce | 20.10.9 |
Docker简介
Docker 最初是 dotCloud
公司创始人Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud
公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub上进行维护。Docker
项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。
Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 能够将应用程序与基础架构分离,以便您可以快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础设施。通过利用 Docker 快速交付、测试和部署代码的方法,您可以显着减少编写代码和在生产环境中运行之间的延迟。
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 版本开始,则进一步演进为使用 runC 和 containerd。
Docker的版本演进中产生了很多的名字,如docker-io、docker-engine、docker-ce、docker-ee。
- docker-io
docker-io是docker早期的版本,早期Docker官网的域名也是docker.io,docker.io由Ubuntu维护。在centos6下我们安装的Docker就是docker-io, 在Ubuntu上是docker.io
- docker-engine
docker-engine早期版本名称, 由Docker维护。版本号范围: 0.1.0 ~ 1.13.1,现在演变为docker-ceps: 现在yum源里默认已经不显示1.13和之前的版本了。centos7默认安装docker-io。ubuntu默认安装docker-ce。
- docker-ce
docker社区版,免费使用,为了开发人员或小团队创建基于容器的应用。2017年的3月1号之后,Docker的版本命名开始发生变化,同时将CE版本和EE版本进行分开,在下载docker社区版的时候会发现社区版有四个版本,分别是edge、nightly、stable、test,edge与stable两个版本发行。edge版本每月发布,每个月都会提供新功能。Stable版本每季度发布,每季度提供可靠的更新。test版本是预发布版本,nightly版本是正在进行中的版本也就最新的版本(可以理解成正在开发中的版本)
- docker-ee
docker企业版,也是收费的版本,提供了一些高级特性。
- docker desktop
docker桌面版本,能够以多种语言和框架在任何云平台上容器化和共享任何应用程序,轻松安装和设置完整的 Docker 开发环境
在线安装
打开Docker官网,Home - Docker
点击导航栏Developers,选择Docs,如下图
选择Download and install
根据自己的需要选择相应系统版本,这里选择Linux版本
进入页面后选择左侧导航栏中的Docker Engine(如果需要安装桌面版选择Docker Desktop),选择Install,此菜单下也有桌面版的安装入口,本文安装的是服务版所以选择的是CentOS server版本,选择Install菜单下的Server中的CentOS或选择Installation pre distro菜单下的Install on CentOS即可进入安装说明页面
卸载已经安装过的Docker
在正式安装之前,如果我们已经安装了首先要先卸载掉之前版本的docker
1.卸载 Docker CE、CLI、Containerd 和 Docker Compose 软件包:
[root@localhost ~]# yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
2.卸载旧版本的 docker-engine
以及相关的依赖项
[root@localhost ~]# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3.主机上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有映像、容器和卷
[root@localhost ~]# rm -rf /var/lib/docker
[root@localhost ~]# rm -rf /var/lib/containerd
如果 没有安装过可以跳过此步骤直接进行安装。
安装Docker CE
Docker主要有三种安装方法
- 通过docker的repositories进行安装,这样可以简化安装和升级任务(官方推荐)。
- 通过手动下载RP安装包进行安装和升级,适合在没有网络的环境下。
- 通过自动化脚本进行安装,通常在测试环境和开发环境使用。
1. 通过repositories仓库安装
- 设置yum源
通过yum来安装docker-ce,首先需要安装yum-utils(yum-utils提供了
yum-config-manager命令用于管理软件仓库。可以调整yum的主要配置参数,启动或关闭指定软件源,删除已有软件仓库等工作)
1)安装yum-utils
[root@localhost ~]# yum install -y yum-utils
2) 添加dockers yum源(如果官网的镜像源下载比较慢,也可以使用国内的镜像源)
# 添加官方镜像源
[root@localhost ~]# yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
或使用国内镜像源
# 添加阿里镜像源
[root@localhost ~]# yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装
1)查看repo仓库中列出的可用版本
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r
2)选择需要安装的版本进行安装(如果不选择版本默认安装最新版本)
# 安装指定版本docker命令格式
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin
# 示例
[root@localhost ~]# yum install docker-ce-20.10.9-3.el7 \
docker-ce-cli-20.10.9-3.el7 \
containerd.io-1.6.6-3.1.el7 \
docker-compose-plugin-2.6.0-3.el7
# 默认版本安装命令示例
[root@localhost ~]# yum install docker-ce \
docker-ce-cli \
containerd.io \
docker-compose-plugin
3)安装完成后启动docker,并设置开机自动启动
# 启动docker
[root@localhost ~]# systemctl start docker
# 查看docker状态
[root@localhost ~]# systemctl status docker
# 设置开机自动启动
[root@localhost ~]# systemctl enable docker
4)使用hello-world镜像启动一个容器来验证docker是否安装成功(hello-world容器运行后会输出Hello from Docker!然后容器会自动退出)
# 使用 hello-world镜像启动一个容器
[root@localhost ~]# docker run hello-world
# 查看所有容器
[root@localhost ~]# docker ps -a
2. 使用RPM包进行安装
见下文的离线安装
3. 使用自动化脚本安装
Docker 在get.docker.com上提供了一个方便的脚本, 可以快速、非交互地将 Docker 安装到开发环境中。不建议将便利脚本用于生产环境,但可以用作示例来创建适合您需求的供应脚本。另请参阅使用存储库 安装步骤以了解使用包存储库安装的安装步骤。该脚本的源代码是开源的,可以 docker-install在 GitHub 上的存储库中找到。
脚本的潜在风险和限制:
- 该脚本需要
root
或sudo
特权才能运行。 - 该脚本会尝试检测您的 Linux 发行版和版本并为您配置包管理系统,并且不允许您自定义大多数安装参数。
- 该脚本会在不要求确认的情况下安装依赖项和建议。这可能会安装大量软件包,具体取决于主机的当前配置。
- 默认情况下,该脚本安装 Docker、containerd 和 runc 的最新稳定版本。使用此脚本配置机器时,可能会导致 Docker 的主要版本升级意外。在部署到生产系统之前,始终在测试环境中测试(主要)升级。
- 该脚本并非旨在升级现有的 Docker 安装。使用脚本更新现有安装时,可能无法将依赖项更新到预期版本,从而导致使用过时的版本。
1)从get.docker.com下载脚本
[root@localhost docker]# curl -fsSL https://get.docker.com -o get-docker.sh
2)执行脚本进行安装,默认安装的是最新的稳定版本的 Docker。
[root@localhost docker]# sh get-docker.sh
3)安装完毕启动并查看docker状态
离线安装
1. 已知安装Docker所需要的依赖包和相应版本手动到官网下载RPM安装包和依赖包进行安装
有些情况下可能不能使用在线的形式进行docker的安装,就需要下载.rpm安装文件进行手动安装。
1)前往https://download.docker.com/linux/centos/ 并选择您的 CentOS 版本。然后浏览x86_64/stable/Packages/(或直接点击这里进入:
Docker下载地址)
并下载要安装的 Docker 版本的.rpm
文件。本文中使用的docker版本是20.10.9。我们需要下载对应版本的rpm文件上传到服务器上,这里需要 docker-ce-20.10.9-3.el7.x86_64.rpm、docker-ce-cli-20.10.9-3.el7.x86_64.rpm、docker-ce-rootless-extras-20.10.9-3.el7.x86_64.rpm、containerd.io-1.6.6-3.1.el7.x86_64.rpm、docker-scan-plugin-0.17.0-3.el7.x86_64.rpm这几个包。
2)安装rpm包
安装rpm包的时候需要注意安装顺序,因为他们直接有依赖关系,如果顺序错误会有报错提示,可以根据报错信息首先安装被依赖的rpm包,如果依赖包没有下载,则需要下载后再进行安装
在每个rpm包单独安装的过程中可能会出现两个包相互依赖,导致无法进行安装如下图所示,安装docker-scan-plugin时此包依赖了docker-ce-cli,于是便安装docker-ce-cli,但安装是又提示docker-ce-cli依赖了docker-scan-plugin此时无法进行正确安装。
遇到上述问题我们可以直接执行 rpm -ivh *.rpm 命令进行安装,前提是所有的依赖包都已经下载了,这样才可以最终可以完成安装
3)安装完成后启动docker,并设置开机自启
4)使用hello-world镜像启动一个容器来验证docker是否安装成功
2. 不知道安装docker所需要的依赖包和相应版本进行安装
很多情况下可能不知道,安装一个软件都需要安装哪些依赖包,在有网的情况下我们直接使用yum进行安装会自动检测依赖并下载依赖进行安装十分的方便。但在没有网络的环境下就需要我们手动下载所有的依赖然后进行安装。这种情况可以在有网络的机器上下载好需要的安装包和依赖包然后复制到没有网络的机器上进行安装即可。
1)如果没有网络的机器上没有安装device-mapper-persistent-data、lvm2,在有网络的机器上下载device-mapper-persistent-data、lvm2 rpm包
# 下载device-mapper-persistent-data lvm2 包
[root@localhost docker]# yum install -y --downloadonly --downloaddir=/root/docker/ yum-utils device-mapper-persistent-data lvm2
如果没有网络的机器上已经安装了此包就不需要下载了,可以直接安装
# 安装 yum-utils,device-mapper-persistent-data lvm2系统如果带了可以选择不安装
[root@localhost docker]# yum install -y yum-utils device-mapper-persistent-data lvm2
2)在有网络的机器上添加yum源,这里添加的是国内阿里的镜像源
# 添加阿里镜像源
[root@localhost ~]# yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3)在有网络的机器上下载docker-ce的安装包和依赖包,这里安装的是默认版本(最新发布的稳定版本),如果需要安装指定版本可以参考在线安装中的指定版本安装命令,命令中加上--downloadonly --downloaddir参数即可
# docker-compose-plugin 非必须安装,根据需要选择是否安装
[root@localhost docker]# yum install -y --downloadonly --downloaddir=/root/docker/ \
docker-ce \
docker-ce-cli \
containerd.io \
docker-compose-plugin
4)将在有网络的机器上下载的rpm包,全部复制到没有网络的机器上,并安装下载的rpm包
复制完成后执行下面任意一条命令进行安装,这里使用的第二条命令
[root@localhost docker]# yum install /root/docker/*.rpm
或者
[root@localhost docker]# rpm -ivh /root/docker/*.rpm
5) 启动docker,设置开机自启,并查看docker运行状态
# 启动docker
[root@localhost docker]# systemctl start docker
# 设置开机自启
[root@localhost docker]# systemctl enable docker
# 查看docker状态
[root@localhost docker]# systemctl status docker
6)使用hello-world镜像启动一个容器来验证docker是否安装成功
[root@localhost docker]# docker run hello-world
3. 使用二进制文件进行安装(不建议使用此方法安装)
docker提供了二进制文件安装包,解压后即可使用,官方不建议在生产环境中使用二进制文件安装 Docker,因为它们不会使用安全更新自动更新。此页面上描述的 Linux 二进制文件是静态链接的,这意味着构建时依赖项中的漏洞不会由 Linux 发行版的安全更新自动修补,这里只做学习交流。
先决条件(官网说明)
在尝试从二进制文件安装 Docker 之前,请确保您的主机满足先决条件:
- 64位安装
- 版本 3.10 或更高版本的 Linux 内核。建议使用适用于您的平台的最新版本的内核。
iptables
版本 1.4 或更高版本git
1.7 或更高版本ps
可执行文件,通常由或类似procps
的包提供。- XZ Utils 4.9 或更高版本
- 正确安装 的
cgroupfs
层次结构;一个包罗万象的cgroup
安装点是不够的。请参阅 Github 问题 #2683、 #3485、 #4568)。
1)下载静态二进制文件下载地址,根据自己需要下载相应的版本,本文下载的时x86架构下的docker-20.10.9.tgz文件
2)把下载好的文件放到自己需要放置的目录,并解压压缩文件。
# 解压文件
[root@localhost docker]# tar -zxvf docker-20.10.9.tgz
3)文件解压后,将解压后docker目录下的命令全部cp到/usr/bin/下,这样便可以在系统任意地方执行这些命令,也可以不进行复制,不复制的话则必须在调用docker
或dockerd
命令时提供可执行文件的路径。
# 将命令复制到 /usr/bin/目录下
[root@localhost docker]# cp docker/* /usr/bin/
4)启动dockerd守护进程
[root@localhost docker]# dockerd &
或者
[root@localhost docker]# nohup dockerd >> /dev/null 2>&1 &
使用dockerd & 命令启动后控制台会输出日志信息可以直接按Ctrl+C结束打印即可
5)使用hello-world镜像启动一个容器来验证docker是否安装成功