目录
Docker介绍
Docker优势
Docker组件
Docker CLI (命令行接口)
Docker Host (Docker 守护进程)
容器 (Container)
镜像 (Image)
仓库 (Registry)
关系总结
应用程序部署方式
传统部署 (Traditional Deployment)
虚拟化部署 (Virtualization Deployment)
容器部署 (Container Deployment)
总结
安装Docker
CentOS 移除旧版本docker
macOS 移除旧版本docker
安装/更新最新版本
一、配置 Docker Yum 源相关命令
1. sudo yum install -y yum-utils
2. sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
二、安装最新 Docker 相关命令
1. sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
三、启动 & 开机启动 Docker
1. systemctl enable docker --now
四、配置加速相关命令
1. sudo mkdir -p /etc/docker
2. sudo tee /etc/docker/daemon.json <<-'EOF' ... EOF
3. sudo systemctl daemon-reload
4. sudo systemctl restart docker
Docker介绍
Docker 官网: https://www.docker.com/
Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个轻量级的、可移植的容器中。
Docker优势
一致的环境
开发与生产环境一致性:Docker 确保应用程序在开发、测试和生产环境中运行一致。无论在哪个环境中,应用程序的行为都是相同的,因为所有的依赖项和配置都打包在容器中。
避免“在我的机器上可以运行”的问题:由于环境一致性,开发者可以避免因环境差异导致的运行问题。
隔离性
资源隔离:每个 Docker 容器都是独立的,它们之间相互隔离,不会相互干扰。这意味着你可以运行多个容器,每个容器都可以有自己的依赖项和配置,而不会影响其他容器。
安全性:由于隔离性,容器内的应用程序不会直接访问宿主机的资源,从而提高了安全性。
可移植性
跨平台运行:Docker 容器可以在任何支持 Docker 的平台上运行,无论是 Linux、Windows 还是 macOS。这使得应用程序可以在不同的环境中轻松部署。
云平台支持:大多数云服务提供商都支持 Docker,使得应用程序可以轻松地在不同的云环境中迁移和扩展。
快速部署和扩展
快速启动:Docker 容器启动速度非常快,通常只需几秒钟。这使得开发者在开发和测试过程中可以快速启动和停止容器。
水平扩展:Docker 容器可以轻松地进行水平扩展,通过启动多个容器实例来处理更多的请求。
版本控制和依赖管理
版本控制:Docker 镜像可以进行版本控制,开发者可以轻松地回滚到之前的版本,或者在不同的版本之间切换。
依赖管理:Docker 镜像包含了应用程序的所有依赖项,确保在不同的环境中运行时不会缺少任何依赖。
资源效率
轻量级:Docker 容器比虚拟机更轻量级,因为它们共享宿主机的操作系统内核,而不是每个容器都运行一个完整的操作系统。
资源利用率高:由于轻量级和高效的资源管理,Docker 容器可以更高效地利用系统资源。
社区和生态系统
丰富的镜像库:Docker Hub 提供了大量的公共镜像,开发者可以直接使用这些镜像来快速构建应用程序。
强大的生态系统:Docker 有庞大的社区支持和丰富的工具链,如 Kubernetes、Docker Compose 等,可以帮助开发者更高效地管理和部署容器化应用。
简化开发流程
简化开发环境配置:开发者可以使用 Docker 来定义开发环境,确保所有团队成员使用相同的环境进行开发。
简化测试流程:测试人员可以使用 Docker 容器来运行测试,确保测试环境与生产环境一致。
Docker组件
在 Docker 生态系统中,各个组件之间有着紧密的联系,共同协作以实现容器化应用的构建、分发和运行。以下是 Docker 中各个关键组件之间的关系:
Docker CLI (命令行接口)
定义:Docker CLI 是用户与 Docker 交互的主要工具。它提供了一组命令,允许用户管理 Docker 镜像、容器、网络和存储等资源。
作用:用户通过 Docker CLI 发送命令,这些命令会被发送到 Docker 守护进程(Docker Host)进行处理。
示例命令:docker run, docker build, docker pull, docker push 等。
Docker Host (Docker 守护进程)
定义:Docker Host 是运行 Docker 守护进程(dockerd)的机器。守护进程负责管理 Docker 对象,如容器、镜像、网络和卷等。
作用:Docker Host 接收来自 Docker CLI 的命令,并执行相应的操作。它还负责与 Docker 注册表(仓库)进行通信,以拉取或推送镜像。
关系:Docker Host 是 Docker CLI 和 Docker 容器之间的桥梁。
容器 (Container)
定义:容器是 Docker 中的运行实例,它是基于镜像创建的。容器包含了应用程序及其所有依赖项,并且与宿主机和其他容器隔离。
作用:容器提供了一个轻量级的、可移植的运行环境,使得应用程序可以在任何支持 Docker 的环境中运行。
关系:容器是基于镜像创建的,并且由 Docker Host 管理。容器可以被启动、停止、删除和迁移。
镜像 (Image)
定义:镜像是用于创建容器的只读模板。它包含了运行应用程序所需的所有文件、库、配置和依赖项。
作用:镜像是容器的构建块,它定义了容器的行为和环境。镜像可以通过 Dockerfile 构建,也可以从 Docker 仓库中拉取。
关系:镜像是容器的蓝图,容器是镜像的运行实例。镜像可以被推送到 Docker 仓库,也可以从仓库中拉取。
仓库 (Registry)
定义:仓库是存储和分发 Docker 镜像的地方。Docker Hub 是最常用的公共仓库,但也可以使用私有仓库。
作用:仓库允许用户共享和分发镜像,使得团队成员可以轻松获取和使用相同的镜像。
关系:Docker Host 可以从仓库中拉取镜像,也可以将本地构建的镜像推送到仓库。Docker CLI 提供了 docker pull 和 docker push 命令来与仓库交互。
关系总结
Docker CLI 是用户与 Docker 交互的接口,用户通过它发送命令。
Docker Host 是运行 Docker 守护进程的机器,负责处理 Docker CLI 的命令并管理容器和镜像。
容器 是基于镜像创建的运行实例,由 Docker Host 管理。
镜像 是容器的只读模板,定义了容器的行为和环境。
仓库 是存储和分发镜像的地方,Docker Host 可以从仓库中拉取镜像,也可以将本地镜像推送到仓库。
通过这些组件的协作,Docker 提供了一个完整的容器化解决方案,使得应用程序的构建、分发和运行变得更加简单和高效。
应用程序部署方式
传统部署、虚拟化部署和容器部署是三种不同的应用程序部署方式,它们在资源利用、隔离性、可移植性和管理复杂性等方面有着显着的区别。以下是它们的详细比较:
传统部署 (Traditional Deployment)
特点:
- 直接在物理服务器上运行:应用程序直接安装在物理服务器上,使用服务器的操作系统及其资源。
- 资源共享有限:多个应用程序通常不能在同一台物理服务器上运行,因为它们可能会相互干扰。
- 环境依赖性强:应用程序对操作系统和服务器环境的依赖性强,环境差异可能导致应用程序无法正常运行。
- 扩展性差:扩展应用程序通常需要增加物理服务器,成本高且管理复杂。
优点:
- 简单直接:部署过程相对简单,不需要额外的虚拟化或容器化技术。
- 性能高:直接在物理硬件上运行,性能通常较高。
缺点:
- 资源利用率低:物理服务器的资源利用率通常较低,因为多个应用程序不能共享同一台服务器。
- 环境一致性差:开发、测试和生产环境可能存在差异,导致“在我的机器上可以运行”的问题。
- 扩展性差:扩展应用程序需要增加物理服务器,成本高且管理复杂。
虚拟化部署 (Virtualization Deployment)
特点:
- 在虚拟机上运行:应用程序运行在虚拟机(VM)中,每个虚拟机都有自己的操作系统(Guest OS)。
- 资源隔离:每个虚拟机相互隔离,不会相互干扰,提高了安全性。
- 资源共享:多个虚拟机可以运行在同一台物理服务器上,提高了资源利用率。
- 可移植性:虚拟机可以在不同的物理服务器之间迁移,提高了可移植性。
优点:
- 资源利用率高:多个虚拟机可以共享同一台物理服务器的资源,提高了资源利用率。
- 隔离性好:每个虚拟机相互隔离,提高了安全性。
- 可移植性好:虚拟机可以在不同的物理服务器之间迁移,提高了可移植性。
缺点:
- 性能开销:虚拟机需要运行完整的操作系统,性能开销较大。
- 启动时间长:虚拟机启动时间较长,通常需要几分钟。
- 管理复杂:虚拟机的管理和维护相对复杂,需要专门的虚拟化管理工具。
容器部署 (Container Deployment)
特点:
- 在容器中运行:应用程序运行在容器中,容器共享宿主机的操作系统内核。
- 轻量级:容器比虚拟机更轻量级,因为它们不需要运行完整的操作系统。
- 资源隔离:容器之间相互隔离,不会相互干扰,提高了安全性。
- 快速启动:容器启动速度非常快,通常只需几秒钟。
- 可移植性:容器可以在任何支持 Docker 的环境中运行,提高了可移植性。
优点:
- 轻量级:容器比虚拟机更轻量级,资源利用率高。
- 快速启动:容器启动速度非常快,通常只需几秒钟。
- 可移植性好:容器可以在任何支持 Docker 的环境中运行,提高了可移植性。
- 环境一致性好:开发、测试和生产环境一致,避免了“在我的机器上可以运行”的问题。
缺点:
- 隔离性相对较弱:虽然容器之间相互隔离,但隔离性不如虚拟机强。
- 依赖宿主机内核:容器依赖宿主机的操作系统内核,因此在不同操作系统上运行可能会有兼容性问题。
总结
通过以上比较可以看出,容器部署在资源利用率、启动时间、可移植性和环境一致性等方面具有显着优势,但在隔离性和对宿主机内核的依赖性方面存在一定的局限性。虚拟化部署则在隔离性和资源利用率方面表现较好,但性能开销和管理复杂性较高。传统部署则相对简单直接,但在资源利用率和环境一致性方面存在明显不足。
安装Docker
国内常见云平台:
阿里云、腾讯云、华为云、青云……使用 CentOS 7.9.
在安装 Docker Engine 之前,您需要卸载所有有冲突的软件包。
您的 Linux 发行版可能提供了非官方的 Docker 软件包,这些软件包可能会与 Docker 提供的官方软件包冲突。您必须在安装 Docker Engine 正式版之前卸载这些软件包。
CentOS 移除旧版本docker
-
docker
:这是旧版本Docker的基础软件包,包含了Docker的核心功能,如容器的创建、管理等。 -
docker-client
:Docker客户端工具,用于用户与Docker守护进程进行交互,执行各种容器操作命令,如docker run
、docker ps
等。 -
docker-client-latest
:旧版本Docker中用于提供最新客户端功能的软件包,可能包含一些新特性或改进的客户端功能。 -
docker-common
:包含一些Docker通用的配置文件、脚本等,用于不同版本Docker软件包之间的共享。 -
docker-latest
:旧版本Docker中用于提供最新版本Docker守护进程及相关功能的软件包。 -
docker-latest-logrotate
:用于管理最新版本Docker日志轮转的工具,确保Docker日志文件不会无限增长,能够按照一定规则进行备份和清理。 -
docker-logrotate
:管理旧版本Docker日志轮转的工具,功能与docker-latest-logrotate
类似,但针对的是旧版本Docker的日志管理。 -
docker-engine
:旧版本Docker的引擎软件包,是Docker容器运行的核心组件,负责容器的调度、资源管理等关键功能。
# CentOS 移除旧版本docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
卸载 Docker Engine
-
docker-ce
:Docker社区版(Community Edition)的软件包,是Docker的开源版本,包含了Docker的核心功能。 -
docker-ce-cli
:Docker社区版的客户端工具软件包,用于用户与Docker守护进程进行交互,与docker-client
类似,但在新的软件包命名体系下,它是独立的软件包。 -
containerd.io
:containerd是一个开源的容器运行时,Docker在运行容器时会依赖containerd来管理和执行容器的底层操作。删除这个软件包是为了彻底移除与Docker相关的容器运行时组件。
sudo yum remove docker-ce docker-ce-cli containerd.io
删除 Docker 数据:
/var/lib/docker
目录是Docker默认的数据存储目录,里面包含了所有容器的镜像、容器数据、网络配置、卷等信息。删除这个目录会彻底清除Docker创建的所有数据,包括已经下载的镜像、运行过的容器数据等,相当于对Docker的数据进行了“格式化”。
/var/lib/containerd
目录是containerd的默认数据存储目录,里面存储了containerd运行时的一些数据和状态信息。删除这个目录是为了清除containerd相关的数据,进一步确保与Docker相关的底层数据被彻底清理。
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
删除 Docker 配置文件(可选):
/etc/docker
目录是Docker的配置文件目录,里面包含了Docker的全局配置文件,如daemon.json
等。这些配置文件用于设置Docker守护进程的运行参数,如镜像加速器配置、日志级别等。删除这个目录会移除所有自定义的Docker配置,使Docker恢复到默认配置状态。
sudo rm -rf /etc/docker
卸载 Docker Compose(如果安装了)
/usr/local/bin/docker-compose
是Docker Compose的可执行文件路径。Docker Compose是一个用于定义和运行多容器Docker应用的工具,通过YAML文件来配置应用的服务、网络和卷等。删除这个文件可以卸载Docker Compose,使其不再可用。
sudo rm /usr/local/bin/docker-compose
macOS 移除旧版本docker
卸载 Docker Desktop
打开“应用程序”文件夹:
在 Finder 中,导航到“应用程序”文件夹。
删除 Docker Desktop:
找到“Docker”应用程序,将其拖到“废纸篓”中。
清空废纸篓:
右键点击“废纸篓”图标,选择“清空废纸篓”。
删除 Docker 数据(可选):
打开终端,运行以下命令删除 Docker 数据:
rm -rf ~/Library/Containers/com.docker.docker
rm -rf ~/Library/Application\ Support/Docker\ Desktop
rm -rf ~/Library/Group\ Containers/group.com.docker
安装/更新最新版本
官网完整手册: https://docs.docker.com/desktop/install/linux/
一、配置 Docker Yum 源相关命令
1. sudo yum install -y yum-utils
这个命令的作用是安装 yum-utils
这个软件包。yum-utils
是一个包含多个实用工具的集合,用于增强 Yum(Yellowdog Updater Modified)的功能。Yum 是 CentOS 等基于 RPM(Red Hat Package Manager)的 Linux 发行版中的包管理器,用于安装、更新、查询和删除软件包。通过安装 yum-utils
,我们可以使用其中的 yum-config-manager
工具来管理 Yum 源(repository)配置文件。
-
参数解释:
-
sudo
:以超级用户(root)权限执行命令,因为修改系统配置文件等操作需要管理员权限。 -
yum
:包管理器。 -
install
:指定要进行安装操作。 -
-y
:自动回答“yes”,在安装过程中如果遇到需要用户确认的提示(如是否继续安装等),会自动选择“yes”,这样可以避免手动干预,使安装过程更顺畅。 -
yum-utils
:要安装的软件包名称。
-
2. sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
这个命令的作用是添加阿里云的 Docker Yum 源。通过这个命令,我们可以将阿里云提供的 Docker 软件仓库添加到系统的 Yum 源列表中,这样后续就可以从阿里云的镜像服务器上下载和安装 Docker 相关软件包,通常能获得更快的下载速度。
-
参数解释:
-
sudo
:以管理员权限执行。 -
yum-config-manager
:用于管理 Yum 源配置的工具。 -
--add-repo
:指定要添加的 Yum 源仓库文件。这个参数后面跟的是仓库文件的 URL 地址,http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
就是阿里云提供的 Docker Yum 源的仓库文件地址。这个文件包含了仓库的配置信息,如仓库的名称、URL、是否启用等。
-
二、安装最新 Docker 相关命令
1. sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
这个命令的作用是安装 Docker 相关软件包。这个命令会从之前配置好的 Yum 源(包括阿里云的 Docker 源等)中下载并安装 Docker 的各个组件,包括 Docker Engine(docker-ce
)、Docker CLI(docker-ce-cli
)、containerd(containerd.io
)、Docker Buildx 插件(docker-buildx-plugin
)和 Docker Compose 插件(docker-compose-plugin
)。
-
参数解释:
-
sudo
:以管理员权限执行。 -
yum
:包管理器。 -
install
:安装操作。 -
-y
:自动回答“yes”。 -
docker-ce
:Docker Engine 社区版,是运行容器的核心组件。 -
docker-ce-cli
:Docker CLI(命令行界面)工具,用于与 Docker Engine 交互,执行各种 Docker 命令,如docker run
、docker build
等。 -
containerd.io
:containerd 是一个开源的容器运行时,Docker Engine 依赖它来管理容器的生命周期。这个软件包提供了 containerd 的核心功能。 -
docker-buildx-plugin
:Docker Buildx 插件,它扩展了 Docker CLI 的构建功能,允许用户创建多平台的 Docker 镜像,这对于构建跨不同架构(如 ARM、AMD64 等)的镜像非常有用。 -
docker-compose-plugin
:Docker Compose 插件,Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过这个插件,用户可以使用docker compose
命令来管理多个容器的部署,例如在一个docker-compose.yml
文件中定义多个服务(容器),然后一键启动、停止或更新这些服务。
-
三、启动 & 开机启动 Docker
1. systemctl enable docker --now
这个命令的作用是启用 Docker 服务,并立即启动它。systemctl
是一个用于控制 systemd 系统和服务管理器的命令,它可以用来启动、停止、重启服务,以及设置服务的开机启动等。
-
参数解释:
-
systemctl
:用于控制 systemd 系统和服务管理器的命令。 -
enable
:启用服务,使其在系统启动时自动启动。 -
docker
:指定要操作的服务名称,这里是 Docker 服务。 -
--now
:立即启动服务。这个参数是一个快捷方式,等同于先执行systemctl enable docker
,然后执行systemctl start docker
。
-
四、配置加速相关命令
1. sudo mkdir -p /etc/docker
这个命令的作用是创建 /etc/docker
目录。如果这个目录已经存在,命令不会报错。mkdir
是创建目录的命令,-p
参数表示如果父目录不存在,则会一并创建。
-
参数解释:
-
sudo
:以管理员权限执行。 -
mkdir
:创建目录的命令。 -
-p
:如果父目录不存在,则会一并创建。 -
/etc/docker
:要创建的目录路径。
-
2. sudo tee /etc/docker/daemon.json <<-'EOF' ... EOF
这个命令的作用是创建或覆盖 /etc/docker/daemon.json
文件,并写入配置内容。tee
命令用于将输出同时写入到文件和标准输出(屏幕)。这里使用了重定向和 Here Document 的方式来写入配置内容。
-
参数解释:
-
sudo
:以管理员权限执行。 -
tee
:将输出同时写入到文件和标准输出。 -
/etc/docker/daemon.json
:要写入的文件路径。 -
<<-'EOF'
:Here Document 的开始标记,EOF
是一个约定的结束标记,表示后续的内容将作为输入传递给tee
命令。 -
...
:这里省略了具体的配置内容,实际使用时应该填写配置内容,例如:{ "registry-mirrors": [ "https://mirror.ccs.tencentyun.com" ] }
这段配置表示设置 Docker 的镜像加速器为腾讯云的镜像加速器。
-
当你修改了 Docker 的 daemon.json 配置文件后,通常需要重启 Docker 服务以使更改生效。
3. sudo systemctl daemon-reload
这个命令的作用是重新加载 systemd 的配置文件。当修改了服务的配置文件后,需要执行这个命令使配置生效。
-
参数解释:
-
sudo
:以管理员权限执行。 -
systemctl
:用于控制 systemd 系统和服务管理器的命令。 -
daemon-reload
:重新加载 systemd 的配置文件。
-
4. sudo systemctl restart docker
这个命令的作用是重启 Docker 服务。重启服务可以使新的配置生效。
-
参数解释:
-
sudo
:以管理员权限执行。 -
systemctl
:用于控制 systemd 系统和服务管理器的命令。 -
restart
:重启服务。 -
docker
:指定要操作的服务名称,这里是 Docker 服务。
-
通过这些命令,你可以成功配置 Docker 的 Yum 源,安装 Docker,启动 Docker 服务,并配置镜像加速器。