1 安装Docker
1.1 设置系统语言
因为操作过程中不可避免地出现中文内容,故首先把OS语言设置一下,以防在数据库安装和Docker Repository中展示docker-ce的可用源列表时出现中文乱码问题;
进行下述语言和字符编码设置之前,确保你已经安装了中文字体;下述命令安装的中文语言包在绝大多数Linux发行版上都能很好地支持中文显示:
sudo yum install wqy-zenhei-fonts
# 或
sudo yum install wqy-microhei-fonts
使用vi / vim或nano等编辑文件,往.bashrc中添加如下内容,设置系统字符编码格式为UTF-8:
cd ~
vim .bashrc
# 在.bashrc文件的末尾添加如下内容:
# Set language environment
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
对新增的参数LANG和LC_ALL解释如下:
- LANG:设置主要的语言和地区
- LC_ALL:覆盖所有其他
LC_*的变量,强制使用指定的语言和地区
接下来,确保.bash_profile文件中包含.bashrc,这样在登录时也会应用这些设置。确保在.bash_profile中下述代码存在,若不存在则须自行添加:
# Source .bashrc if it exists
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
完成上述两步骤后,使用source命令持久化上述更改:
source ~/.bashrc
最后,验证上述更改是否生效:
echo $LANG
echo $LC_ALL
这会打印语言设置。若输出显示为 zh_CN.UTF-8,则说明你已成功设置系统语言。
1.2 前置依赖包准备
不指定具体版本情况下更新系统包并不推荐,因为可能会导致切换到不稳定版本导致莫名其妙的依赖问题。如果仍想要确保安装的包和依赖是最新的,运行以下命令:
sudo yum update -y
【Docker本体】的依赖项包括yum-utils, device-mapper-persistent-data, lvm2等,其安装命令在下面给出:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- yum-utils:简单来说,【yum-utils】是对【yum本体】的拓展;安装【yum-utils】能够提供提供额外的命令和安装选项,用于补充【yum本体】中找不到的目标包等。
- device-mapper-persistent-data:【Device Mapper】是Linux内核中的一项功能,旨在为块设备提供映射层,使得可以通过它在物理设备之上创建虚拟设备 / 构建更复杂的存储配置,如RAID、LVM、磁盘加密等;而【device-mapper-persistent-data】是【Device Mapper】的一个用户空间库,提供了一些工具和持久化数据存储功能。在Docker中,当Docker使用【Device Mapper】存储驱动时,【device-mapper-persistent-data】用于管理Docker容器的存储层。
- lvm2:【lvm2】是【LVM】的用户空间工具集,它包括了一些命令行工具,用于管理逻辑卷、卷组和物理卷;在作为Docker依赖项的场景下,Docker的【devicemapper存储驱动】可以利用LVM来管理容器的存储。通过 LVM,Docker 可以创建快照和克隆镜像,从而提高容器的启动速度和存储管理的效率。
总体上,【device-mapper-persistent-data】和【lvm2】都与Docker的分层存储密切相关。
上述依赖添加完成后,我们这里选择通过给yum添加docker官方仓库的方式安装Docker本体。首先在yum中添加 Docker 的官方仓库:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
1.3 Docker本体安装
Docker分为Desktop(桌面版)、CE(Community Edition)和EE(Enterprise Edition)版本:
- Docker CE:开源免费,面向开发者和小型团队,分为稳定版和测试版;其中稳定版每季度发布一次,提供较长的支持周期,适用于需要稳定环境的用户。
- Docker EE:是一个订阅服务,提供企业级支持和认证容器、插件和管理工具,适合大规模生产环境。在安全性、可扩展性(支持高可用性和负载均衡等企业级功能)、官方技术支持和保证等方面具有优势。Docker EE同样分为稳定版和测试版,但每个版本的支持周期比Docker CE长。
- Moby Project:Docker 的核心组件已经迁移至名为 Moby 的开源项目,Moby 旨在推动容器生态系统的开发。Docker CE 由 Moby 项目支持,而 Docker EE 则由 Docker 公司直接支持和维护。
- Docker Desktop:Docker Desktop 是为 【macOS】 和【 Windows】 设计的 Docker 应用程序,提供图形化界面,简化了安装环境;同时包括了一个单节点的Kubernetes集群,可以一键启用,允许开发者在本地测试和开发Kubernetes配置。
在主流Linux发行版中一般使用CE版本安装Docker CE(Community Edition)。
给出安装Docker CE的命令如下::
sudo yum install -y docker-ce docker-ce-cli containerd.io
上述命令中的【docker-ce】、【docker-ce-cli】和【containerd.io】分别是Docker CE的核心组件,对其解析如下:
- docker-ce:docker-ce是Docker CE的主要包,包含了Docker Engine和Docker Daemon,负责管理和创建Docker容器;
- docker-ce-cli:docker-ce-cli是Docker的命令行界面工具包,提供了Docker命令行工具,允许用户与Docker Daemon进行交互,是用户执行所有Docker相关命令的接口;
- containerd.io:严格来说器名为是containerd,而containerd.io是其项目官网域名;它是一个轻量级的开源容器,与OS交互,在架构中扮演中间件的角色,提供必要的服务以支持上层的Docker Engine和其他可能的客户端;是Docker Engine的核心依赖之一,处理低级别的容器管理任务,一开始作为Docker Engine的一部分,后来被拆分出来作为一个独立的项目进行开发,以支持更广泛的容器生态系统需求,并为例如Kubernetes的其他工具或系统提供服务。
Docker Engine和containerd体现了一种分层关系。containerd专注于性能和可靠性,保证容器的有效和安全运行;而Docker Engine集中于用户体验和高级功能。
安装完成后,启动Docker服务并配置其为开机自启动:
sudo systemctl start docker
sudo systemctl enable docker
运行docker --version命令,验证Docker是否安装成功。命令及其返回结果如下:
[dmdba@VM-8-6-centos ~]$ docker --version
Docker version 26.1.4, build 5650f9b
很多情况下,公共的Docker Hub访问会遇到网络问题导致镜像无法被pull下来。我们这里通过配置阿里云镜像加速器来解决这一问题:
sudo vim /etc/docker/daemon.json
在daemon.json文件中添加如下内容(若没有该文件则自行创建):
{
"registry-mirrors": ["https://<加速器地址>"]
}
获取加速器地址需要一个属于自己的Aliyun账号;若已有账号,可直接前往镜像加速器页获取地址和不同系统的配置步骤。
接下来尝试运行一个测试容器来验证Docker是否正常工作。输入命令和执行结果如下:
[dmdba@VM-8-6-centos ~]$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
至此,完整的Docker安装过程已完成。
1.4 Docker Pull与Docker Push的超时、循环Retry问题解决
问题出在网络上,至于原因…当然是由于一些众所周知的不便。
1.4.1 Docker Pull
Docker Pull的解决方式相对简单,只要在Docker配置文件/etc/docker/daemon.json中配置镜像源即可,其关键在于找到真正可用的镜像源。在本文的过程中我尝试了Aliyun、Tencentyun的镜像配置,但仍旧无法解决问题,而我的ECS由后者提供;至于后来能够跑通是由于找到了另外可用的镜像源。对配置文件内容编辑的基本格式如下:
{
"registry-mirrors": [
"placeholder_1"
],
"dns": [
"placeholder_2"
]
}
在上述两个占位符placeholder_1和placeholder_2的位置分别可以配置镜像源地址和DNS。前者是必需项,而后者可以在能够改善解析速度的情况下选择性编辑。
1.4.2 Docker Push
在配置镜像源之后,没有解决我的Docker Push的超时问题。查阅资料得到以下几种可行的思路:
- Github Actions充当Proxy,利用其给个人分配的VM Env(每次都会初始化,IP随机,但会预装Docker),首先将Image推送到Actions VM,再由Actions VM推送到Docker Hub Repository。✅
- 多找几个备用的镜像地址(不过据反馈大部分知名的运作主体都发公告宣布不再提供支持或直接不可用)
- 挂全局代理(具体略)
- 自建Registry镜像站
- Cloudflare加速
- Nginx反代
最后选用了第一种:将Github Actions服务器来充当此处的Proxy,作为Docker Push命令的跳板,把我们的Docker Image推送到Docker Hub的对应仓库。当然,这需要Proxy预安装了Docker;目前,默认情况下VM环境预装的操作系统为ubuntu-latest,其他的工具和软件包括常见的编程语言及其构建工具、用于版本控制的Git和SVN、容器和虚拟化产品、数据库和CI/CD功能等;而Docker就包含在其中。
按照Github Actions官方文档,新建Github仓库docker_image_proxy,在Project Root下新建.github/workflow/docker-publish.yml,在yml中按照规定的格式编辑名为Push Docker Image的workflow,每个workflow都会指定名称、触发方式</

最低0.47元/天 解锁文章
DM8 Docker安装部署&spm=1001.2101.3001.5002&articleId=141252136&d=1&t=3&u=a2b618835ed34af796ccb49b4655c34b)
1749

被折叠的 条评论
为什么被折叠?



