一、 云服务模型介绍

云计算 是通过网络为用户提供可伸缩的计算资源。云服务通常分为以下几种类型:

1.1  IaaS(基础设施即服务)

提供虚拟化计算资源(如虚拟机、存储、网络等)。 用户可以灵活配置自己的计算环境,负责安装操作系统、管理资源等。

优点:灵活度高、可扩展性强。

缺点:管理复杂,需要较多技术支持。

1.2  PaaS(平台即服务)

提供一个开发平台,用户可以在上面开发应用程序,而无需关注底层硬件或操作系统。

优点:简化开发过程,适合开发者。

缺点:灵活度较低,可能受到平台限制。

1.3  SaaS(软件即服务)

提供已经构建好的应用程序,用户可以直接使用,无需安装和维护。

优点:快速部署,省时省力。

缺点:定制化差,依赖于服务提供商。

2 常见云服务提供商

阿里云、腾讯云、AWS、Google Cloud、华为云、天翼云等是市场上主要的云服务提供商。

二、虚拟化技术概述

2.1  虚拟化类型

全虚拟化:虚拟化软件完全模拟硬件环境,允许多个操作系统共享硬件资源,彼此之间相互独 立。 适用场景:需要兼容多个操作系统(如 Linux 与 Windows 同时运行)的环境。

半虚拟化:虚拟机与宿主操作系统协作,通过修改操作系统内核来提高性能。 适用场景:高性能需求的环境,尤其是优化了开源操作系统(如 Linux)的虚拟化。

2.2  虚拟化产品

VMware:广泛使用的企业级虚拟化平台,支持全虚拟化和半虚 拟化。 企业版 mac fusion EXSI企业版 vsphere work。

Hyper-V:由微软推出的虚拟化平台,集成于 Windows Server 中。

VirtualBox:适用于个人和开发者的虚拟化产品,跨平台支持(Linux、macOS、Windows)。

三、Docker简介

3.1 logo介绍

Docker 的 Logo 设计:Docker 的 Logo 设计为一条蓝色鲸鱼,拖着许多集装箱。鲸鱼代表宿主 机,集装箱代表相互隔离的容器,每个集装箱中都包含自己的应用程序。

3.2  Docker架构以及组件

Docker daemon(Docker守护进程)

Docker daemon是一个运行在宿主机(DOCKER_HOST)的后台进程。可通过Docker客户端与之通 信。

Client(Docker客户端)

Docker客户端是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通 信。

Images(Docker镜像)

Docker镜像是一个只读模版,它包含创建Docker容器的说明。它和系统安装光盘有点像—使用系 统安装光盘可以安装系统,同理,使用Docker镜像可以运行Docker镜像中的程序。

Container(容器)

容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过 Docker API或者CLI命令来启停,移动,删除容器。

Registry

Docker Registry是一个集中存储与分发镜像的服务。构建完Docker镜像后,就可在当前宿主机上 运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助Docker Registry来避 免镜像的手动复制。一个Docker Registry可包含多个Docker仓库,每个仓库可包含多个镜像标 签,每个标签对应一个Docker镜像。这跟Maven的仓库有点类似,如果把Docker Registry比作 Maven仓库的话,那么Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本 号。

3.3 Docker 的核心技术

Docker 容器本质上是宿主机的一个进程,通过以下技术实现资源隔离和限制: Namespace:实现资源隔离。 Cgroup:实现资源限制。 写时复制技术(Copy-on-Write):实现高效的文件操作。

3.4 Docker 核心概念

3.4.1  镜像(Image)

镜像是包含应用程序及其所有依赖环境的可执行包。它是一个只读模板,基于该模板可以创建 容器实例。

3.4.2  容器(Container)

容器是镜像的运行实例。容器提供了与外部环境隔离的运行时环境,可以在不同的系统上运 行。 容器通过 Docker 引擎启动,具有独立的文件系统、网络、进程空间。

3.4.3  仓库(Repository)

仓库是存放 Docker 镜像的地方。Docker Hub 是最常用的公共仓库,用户也可以创建私有仓 库。

四、Docker与镜像

1、Docker:镜像的动态实例

容器技术是一种轻量级、提供隔离的虚拟化技术。一些知名的容器技术:Docker、Kubernetes、Containerd(Docker核心组件之一)。

Docker本质上是一个开源的容器引擎,它基于Linux内核的容器化技术,能让我们将应用程序及其依赖项(比如库文件、配置、运行环境等)“打包”成一个独立的“容器”,然后在任何支持Docker的环境中(Windows、Mac、Linux)快速、一致地运行。

Docker 提供了两个主要版本:

Docker Community Edition (CE):社区版适用于个人开发者或小型团队,提供基本的容器功能,免费使用。        

Docker Enterprise Edition (EE):适用于大规模生产环境,强调企业级的安全性和支持,通常是付费版本。 每个版本的发布周期不同,CE 通常每个月发布新版本,而 EE 版本则会有更长的维护周期。

2. 镜像:容器的“静态模板”

如果说Docker是“容器引擎”,那么镜像就是构建容器的“静态模板”。这个模板里包含了运行应用所需的所有内容:代码、运行时环境、库文件、环境变量、配置文件等。

3.为什么需要Docker和镜像?核心价值在哪里?

Docker与镜像的核心价值,本质上是解决了开发、测试、生产环境中的几个核心痛点:

4.3.1  解决“环境不一致”问题

这是最核心的价值。之前我们常听到开发同学说“我本地能跑啊,怎么到测试环境就报错了?”——原因就是开发环境和测试环境的操作系统、依赖库版本、配置等不一致。而用Docker镜像打包后,应用和依赖环境成为一个整体,无论在哪个环境运行,都是同一个“模板”生成的容器,环境完全一致,从根源上解决了这个问题。

4.3.2  轻量高效,资源占用少

传统的虚拟机技术,需要为每个虚拟机分配独立的操作系统,资源占用非常大(比如一个虚拟机可能需要几百MB甚至几GB的内存)。而Docker容器共享宿主机的内核,不需要单独运行操作系统,一个容器的内存占用可能只有几十MB,启动速度也非常快(秒级启动,而虚拟机需要分钟级)。这意味着在同一台服务器上,我们可以运行更多的容器,大大提高了服务器资源的利用率。

4.3.3  快速部署与扩展

基于镜像创建容器的过程非常简单,只需要一条命令就能完成。如果应用需要扩展(比如用户量激增,需要多跑几个实例),只需快速创建多个相同的容器即可,而且可以通过Docker Compose、Kubernetes等工具实现自动化扩展,极大地提高了部署和运维效率。

4.3.4  环境隔离,安全可靠

每个Docker容器都是独立隔离的,容器之间的资源、进程、网络等都是相互隔离的。这意味着一个容器里的应用出现问题(比如程序崩溃、病毒攻击),不会影响到其他容器和宿主机,大大提高了应用运行的安全性和可靠性。

特性Docker虚拟机
启动速度秒级分钟级
计算能力损耗几乎无损耗50%左右
性能接近原生弱于

系统支持量(单机)

上千个几十个
隔离性资源隔离/限制完全隔离

五、Docker与镜像的基础使用:从安装到运行

5.1  Docker 安装与配置

systemctl stop firewalld.service
setenforce 0

# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

- yum-utils:提供了 `yum-config-manager` 工具。
- device-mapper:Linux 内核中支持逻辑卷管理的通用设备映射机制。
- device-mapper-persistent-data** 和 **lvm2**:device-mapper 存储驱动程序所需的依赖包。

# 设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker
ce/linux/centos/docker-ce.repo

# 安装 Docker-CE 并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io
注意:如果是指定版本docker-ce-20.10.18

systemctl start docker.service
systemctl enable docker.service

5.2 基本命令

核心逻辑:Docker 的核心是「镜像(模板)→ 容器(运行实例)」,所有命令围绕这两个核心对象展开。

1 搜索镜像

# 从Docker Hub搜索镜像(如搜索nginx镜像)
docker search nginx

参数:--filter=stars=100 可筛选收藏数≥100 的镜像,避免低质量镜像。

2 拉取镜像

# 拉取最新版本的镜像(默认latest标签)
docker pull nginx

# 拉取指定版本的镜像(如nginx 1.24版本)
docker pull nginx:1.24

3 查看本地镜像

# 列出所有本地镜像
docker images

# 精简输出格式(只显示镜像ID、仓库、标签)
docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

4 删除镜像

# 删除指定镜像(通过镜像ID或仓库:标签)
docker rmi nginx:1.24  # 或 docker rmi 镜像ID

# 强制删除(镜像被容器占用时需加-f)
docker rmi -f nginx:1.24

# 删除所有未使用的镜像(清理空间)
docker image prune -a

5 创建并运行容器(最常用)

# 基础格式:docker run [参数] 镜像名 [容器内执行的命令]
# 示例1:后台运行nginx容器,映射主机80端口到容器80端口,命名为my-nginx
docker run -d -p 80:80 --name my-nginx nginx

# 关键参数解释:
# -d:后台运行容器(守护进程模式)
# -p 主机端口:容器端口:端口映射(避免端口冲突)
# --name:给容器自定义名称(方便管理,否则Docker自动生成随机名)
# -it:交互式运行(如运行Ubuntu容器时使用,可进入容器终端)
# -v 主机目录:容器目录:数据卷挂载(持久化容器数据)

6 查看容器

# 查看正在运行的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 查看容器的简洁信息(只显示容器ID和名称)
docker ps -q

7 容器启停 / 重启 / 删除

# 启动已停止的容器(通过容器名或ID)
docker start my-nginx

# 停止运行中的容器
docker stop my-nginx

# 重启容器
docker restart my-nginx

# 强制停止容器(类似kill进程,紧急情况使用)
docker kill my-nginx

# 删除容器(需先停止,或加-f强制删除)
docker rm my-nginx

# 删除所有已停止的容器(清理空间)
docker container prune

8 进入容器终端

# 方式1:exec(推荐,退出容器不影响容器运行)
docker exec -it my-nginx /bin/bash

# 方式2:attach(退出容器会导致容器停止,不推荐)
docker attach my-nginx

# 退出容器终端(不停止容器):按 Ctrl + P + Q

9 查看容器日志 / 信息

# 查看容器运行日志(实时输出)
docker logs -f my-nginx

# 查看容器详细信息(IP、挂载、端口等)
docker inspect my-nginx

10  其他常用基础命令

# 查看Docker磁盘占用(镜像、容器、卷的空间使用)
docker system df

# 清理Docker所有无用资源(镜像、容器、卷、网络)
docker system prune -a  # 加-a会删除所有未使用的镜像,谨慎使用

5.3 镜像获取与制作

1  镜像加速下载

阿里云加速器

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

华为加速器:

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [ 
"https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com" ]
}
EOF

2 查看镜像信息

cat /var/lib/docker/image/overlay2/repositories.json
作用:查看 Docker 本地镜像的详细信息。/var/lib/docker 是 Docker 存储所有数据的目录,镜像存储在 
image 目录下的 overlay2 子目录中。


docker images

REPOSITORY   TAG        IMAGE ID       CREATED       SIZE
nginx        latest     41f689c20910   6 weeks ago   192MB

REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;

3 为本地镜像添加标签

#格式:docker tag 名称:[标签] 新名称:[新标签]
docker tag nginx:latest nginx:web

docker images | grep nginx

作用:为本地的 nginx:latest 镜像添加新的标签 nginx:web ,这并不会创建新的镜像,而是为
同一个镜像附加了新的标签。

4 删除镜像

格式:
docker rmi 仓库名称:标签        #当一个镜像有多个标签时,只是删除其中指定的标签或者      

docker rmi 镜像ID号            #会彻底删除该镜像            

注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像
docker rmi nginx:web

作用:删除指定标签的镜像。注意:如果镜像有多个标签,删除指定标签不会删除镜像本身,只有
在没有其他标签和容器依赖的情况下才会彻底删除镜像。如果镜像正在被容器使用,需要先删除容
器。

5 存储镜像(导出)

docker save -o nginx.tar nginx:latest

作用:将本地镜像 
nginx:latest 保存为 tar 包(nginx.tar )。这可以用于镜像备份或迁移。

6 载入镜像(导入)

docker load < nginx.tar
或者
docker load -i nginx.tar

作用:从本地 tar 文件中加载镜像。你可以将导出的镜像文件通过此命令重新加载到 Docker 中。

5.4 上传镜像到 Docker Hub

1  标签镜像:

docker tag nginx:latest yjs/nginx:web
作用:为镜像添加一个新的标签,并指定上传到 Docker Hub 的目标仓库。表示在 Docker Hub 上的 
yjs 账户下的 nginx 仓库,并使用yjs/nginx:web web 标签。

2  登录 Docker Hub:以国内华为云为例

搜索容器与镜像服务

刚进入总览,这是上传镜像的必要步骤

创建组织后,进入我的镜像,点击右上角客户端上传

以docker容器引擎为例,先生成登录口令,

登陆成功后如下图

按上传镜像要求,先把本地镜像打上标签,再上传镜像

上传成功如下图所示

进入我的镜像查看,此时,镜像已成功上传到华为云了

总结

最后再梳理一下核心知识点,帮大家巩固记忆:

  • Docker是容器化平台,负责容器的创建、运行、管理;

  • 镜像是容器的“模板”,是静态的只读文件,包含运行应用所需的所有依赖;

  • 容器是镜像的“运行实例”,是动态的、可读写的,多个容器可基于同一个镜像创建,相互隔离;

  • 核心流程:编写Dockerfile → 构建镜像 → 推送镜像 → 下载镜像 → 启动容器。

对于新手来说,先理解“镜像=模板,容器=实例”这个核心关系,再通过实际命令操作(比如下载一个nginx镜像,启动一个nginx容器),就能快速建立对Docker和镜像的直观认知。后续再深入学习Dockerfile编写、镜像仓库管理、容器编排(比如Docker Compose、K8s)等内容,就能逐步掌握容器化技术的核心能力啦!

如果觉得这篇文章对你有帮助,欢迎点赞、收藏,也可以在评论区分享你的学习心得或遇到的问题

更多推荐