云原生--容器化技术

目录

容器与虚拟机的区别

Docker 入门

1. 基本概念

2. 安装 Docker

3. 基本命令

4. 示例:创建一个简单的 Docker 镜像

容器网络与存储

1. 容器网络

2. 容器存储


容器与虚拟机的区别

     容器化技术是现代云计算和分布式系统中的重要组成部分,通过轻量级的虚拟化技术,使得应用程序可以在不同的环境中一致地运行。容器与传统的虚拟机(VM)有着显著的区别,这些区别主要体现在以下几个方面:

特性容器虚拟机(VM)
架构

共享宿主机的操作系统内核

通过命名空间(namespace)和控制组(cgroup)实现资源隔离

每个 VM 包括一个独立的操作系统内核、库和应用

通过 hypervisor 在物理硬件之上创建一个完整的虚拟化环境

资源利用

轻量级,占用较少的内存和 CPU 资源

多个容器可以共享同一个宿主机的操作系统内核

 每个 VM 都有自己的操作系统内核,占用较多的内存和 CPU 资源
启动时间启动速度快,通常只需要几秒钟甚至更短 启动时间较长,可能需要几分钟
性能几乎没有性能损失,直接运行在宿主机的操作系统上受到 hypervisor 层的开销影响,可能会有一些性能损失
可移植性和一致性

 镜像文件较小,易于迁移和备份

提供了一致的运行环境,无论是在开发、测试还是生产环境中,应用的行为都是一致的

镜像文件较大,迁移和备份较为复杂<br>- 虽然可以提供一定程度的一致性,但由于每个 VM 都有一个独立的操作系统,仍然可能存在环境差异
管理复杂度管理相对简单,可以使用 Docker、Kubernetes 等工具进行管理管理较为复杂,需要管理多个操作系统和应用程序,通常使用 vSphere、Hyper-V 等工具进行管理
安全性相对较低,因为多个容器共享同一个宿主机的操作系统内核,存在一定的安全风险较高,每个 VM 都有一个独立的操作系统,提供了更好的隔离性
适用场景

开发和测试环境

微服务架构

需要快速启动和停止的应用

资源受限的环境

生产环境,特别是对安全性和稳定性要求较高的场景

大型企业级应用<br>- 需要独立操作系统的环境

详细说明

架构
  • 容器

    • 共享宿主机的操作系统内核:容器共享宿主机的操作系统内核,通过命名空间(namespace)和控制组(cgroup)实现资源隔离。
    • 轻量级:容器只包含应用及其依赖库,不包含操作系统内核。
  • 虚拟机(VM)

    • 独立的操作系统内核:每个 VM 包括一个独立的操作系统内核、库和应用。
    • 完整的虚拟化环境:通过 hypervisor 在物理硬件之上创建一个完整的虚拟化环境。
资源利用
  • 容器

    • 轻量级:占用较少的内存和 CPU 资源。
    • 共享资源:多个容器可以共享同一个宿主机的操作系统内核,减少资源消耗。
  • 虚拟机(VM)

    • 资源占用多:每个 VM 都有自己的操作系统内核,占用较多的内存和 CPU 资源。
启动时间
  • 容器

    • 启动速度快:通常只需要几秒钟甚至更短。
  • 虚拟机(VM)

    • 启动时间长:可能需要几分钟,因为需要加载整个操作系统。
性能
  • 容器

    • 几乎无性能损失:直接运行在宿主机的操作系统上,没有额外的虚拟化层。
  • 虚拟机(VM)

    • 性能损失:受到 hypervisor 层的开销影响,可能会有一些性能损失。
可移植性和一致性
  • 容器

    • 镜像文件小:易于迁移和备份。
    • 一致性高:提供了一致的运行环境,无论是在开发、测试还是生产环境中,应用的行为都是一致的。
  • 虚拟机(VM)

    • 镜像文件大:迁移和备份较为复杂。
    • 一致性较低:虽然可以提供一定程度的一致性,但由于每个 VM 都有一个独立的操作系统,仍然可能存在环境差异。
管理复杂度
  • 容器

    • 管理简单:可以使用 Docker、Kubernetes 等工具进行管理。
  • 虚拟机(VM)

    • 管理复杂:需要管理多个操作系统和应用程序,通常使用 vSphere、Hyper-V 等工具进行管理。
安全性
  • 容器

    • 相对较低:因为多个容器共享同一个宿主机的操作系统内核,存在一定的安全风险。
  • 虚拟机(VM)

    • 较高:每个 VM 都有一个独立的操作系统,提供了更好的隔离性。
适用场景
  • 容器

    • 开发和测试环境:快速启动和停止,资源占用少。
    • 微服务架构:适合微服务的快速部署和扩展。
    • 需要快速启动和停止的应用:如临时任务、短生命周期的应用。
    • 资源受限的环境:如物联网设备、嵌入式系统。
  • 虚拟机(VM)

    • 生产环境:特别是对安全性和稳定性要求较高的场景。
    • 大型企业级应用:需要独立操作系统的复杂应用。
    • 需要独立操作系统的环境:如多租户环境、不同操作系统的需求。
Docker 入门

Docker 是目前最流行的容器化技术之一,它提供了一种轻量级、可移植的方式来打包、分发和运行应用程序。以下是 Docker 的基本概念和入门指南:

1. 基本概念
  • 镜像(Image):Docker 镜像是一个不可变的文件,包含了运行一个应用所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
  • 容器(Container):容器是镜像的运行实例。一个镜像可以创建多个容器,每个容器都是独立的,互不影响。
  • Dockerfile:Dockerfile 是一个文本文件,包含了一系列指令,用于构建 Docker 镜像。
  • Docker Hub:Docker Hub 是一个公共的镜像仓库,用户可以在这里上传、下载和分享镜像。
2. 安装 Docker
  • Windows 和 macOS

    • 下载并安装 Docker Desktop,这是一个包含 Docker 引擎和 GUI 工具的完整包。
    • 安装完成后,启动 Docker Desktop 即可。
  • Linux

    • 使用包管理器安装 Docker,例如在 Ubuntu 上可以使用以下命令:
      sudo apt-get update
      sudo apt-get install docker.io
3. 基本命令
  • 查看 Docker 版本

    docker --version
  • 运行一个容器

    docker run -it ubuntu /bin/bash
    • run:创建并启动一个新容器。
    • -it:交互模式,分配一个伪终端。
    • ubuntu:使用 Ubuntu 镜像。
    • /bin/bash:启动 Bash 终端。
  • 列出所有正在运行的容器

    docker ps
  • 列出所有容器(包括停止的)

    docker ps -a
  • 停止一个容器

    docker stop <container_id>
  • 删除一个容器

    docker rm <container_id>
  • 构建一个镜像

    docker build -t my-image .
    • build:构建一个新的镜像。
    • -t:指定镜像的名称。
    • .:Dockerfile 所在的目录。
4. 示例:创建一个简单的 Docker 镜像

假设应用,如下所示:

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

创建一个 Dockerfile 来构建这个应用的镜像:

# 使用官方的 Python 基础镜像
FROM python:3.8-slim

# 设置工作目录
WORKDIR /app

# 将当前目录下的文件复制到容器的工作目录
COPY . /app

# 安装应用所需的依赖
RUN pip install flask

# 暴露端口
EXPOSE 5000

# 启动应用
CMD ["python", "app.py"]

然后,在 Dockerfile 所在的目录下执行以下命令来构建镜像:

docker build -t my-flask-app .

运行这个容器:

docker run -d -p 5000:5000 my-flask-app
  • -d:后台运行。
  • -p:将容器的 5000 端口映射到主机的 5000 端口。

现在可以通过浏览器访问 http://localhost:5000,看到 "Hello, World!" 的输出。

容器网络与存储

容器化技术不仅关注应用的打包和运行,还涉及网络和存储的管理。Docker 提供了多种网络和存储选项,以满足不同的需求。

1. 容器网络
  • 桥接网络(Bridge Network)

默认情况下,Docker 会创建一个名为 docker0 的桥接网络。

桥接网络允许容器之间的通信,但与外部网络隔离。示例:

docker network create my-bridge
docker run -d --name container1 --network my-bridge nginx
docker run -d --name container2 --network my-bridge nginx
  • 主机网络(Host Network)

容器使用宿主机的网络栈,共享宿主机的网络接口。

适用于需要高性能网络的应用。示例:

docker run -d --name container1 --network host nginx
  • 覆盖网络(Overlay Network)

用于跨多个 Docker 主机的容器通信,常用于 Docker Swarm 集群。

示例:

docker network create --driver overlay my-overlay
docker service create --name my-service --network my-overlay nginx
2. 容器存储
  • 数据卷(Volumes)

数据卷是独立于容器生命周期的持久化存储,可以在多个容器之间共享。

数据卷可以在宿主机上创建,也可以在 Docker 中动态创建。示例:

docker volume create my-volume
docker run -d --name my-container -v my-volume:/data nginx
  • 绑定挂载(Bind Mounts)

绑定挂载将宿主机的文件或目录挂载到容器中。

适用于开发环境,可以实时查看文件变化。示例:

docker run -d --name my-container -v /host/path:/container/path nginx
  • 临时文件系统(tmpfs)

临时文件系统将数据存储在宿主机的内存中,不会持久化到磁盘。

适用于需要高速读写的临时数据。示例:

docker run -d --name my-container --tmpfs /tmp nginx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何遇mirror

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值