学习Docker前提:多环境安装Docker

一、Docker 版本

Docker发展过程中衍生了以下版本,目前我们学习和使用提到的版本是docker-ce。

**Ixc:**上文中提到,Ixc是最早的linux容器技术,早期版本的docker直接使用Ixc来实现容器的底层功能。虽然使用者相对较少,但xc项目仍在持续开发演进中。

**libcontainer:**docker从 O.9 版本开始自行开发了libcontainer模块来作为Ixc 的替代品实现容器底层特性,并在1.10版本彻底去除了Ixc。在1.11版本拆分出runc后,libcontainer也随之成为了runc 的核心功能模块,runc后续变成了容器标准。

**moby:**moby是docker公司发起的开源项目,其中最主要的部分就是同名组件moby,事实上这个moby就是dockerd目前使用的开源项目名称,docker项目中的engine(dockerd)仓库现在就是从moby仓库fork而来的,使用containerd作为运行时标准。https://mobyproject.org/

**docker-ce:**docker的开源版本,CE指Community Edition。docker-ce中的组件来自于moby、containerd等其他项目。https://www.docker.com/pricing/

**docker-ee:**docker的收费版本,EE指Enterprise Edition。其基础组件来源和docker-ce是一样的,但附加了一些其他的组件和功能。https://www.docker.com/pricing/

二、Docker 官方网站

docker官方网址

三、Docker 架构

Docker 使用客户端 - 服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。 Docker 容器通过 Docker 镜像来创建。

Docker 仓库(Registry)

Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub供了庞大的镜像集合供使用。
Docker daemon

Docker daemon是服务器组件,是Docker最核心的后台进程,我们也把它称为守护进程。
Docker 客户端(Client)

Docker客户端通过命令行或者其他工具使用DockerAPI与Docker的守护进程通信。
Docker主机(Host)

一个物理或者虚拟的机器用于执行Docker守护进程和容器。
Docker 镜像(Images)

Docker镜像是用于创建Docker容器的模板。
Docker 容器(Container)

容器是独立运行的一个或一组应用。

四、Docker 生态

****新时代软件述求****

**数据量疯狂增长**

随着物联网、边缘计算等智能终端设备不断普及,受到来自物联网设备信号、元数据、
娱乐相关数据、云计算和边缘计算的数据增长的驱动,全球数据量呈现加速增长。根
据 IDC 分布的《数据时代 2025 》预测,全球数据量将从 2018 年的 33ZB 增至 2025
年的 175ZB ,增长超过 5 倍;中国平均增速快于全球 3% ,预计到 2025 年将增至
48.6ZB ,占全球数据圈的比例由 23.4% 提升至 27.8% 。其中,中国企业级数据量将从
2015 年占中国数据量的 49 %增长到 2025 年的 69 %。

**处理能力快速增加**

腾讯云全球服务器数量 100w+ ,数据量 EB+ ; 2020 年阿里云:在全国已建成 5 大超
级数据中心,阿里云在全球 22 个地域部署了上百个数据中心,服务器的总规模数已经
接近 200 万台。
某省疾控中心疫苗预约系统、全员核酸检测系统、健康码系统共 300 余台服务器,并
为核酸检测系统快速扩容计算和存储资源。

**软件需求爆发式增长**

软件发布频繁:
研发模式从瀑布开发演变为敏捷开发,原来 3 个月上一次新功能,现在两周一次,而开发过程中我们也经常遇到需要修改需求,然后变更再发布的情况。软件上线有问题需要快速回滚,对软件有着极强的版本管理和回滚诉求。
软件需要共享:
软件的研发人员、研发公司在设计、研发好一款软件的时候,如何方便的共享给他人,而又能快速的使用起来。
环境搭建复杂,技术种类繁多:
每个项目组使用的语言不一样,需要不同的环境,每个都得搞一套。每次都要从 yum
开始一个个完成部署安装,每次都有各种奇怪的问题,运维成本很高。

****Docker 解决方案****

云时代需要我们针对这些诉求有一套针对的解决方案。
我们要处理海量的数据,如何处理呢?
购买大量的服务器,并研发对应软件
开发的需求需要频繁的变更上线,如何才能将修改的代码快速的分发到几百或者几千台服务器呢?如何共享软件呢?
搞一个中心仓库,让各个服务器去下载软件包,安装,所以 CentOS 搞了 yum 仓库,
docker 设计了镜像仓库, docker hub 是公共的托管仓库。
软件设计好以后,怎么快速安装启动,有问题回滚呢?
将 docker 需要的所有信息设计一套软件格式,把所有的依赖搞进去,并打上版本标签,
这样不会换一个服务器各种问题,所以 Docker 设计了镜像。
不同的开发环境怎么搭建呢,一会 java,一会 c++?
docker 设计了镜像来应对,镜像里面存放了需要运行的环境,就像我们的 iPhone 内
置 ios ,我们的华为 mate 50 内置鸿蒙一样,一条命令就可以完成某个环境的搭建。

五、Docker 安装

Server 版本

桌面版本

5.1、Ubuntu****安装 Docker

****安装依赖****

操作系统版本:
Ubuntu Kinetic 22.10
Ubuntu Jammy 22.04 (LTS)
Ubuntu Focal 20.04 (LTS)
Ubuntu Bionic 18.04 (LTS)

CPU 支持:
ARM 和 X86_64
X86_64:是一个复杂指令级的,x86的它单核的性能非常高
ARM :则是个精简指令集的,它会有很多核来工作。

****安装Docker****

cpp 复制代码
// 1.查看机器是什么机器,确认系统版本是什么
cat /etc/*release*

// 2.确定CPU是什么类型, arm or x86
uname -a

// 3.卸载旧版本,如果是新购买的云服务器是没有的,比如输入 docker 并没有这个命令,就不需要卸载
sudo apt-get remove docker docker-engine

// 4.卸载历史版本
#卸载软件
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y
#删除目录
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

// 5.配置 docker 下载源
#curl 命令安装
sudo apt install curl -y
#创建 gpg key 目录
sudo mkdir -m 0755 -p /etc/apt/keyrings
#下载 gpg key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
echo \
 "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
 $(lsb_release -cs) stable" | sudo tee 
/etc/apt/sources.list.d/docker.list > /dev/null
#查看系统源
cat /etc/apt/sources.list
#查看Docker源
cat /etc/apt/sources.list.d/docker.list

// 6. 安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y       *此时可能会有引擎启动失败问题
**查看日志**
#journalctl是操作系统日志查看命令
#-e表示从末尾看
#-u表示看哪个系统组件的,我们的组件是docker,所以指令为:journalctl -eu docker

// 7.自动启动配置·
#配置加载
sudo systemctl daemon-reload 
#启动服务
sudo systemctl start docker 
#开启启动
sudo systemctl enable docker
#查看服务状态
sudo systemctl status docker

// 8.检查安装结果查看版本
docker version
docker info

// 9. 执行 hello-world 可以看到 Hello from Docker,表面 docker 服务正常
sudo docker run hello-world

****实战经验***

**Docker 镜像源修改**
对于使用 systemd 的系统( Ubuntu 16.04+ 、 Debian 8+ 、 CentOS 7 ), 如果是 腾讯云, 在配置文件 /etc/docker/daemon.json 中加入

cpp 复制代码
JSON
{
 "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}

如果是 阿里云 ,因为只对企业开放海外代理,只能找私人的一些开放的源,目前可以
使用的源如下

cpp 复制代码
{
 "registry-mirrors": [
     "https://docker.m.daocloud.io",
     "https://dockerhub.timeweb.cloud",
     "https://huecker.io"
 ]
}

重新启动 dockerd :

cpp 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

docker info 查看信息:

**Docker 目录修改**
Docker 默认的安装目录为 /var/lib/docker, 这里面会存放很多很多镜像,所以我们在安
装的时候需要考虑这个目录的空间,有三种解决方案。
( 1 )将 /var/lib/docker 挂载到一个大的磁盘,这种一般我们能控制挂载目录,像腾讯
云这种云厂商在安装 K8s 的节点的时候提供了挂载选项,可以直接挂载这个目录过去
( 2 )安装之前挂载一个大的磁盘,然后创建一个软链接到 /var/lib/docker ,这样就自
动安装到我们空间比较大的磁盘了
( 3 )安装了 docker ,然后发现忘了配置这个目录,我们需要修改 docker 的配置文件

cpp 复制代码
#假定我们磁盘的大的目录为 /data
mkdir -p /data/var/lib/docker 
# 编辑配置文件
vi /etc/docker/daemon.json
# 输入下面的 json
{
"data-root": "/data/var/lib/docker"
}
# 加载配置
sudo systemctl daemon-reload 
# 重启 docker
sudo systemctl restart docker 
#查看 docker 状态
sudo systemctl status docker

配置文件信息 /etc/docker/daemon.json

修改前在/var/lib/docker 下:

修改后在/data/var/lib/docker 下

5.2、CentOS 安装 Docker

****安装依赖****

操作系统版本:
CentOS 7 -- 停止更新已经不再支持
CentOS 8 (stream)
CentOS 9 (stream)

CPU 支持:
ARM 和 X86_64
X86_64:是一个复杂指令级的,x86的它单核的性能非常高
ARM :则是个精简指令集的,它会有很多核来工作。

****安装Docker****

cpp 复制代码
// 1.查看机器是什么机器,确认系统版本是什么
cat /etc/*release*

// 2.确定CPU是什么类型, arm or x86
uname -a

// 3.卸载旧版本,如果是新购买的云服务器是没有的,比如输入 docker 并没有这个命令,就不需要卸载
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest  \                                                    docker-latest-logrotate docker-logrotate docker-engine

// 4.卸载历史版本
#卸载软件
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
#删除目录
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

// 5.配置仓库
ll /etc/yum.repos.d/
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo
ll /etc/yum.repos.d/
#查看系统源
cat /etc/apt/sources.list
#查看Docker源
cat /etc/apt/sources.list.d/docker.list

// 6. 安装最新版本
sudo yum install -y docker-ce

// 7.启动 docker
#配置加载
sudo systemctl daemon-reload 
#启动服务
sudo systemctl start docker 
#开启启动
sudo systemctl enable docker
#查看服务状态
sudo systemctl status docker

// 8.检查安装结果查看版本
docker version
docker info

// 9. 执行 hello-world 可以看到 Hello from Docker,表面 docker 服务正常
sudo docker run hello-world

****实战经验***

与 Ubuntu安装 docker 的实战经验一样。

5.3、Windows 安装 Docker

****安装依赖****

确定开启虚拟化

输入 win+i ,然后输入启用或者关闭 windows 功能

选择 windows 子系统

重启电脑,完成系统设置
安装 WSL2

以管理员权限运行PowerShell
查看版本,如果不是2需要更新到2:wsl --status
PowerShell运行命令更新wsl到最新版本:wsl--update、
设置wsl默认版本:wsl--Set-default-version

通过微软应用商店安装Ubuntu22.04

启动:成功如下现象:

****安装Docker****

  1. 点击链接下载Docker: desktop.docker.com
  2. 下载好之后双击 Docker Desktop Installer.exe 开始安装
  3. 点击 Docker Desktop 桌面快捷方式运行 Dokcer
  4. 确认 Docker 安装成功, 在 PowerShell 中输入 docker version 命令确认 Client 和 Server 是否启动
相关推荐
信仰_2739932433 小时前
Eureka 多层缓存机制详解
缓存·云原生·eureka
路漫漫其修远兮sjw3 小时前
常用docker命令速查表
运维·docker·容器·模型部署
jscxy52063 小时前
笔记 TCP/IP协议栈
1024程序员节
大数据张老师3 小时前
数据结构——B+树的基本概念
数据结构·1024程序员节
l1t3 小时前
在DuckDB中使用http(s)代理
数据库·网络协议·http·xlsx·1024程序员节·duckdb
想你依然心痛3 小时前
仓颉语言第一课:从 HelloWorld 到鸿蒙原生 HTTP 服务
1024程序员节
byte轻骑兵3 小时前
医疗信创标杆实践:浙人医 LIS 系统异构多活容灾架构深度解析(附 KingbaseES 实战)
网络·架构·1024程序员节
2301_803554523 小时前
Http学习
网络协议·学习·http
SunnyDays10113 小时前
如何使用 Python 自动调整 Excel 行高和列宽
经验分享·1024程序员节