44 Docker:安装与容器管理

文章目录

前言

本文档聚焦 Docker 发展与简介Docker 容器管理 两大核心章节,系统梳理容器化技术的演进背景、核心概念、镜像与容器操作命令及其实验流程。内容严格遵循"理论+实操"结构,保留所有关键命令、配置路径、端口号及操作细节,便于教学与后期查阅。

  1. 云服务
    1. 云服务(基础设施IaaS、平台PaaS、软件DaaS、数据DaaS)
    2. 云厂商:阿里云、腾讯云、华为云、Google云、AWS云,百度云、西部数码、天翼云。
  2. 虚拟化
    1. 虚拟化架构:全虚拟化、半虚拟化;裸金属虚拟化、宿主型虚拟化。
    2. 虚拟化产品:VMware、Openstack、KVM、VirtualBox、Hyper-V
    3. 实现IaaS服务的核心技术(但并非IaaS本身)
  3. 容器
    1. 轻量级
    2. 多台主机上可以在同环境上运行
    3. 实现PaaS服务的核心技术(但并非PaaS本身)
  4. 容器和虚拟化的区别
    1. 虚拟机安装完整操作系统,占用资源大,启动比较慢。
    2. 容器共享宿主机内核,只包含应用和依赖关系,占用资源小,启动快。
  5. 日常使用的容器产品
    1. Docker
    2. Podman
    3. Kubernetes
    4. Containerd/CRI-O
    5. OpenShift
  6. 容器技术的使用场景
    1. 云原生
    2. 混合云
    3. 微服务
  7. Docker概述(logo)
    1. 大鲸鱼:代表宿主机
    2. 集装箱:隔离出来的容器
  8. Docker版本
    1. 社区版(CE)
    2. 企业版(EE)
  9. Docker六大命名空间
    1. 挂载点隔离
    2. 网络隔离
    3. 进程ID隔离
    4. 进程通信隔离
    5. 用户/组隔离
    6. 主机名/域名隔离
  10. Docker架构与组件
    1. Docker Daemon:后台服务进程(dockerd)。
    2. Client:命令行工具(docker),与 Daemon 通信。
    3. Images:只读模板,用于创建容器。
    4. Registry:镜像仓库(如 Docker Hub)。
    5. Container:镜像的运行实例。
  11. Docker核心技术
    1. Namespace:实现资源隔离。
    2. Cgroup:实现 CPU、内存等资源限制。
    3. Copy-on-Write (CoW):基于 UnionFS 的高效文件操作。
  12. 核心概念
    1. 镜像(Image):应用模板。
    2. 容器(Container):运行实例
    3. 仓库(Repository):存放镜像的地方。
  13. Docker管理命令:pull(拉取镜像)、push(上传镜像)、rmi(删除镜像)、(删除容器下节内容)、tag(标签)、image(查看镜像)、save(导出镜像)、load(导入镜像)、info(Docker系统信息)、--version(版本信息)

什么有人称 Docker 为"虚拟化"?

在广义语境下,"虚拟化"有时被泛化为"资源抽象与隔离",于是:

  • 硬件虚拟化(Hardware Virtualization):VMware、KVM
  • 操作系统虚拟化(OS-level Virtualization):Docker、LXC、Solaris Zones
  • 应用虚拟化 :Java VM、.NET CLR(更抽象)
    但这些只是术语分类,技术实现方式完全不同。

理论部分

1_发展与简介

Docker 是一种开源的容器化平台,通过将应用程序及其依赖打包为标准化单元(容器),实现"一次构建,到处运行"的部署目标。

1.1_云服务与虚拟化基础

① 云服务模型介绍

云计算按服务层级分为四类:

  • IaaS(基础设施即服务):提供虚拟机、存储、网络等底层资源(如 AWS EC2)。用户需自行安装 OS 和应用。
  • PaaS(平台即服务):提供开发和运行环境(如 Heroku),开发者只需关注代码。
  • SaaS(软件即服务):直接使用云端软件(如 Gmail),无需维护。
  • DaaS(数据即服务):提供数据存储与分析能力(如 Snowflake)。

各模型灵活性递减,运维复杂度递增。

主流云厂商:阿里云、腾讯云、AWS、Google Cloud、华为云等,提供计算、存储、CDN 等服务。

② 虚拟化技术概述

虚拟化是云服务的基础,主要类型包括:
全虚拟化

  • 虚拟机不知道自己是虚拟机。
  • Hypervisor 完全模拟硬件(如 VMware),兼容多 OS,但性能损耗大。
    半虚拟化
  • 虚拟机知道自己是虚拟机。
  • Guest OS 与 Hypervisor 协作(如 Xen),性能更优,需修改内核。
    裸金属虚拟化
  • 虚拟化系统(Hypervisor)直接接管硬件。
    宿主型虚拟化:
  • 虚拟化系统寄居在宿主机操作系统上。
③ 虚拟化产品

企业主流产品:

  • VMware:企业级,支持 ESXi/vSphere。
  • Hyper-V:微软 Windows Server 内置方案。
  • VirtualBox:跨平台个人开发工具。
  • KVM:Linux 内核原生虚拟化模块。

大型虚拟化产品推荐:Openstack

  • 可编程的云操作系统,多地区部署,统一管理,支持私有转公有。
  • OpenStack 的强大之处:统一入口,异构整合 ,可以通过开发插件、驱动或集成方式,与大量第三方产品(计算资源)协同工作。例如:KVM/QEMU(默认)、VMware vSphere (via vmwareapi)等。

个人产品推荐:Proxmox VE

  • 开箱即用的虚拟化一体机,架构简洁,去中心化的web管理,一个OS镜像就可以实现分布式部署和虚拟化管理,不需要复杂的模块参与。
  • 裸金属虚拟化(Type-1) + 同时支持全虚拟化和容器虚拟化(LXC)。
  • 基于Debian Linux系统,运行稳定,功能完善(定时备份、邮件提醒等),开源免费。
  • 支持丰富的存储方式,可以配合Ceph提供虚拟机的高可用(HA)。
  • 但集群规模有上限(建议 ≤32 节点),且不原生支持openstack接口,适合中小企业开支有限的私有云。

1.2_Docker简介及其重要性

① 为什么使用 Docker?

传统虚拟机每个实例需完整 OS,资源开销大;Docker 容器共享宿主机内核,仅隔离进程、文件系统等,启动快(秒级)、资源占用少(单机可运行上千容器)。

类比:集装箱(容器) vs 整艘货轮(虚拟机)。

② Docker 发展历史(关键节点)
  • 2013年:Docker 项目发布(Solomon Hykes, DotCloud)。
  • 2017年:推出 CE(社区版)与 EE(企业版)。
  • 2018年:集成 Kubernetes,支持多阶段构建。
  • 2019年:支持 GPU 加速。
  • 2020年后:聚焦开发者体验,强化 CI/CD 与云原生支持。
③ Docker 版本:CE vs EE
特性 Docker CE Docker EE
目标用户 个人/小团队 企业生产环境
费用 免费 付费
发布周期 月度 长期支持
④ Docker 与传统虚拟化区别
对比项 Docker 容器 虚拟机
启动速度 秒级 分钟级
计算损耗 几乎无 ~50%
单机支持量 上千 几十
隔离性 Namespace/Cgroup 完全硬件隔离
⑤ 容器化技术生态系统
  • Docker:最流行容器引擎。
  • Kubernetes:容器编排事实标准。
  • Podman:无守护进程替代品。
  • Containerd/CRI-O:底层运行时(K8s 使用)。
  • OpenShift:Red Hat 的企业 K8s 平台。
⑥ Docker 核心优势
  • 移植性:镜像跨平台一致运行。
  • 隔离性:容器间互不影响。
  • 高效性:轻量、快速启动。
  • 简化部署:标准化交付单元。
⑦ 应用场景
  • CI/CD 流水线(环境一致性)
  • 微服务架构(独立部署)
  • 多云/混合云迁移(无缝切换)

1.3_Docker基础概念

  • 蓝色鲸鱼:宿主机
  • 集装箱:容器
  • 大海:操作系统(Linux/Windows)

设计宗旨:Build, Ship and Run Any App, Anywhere

② Linux 六大命名空间(Namespace)
缩写 作用
MNT 文件系统挂载点隔离
NET 网络栈(网卡、路由)隔离
PID 进程 ID 隔离
IPC 进程间通信隔离
UTS 主机名/域名隔离
USER 用户/组 ID 隔离
③ Docker 架构组件
  • Docker Daemon :后台服务进程(dockerd)。
  • Client :命令行工具(docker),与 Daemon 通信。
  • Images:只读模板,用于创建容器。
  • Container:镜像的运行实例。
  • Registry:镜像仓库(如 Docker Hub)。
④ 核心技术
  • Namespace:实现资源隔离。
  • Cgroup:实现 CPU、内存等资源限制。
  • Copy-on-Write (CoW):基于 UnionFS 的高效文件操作。
⑤ 核心概念
  • 镜像(Image):包含应用及依赖的只读模板。
  • 容器(Container):镜像的运行实例,具独立文件系统、网络、进程空间。
  • 仓库(Repository):存放镜像的地方(Docker Hub 为公共仓库)。

2_容器管理

容器管理涵盖镜像操作与容器生命周期控制。

2.1_Docker镜像操作

镜像是容器的基础,管理包括:

  • 搜索docker search <关键词>
  • 拉取docker pull <镜像>
  • 查看docker images
  • 打标签docker tag <源> <新标签>
  • 导出/导入docker save / docker load
  • 删除docker rmi

镜像由多层组成,每层对应 Dockerfile 一条指令;latest 为默认标签,建议使用明确版本号(如 v1.0)。

2.2_Docker容器操作

容器生命周期:创建 → 启动 → 停止 → 删除

关键行为:

  • 容器默认停止状态 ,需 docker startdocker run 启动。
  • 容器存活依赖 PID=1 的前台进程,该进程退出则容器停止。
  • 支持 7 种状态:created, running, restarting, removing, paused, exited, dead。

常用操作:

  • 创建docker create
  • 启动/停止docker start/stop
  • 后台运行docker run -d
  • 交互进入docker exec -it
  • 文件传输docker cp
  • 导出/导入docker export / docker import
  • 删除docker rm

docker run = docker create + docker start


实验部分

1_Docker 安装与配置

1.1_安装 Docker CE

① 关闭防火墙与 SELinux

shell 复制代码
systemctl stop firewalld.service
setenforce 0

避免网络策略干扰 Docker 网桥通信。

② 安装依赖包

shell 复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2

yum-utils:提供 yum-config-manager 工具,用于拉取镜像源。
device-mapper-persistent-datalvm2:Docker持久化存储驱动依赖

③ 配置阿里云yum源

  • 添加yum源配置文件
shell 复制代码
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 查看新添加的docker软件源
shell 复制代码
cat /etc/yum.repos.d/docker-ce.repo

④ 安装 Docker CE

shell 复制代码
yum install -y docker-ce docker-ce-cli containerd.io

可指定版本:yum install -y docker-ce-20.10.18

⑤ 启动并设置开机自启

shell 复制代码
systemctl start docker.service
systemctl enable docker.service

⑥ 验证安装

shell 复制代码
docker --version    # 查看版本
docker info         # 查看详细系统信息

1.2_配置镜像加速器

① 创建配置文件

  • 新建目录
shell 复制代码
mkdir -p /etc/docker
  • 阿里云Docker镜像加速器
shell 复制代码
tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://xdisb0be.mirror.aliyuncs.com"]
}
EOF

具体获取方式:阿里云 ACR镜像工具镜像加速器

  • 华为云Docker镜像加速器
shell 复制代码
tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [ https://1c786b17d3614c7a876977ea63b80b7e.mirror.swr.myhuaweicloud.com ]
}
EOF

具体获取方式:华为云 SWR镜像资源镜像中心镜像加速器

  • 其他国内Docker镜像加速器地址
shell 复制代码
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc"
  ]
}
EOF

支持多个加速器,链接之间注意要加逗号。

  • 一个国外的Docker镜像加速器
shell 复制代码
tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://hub.littlediary.cn/"]
}
EOF

tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["http://43.163.206.59:9211"]
}
EOF

② 重载并重启 Docker

shell 复制代码
systemctl daemon-reload
systemctl restart docker

2_镜像操作实验

2.1_镜像基础操作

① 搜索镜像

shell 复制代码
docker search nginx

显示名称、描述、星级等信息

② 拉取镜像

shell 复制代码
docker pull nginx

默认拉取 latest 标签

③ 查看本地镜像

shell 复制代码
docker images

输出字段:REPOSITORY, TAG, IMAGE ID, CREATED, SIZE

④ 查看镜像详情

shell 复制代码
docker inspect 41f689c20910

返回 JSON 格式,含层次、历史、配置等

⑤ 为镜像添加标签

shell 复制代码
docker tag nginx:latest nginx:web
docker images | grep nginx

同一镜像可有多个标签,用于区分版本,例如:v0.1 v1.0。

⑥ 删除镜像

shell 复制代码
docker rmi nginx:web      # 仅删除标签
docker rmi 41f689c20910   # 彻底删除镜像(无容器依赖时)

若被容器使用,需先删除容器

⑦ 导出镜像

shell 复制代码
docker save -o nginx.tar nginx:latest

生成 tar 包用于备份或迁移

⑧ 导入镜像

shell 复制代码
docker load < nginx.tar
# 或
docker load -i nginx.tar
  • 查看帮助信息
shell 复制代码
docker load --help

⑨ 上传到 Docker Hub

  • 登录 Docker Hub
shell 复制代码
docker login

被墙了,需要加速,或使用国内仓库。

  1. 浏览器登陆公共仓库(例如:华为云 SWR、阿里云 ACR)

  2. 在公共仓库创建组织(阿里云 ACR 创建实例非常规,可以在华为云 SWR创建组织)。

  3. 以 华为云SWR 为例:我的镜像客户端上传生成登陆指令

  4. 在服务器粘贴登陆指令,登陆 华为云SWR 公共仓库。

shell 复制代码
docker login -u cn-east-3@ABCDEFGHIJKLMNOPQRST -p 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr swr.cn-east-3.myhuaweicloud.com
  1. 先打一个标签
shell 复制代码
docker tag {镜像名称}:{版本名称} swr.cn-east-3.myhuaweicloud.com/{组织名称}/{镜像名称}:{版本名称}

docker tag nginx:web swr.cn-east-3.myhuaweicloud.com/toopen/nginx:web
  1. 然后推送
shell 复制代码
docker push swr.cn-east-3.myhuaweicloud.com/{组织名称}/{镜像名称}:{版本名称}

docker push swr.cn-east-3.myhuaweicloud.com/toopen/nginx:web

3_容器操作实验

3.1_容器生命周期管理

① 创建容器(不启动)

shell 复制代码
docker create -it nginx:latest /bin/bash

-i:保持标准输入(STDIN)打开;-t:分配伪终端(tty);合起来就是运行一个交互式会话。

② 查看容器状态

shell 复制代码
docker ps          # 仅运行中
docker ps -a       # 所有容器

③ 启动容器

shell 复制代码
docker start 容器编号(CONTAINER ID)
docker start 8b0a7be0ff58

④ 停止容器

shell 复制代码
docker stop 容器编号(CONTAINER ID)
docker stop 8b0a7be0ff58

⑤ 创建并启动容器

shell 复制代码
docker run -it centos:7 /bin/bash

退出 shell 后容器停止(因主进程结束)

⑥ 后台持续运行

shell 复制代码
docker run -itd --name test1 centos:7 /bin/bash

-d:后台运行;--name:指定容器名

  • 重命名容器
shell 复制代码
docker rename 旧容器名  新容器名

3.2_容器交互与数据传输

① 进入运行中容器

shell 复制代码
docker exec -it test1 /bin/bash

退出后容器继续运行

② 复制文件到容器

shell 复制代码
echo abc123 > ~/test.txt
docker cp ~/test.txt test1:/opt/

③ 从容器复制文件

shell 复制代码
docker cp test1:/opt/test.txt ~/abc123.txt

3.3_容器迁移与清理

① 导出容器

shell 复制代码
docker export test1 > centos7.tar	# 旧版本方式
docker export test1 -o centos7.tar

无论容器运行与否均可导出

② 导入为镜像

shell 复制代码
cat centos7.tar | docker import - centos7:test	# 旧版本方式
docker import centos7.tar centos7:test
docker images	# 查看导入的镜像

生成新镜像,不创建容器

③ 删除容器

shell 复制代码
docker stop test1
docker rm test1              # 删除已停止容器
docker rm -f test1           # 强制删除运行中容器

④ 批量清理

shell 复制代码
# 批量停止所有容器
docker ps -a | awk 'NR>=2{print $1}' | xargs docker stop
# 批量删除所有容器
docker ps -a | awk 'NR>=2{print $1}' | xargs docker rm
# 删除所有未使用资源
docker system prune -a		# 全删操作,谨慎操作!!

xargs:按行分隔管道输出的内容
system prune:清理系统"无用"的资源(停止的容器、未使用的网络、悬空镜像等)


结语

Docker 核心价值 :通过轻量级容器实现应用的标准化封装与跨环境一致运行。
镜像管理要点 :标签用于版本控制,save/load 适用于镜像迁移,rmi 需确保无容器依赖。
容器生命周期 :以 PID=1 进程为生命线,run -d 后台运行需保证主进程不退出。
数据持久化基础docker cp 实现宿主机与容器间文件传输,为后续数据卷学习铺垫。

!question 为什么 Docker 容器启动速度远快于虚拟机?

容器共享宿主机内核,无需启动完整操作系统,仅初始化隔离的用户空间进程。
!question 执行 docker run -it centos:7 bash 后退出终端,容器为何停止?

容器内 PID=1 的进程是 bash,退出后该进程终止,Docker 认为容器任务完成,自动停止。
!question docker exportdocker save 的区别是什么?
export 导出容器快照 (不含历史层和元数据),生成新镜像时丢失构建信息;save 导出完整镜像(含所有层和标签),可完全还原。
!question 如何让容器在后台持续运行?

使用 docker run -d 并确保容器内主进程为前台常驻进程 (如 while true; do echo hello; sleep 1; done)。
!question 删除镜像时提示 "image is being used by running container",如何解决?

先执行 docker stop <container> 停止容器,再 docker rm <container> 删除容器,最后 docker rmi <image> 删除镜像。

扩展

思考是否可以手动封装一个"容器"

当然可以!以下是从零开始,将 /opt/ls 目录制作成可用 Docker 镜像的完整简明步骤,适用于自定义 rootfs 场景(如最小化系统、调试环境等)。


最终目标

将一个能运行 lsbash 的独立目录 /opt/ls

→ 打包为 Docker 镜像 myroot:latest

→ 可用命令:docker run -it myroot


🧰 前提条件

  • 主机为 x86_64 Linux(CentOS/RHEL/Fedora/Ubuntu 等)
  • 已安装 docker
  • 当前用户可执行 sudo

🔧 操作步骤(全程复制粘贴即可)

  • 制作一个最小的可执行ls命令的依赖环境
bash 复制代码
# 1. 创建目标目录
rm -rf /opt/ls && mkdir -p /opt/ls/{bin,lib64,etc,proc,sys,tmp}

# 2. 复制基本命令(bash 和 ls)
cp /bin/bash /opt/ls/bin/
cp /bin/ls   /opt/ls/bin/

# 3. 复制必要共享库(自动提取依赖)
for lib in $(ldd /bin/bash /bin/ls | grep '/lib64/' | awk '{print $3}' | grep '^/'); do
    cp $lib /opt/ls/lib64/
done

# 补上动态链接器(重要!否则报 "no such file")
cp /lib64/ld-linux-x86-64.so.2 /opt/ls/lib64/

# 4. 复制其他关键库(可能未被 ldd 列出,但运行时需要)
cp /lib64/libcap.so.2.22 /opt/ls/lib64/ 2>/dev/null || true
ln -sf libcap.so.2.22 /opt/ls/lib64/libcap.so.2

cp /lib64/libpcre.so.1.2.0 /opt/ls/lib64/ 2>/dev/null || true
ln -sf libpcre.so.1.2.0 /opt/ls/lib64/libpcre.so.1

cp /lib64/libattr.so.1.1.0 /opt/ls/lib64/ 2>/dev/null || true
ln -sf libattr.so.1.1.0 /opt/ls/lib64/libattr.so.1

# 5. 设置 PATH 环境变量:创建启动脚本
tee /opt/ls/chroot.sh > /dev/null <<'EOF'
#!/bin/bash
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
exec /bin/bash "$@"
EOF
chmod +x /opt/ls/chroot.sh

# 6. (可选)创建 passwd 文件避免警告
mkdir -p /opt/ls/etc
tee /opt/ls/etc/passwd > /dev/null <<'EOF'
root:x:0:0:root:/root:/bin/bash
EOF

# 7. 用chroot测试运行环境是否可用
chroot /opt/ls/ /bin/bash --login
chroot /opt/docker /chroot.sh

chroot是docker的灵感来源,但chroot只实现了根目录的挂载点隔离,而进程、用户、网络等资源并没有完全隔离,而隔离运行环境就是docker诞生的目的。

  • 将这个环境打包成docker镜像
shell 复制代码
# 8. 打包 ls 并以ls为根目录
tar -cf ls -C ls .

# 9. 或者直接将目录 打包为 Docker 镜像
tar -C /opt/ls -c . | docker import - myroot:latest

# 10. 验证镜像是否可用
docker run --rm -it myroot /bin/ls /

# 进入交互式 shell
docker run --rm -it myroot /chroot.sh

-C ls:先进入 ls 目录
-c .:然后从 ls/ 内部打包所有文件

最终生成的 tar 文件里,路径就是:

bin/

lib64/

etc/

...


🐳 使用说明

bash 复制代码
# 启动容器并进入 bash
docker run --rm -it myroot /chroot.sh

# 在容器内可直接使用:
ls
ps aux
cat /etc/passwd

⚠️ 不支持 systemd, service 等守护进程操作(这是最小 rootfs)


📦 成果

你现在拥有了:

  • ✅ 一个基于真实 Linux 二进制构建的 rootfs
  • ✅ 包含 shell 和基础命令
  • ✅ 正确的库依赖和解释器
  • ✅ 可导入 Docker 的标准镜像

💡 扩展建议

想添加更多命令?比如 ip, ss, curl

bash 复制代码
cp /usr/sbin/ip   /opt/ls/bin/
cp /usr/bin/ss    /opt/ls/bin/
cp /usr/bin/curl  /opt/ls/bin/

然后拷贝依赖的库文件,含软链接对应的实际文件,最后重新打包即可。

相关推荐
spider_xcxc1 分钟前
Docker 实战:容器化多服务应用,Dockerfile 与 Compose 配置全解析
docker·云原生·eureka·虚拟化·容器化
2601_9557598820 分钟前
AWS 一个邮箱能注册几个账号?NiceCloud 说明管理规则
云计算·aws
hay_lee44 分钟前
Kubernetes StatefulSet:OrderedReady 极简指南
云原生·容器·kubernetes
晚风吹长发1 小时前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ2131 小时前
Docker Compose 安装与配置指南
运维·docker·容器
陈天伟教授1 小时前
华为云 阿里云 腾讯 WorkBuddy的工具对比
阿里云·华为云·云计算
BullSmall2 小时前
Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程
运维·docker·容器
Dawn-bit3 小时前
Linux救援模式和系统恢复
linux·运维·服务器·云计算·运维开发
AOwhisky4 小时前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
Database_Cool_6 小时前
阿里云 RDS MySQL 降本增效实战:从规格选型到成本优化,月成本降低64%全攻略
mysql·阿里云·云计算