【Docker基础】Docker核心概念:容器(Container)详解

目录

[1 容器技术概述](#1 容器技术概述)

[2 容器与虚拟机的区别](#2 容器与虚拟机的区别)

[3 Docker容器的核心组成](#3 Docker容器的核心组成)

[4 容器生命周期管理](#4 容器生命周期管理)

[5 容器核心技术详解](#5 容器核心技术详解)

[5.1 命名空间(Namespaces)](#5.1 命名空间(Namespaces))

[5.2 控制组(cgroups)](#5.2 控制组(cgroups))

[5.3 联合文件系统(UnionFS)](#5.3 联合文件系统(UnionFS))

[6 容器网络模型](#6 容器网络模型)

[7 容器数据管理](#7 容器数据管理)

[7.1 数据卷(Volume)](#7.1 数据卷(Volume))

[7.2 绑定挂载(Bind Mount)](#7.2 绑定挂载(Bind Mount))

[7.3 临时文件系统(tmpfs)](#7.3 临时文件系统(tmpfs))

[8 Docker容器操作实践](#8 Docker容器操作实践)

[8.1 容器基本操作](#8.1 容器基本操作)

[8.2 容器交互操作](#8.2 容器交互操作)

[8.3 容器资源限制](#8.3 容器资源限制)

[9 总结](#9 总结)


1 容器技术概述

容器(Container)是Docker技术的核心概念之一,它是一种轻量级、可移植的软件打包技术,将应用程序及其所有依赖项(包括库、环境变量和配置文件)打包到一个标准化的单元中。
容器与虚拟机不同,它不需要包含完整的操作系统,而是共享主机系统的内核,这使得容器更加轻量和高效。
容器技术的出现解决了软件开发中著名的"在我机器上能运行"的问题,通过提供一致的运行环境,确保了应用程序在开发、测试和生产环境中的一致性。

2 容器与虚拟机的区别

传统虚拟机架构

  • 在物理服务器上安装主机操作系统
  • 在主机OS上安装Hypervisor(虚拟机监控程序)
  • 每个虚拟机运行完整的Guest OS
  • 应用程序运行在Guest OS中
    容器架构
  • 在物理服务器上安装主机操作系统
  • 在主机OS上安装Docker引擎
  • 容器直接共享主机OS内核
  • 应用程序运行在隔离的容器环境中
    关键区别:
  • 资源占用:虚拟机需要为每个实例分配完整的OS资源,而容器共享主机OS内核,资源占用更少
  • 启动速度:虚拟机启动需要启动整个OS,而容器几乎是即时启动
  • 性能:容器几乎没有性能开销,而虚拟机有Hypervisor的额外开销
  • 隔离性:虚拟机提供更强的隔离性,容器通过命名空间和cgroups实现轻量级隔离

3 Docker容器的核心组成

一个Docker容器由以下几个核心部分组成:

  • 镜像(Image):容器的静态模板,包含运行应用所需的所有文件和配置
  • 容器运行时(Container Runtime):负责容器的创建、运行和管理
  • 命名空间(Namespaces):提供隔离的视图,包括PID、网络、用户等
  • 控制组(cgroups):限制和监控资源使用
  • 联合文件系统(UnionFS):实现镜像的分层和容器的可写层

4 容器生命周期管理

  • Docker容器的生命周期包括以下几个关键阶段:
  • 创建(Created):使用docker create命令创建一个容器,此时容器文件系统已准备就绪,但尚未运行
  • 运行(Running):使用docker start启动容器,容器内的主进程开始执行
  • 暂停(Paused):使用docker pause暂停容器,此时容器进程被冻结,但保留在内存中
  • 停止(Stopped):使用docker stop停止容器,容器内的主进程被终止,但容器配置保留
  • 删除(Deleted):使用docker rm删除容器,释放所有资源

5 容器核心技术详解

5.1 命名空间(Namespaces)

命名空间是Linux内核提供的隔离机制,Docker利用以下命名空间实现容器隔离:

  • PID命名空间:隔离进程ID,每个容器有自己的PID 1进程
  • 网络命名空间:每个容器有独立的网络栈、接口和IP地址
  • 挂载命名空间:容器有独立的文件系统挂载点
  • UTS命名空间:隔离主机名和域名
  • IPC命名空间:隔离进程间通信资源
  • 用户命名空间:隔离用户和组ID

5.2 控制组(cgroups)

控制组是Linux内核功能,用于限制、记录和隔离进程组的资源使用:

  • 资源限制:限制内存、CPU、磁盘I/O等资源使用
  • 优先级控制:为不同进程组分配不同的资源使用优先级
  • 资源统计:监控系统资源使用情况
  • 进程控制:冻结、恢复进程组

5.3 联合文件系统(UnionFS)

联合文件系统是实现Docker镜像分层和容器可写层的基础技术:

  • 分层存储:镜像由多个只读层组成,容器添加一个可写层
  • 写时复制(Copy-on-Write):修改文件时,先复制到可写层再修改
  • 高效存储:多个容器可以共享基础镜像层,节省存储空间

6 容器网络模型

  • Docker提供了多种网络模式,满足不同场景需求:
  • 桥接模式(bridge):默认模式,容器通过docker0网桥通信
  • 主机模式(host):容器直接使用主机网络栈
  • 无网络(none):容器没有网络接口
  • 容器模式(container):共享另一个容器的网络命名空间
  • 覆盖网络(overlay):用于多主机通信的Swarm模式

7 容器数据管理

容器文件系统是临时的,为了持久化数据,Docker提供了多种数据管理方式:

7.1 数据卷(Volume)

  • Docker管理的持久化数据存储
  • 独立于容器生命周期
  • 可以通过docker volume命令管理

7.2 绑定挂载(Bind Mount)

  • 将主机任意目录挂载到容器
  • 主机和容器共享同一文件系统位置
  • 适合开发环境共享代码

7.3 临时文件系统(tmpfs)

  • 数据只存储在内存中
  • 容器停止后数据丢失
  • 适合敏感临时数据

8 Docker容器操作实践

8.1 容器基本操作

复制代码
# 运行容器
docker run -d --name my_container nginx:latest

# 查看运行中的容器
docker ps

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

# 停止容器
docker stop my_container

# 启动已停止的容器
docker start my_container

# 删除容器
docker rm my_container

8.2 容器交互操作

复制代码
# 以交互模式运行容器
docker run -it my_container /bin/bash

# 在运行中的容器中执行命令
docker exec -it my_container /bin/bash

# 查看容器日志
docker logs my_container

# 查看容器详细信息
docker inspect my_container

8.3 容器资源限制

复制代码
# 限制内存使用为512MB
docker run -d --name mem_limited --memory=512m nginx

# 限制CPU使用(相对权重)
docker run -d --name cpu_limited --cpu-shares=512 nginx

# 限制CPU核心数
docker run -d --name cpu_core --cpus=1.5 nginx

9 总结

Docker容器作为现代应用交付和部署的标准,通过轻量级的隔离机制和标准化的打包方式,彻底改变了软件开发和运维的方式。理解容器的核心概念、生命周期和技术原理,对于有效使用Docker至关重要。

相关推荐
lishuangquan198719 分钟前
自建RustDesk服务器
运维·远程桌面
Mikhail_G21 分钟前
数据分析入门初解
大数据·运维·开发语言·python·数据分析
IT成长日记26 分钟前
【Docker基础】Docker核心概念:容器(Container)与镜像(Image)的区别与联系
运维·docker·区别与联系·container·imgae
希艾席帝恩32 分钟前
从传统楼盘到智慧空间:数字孪生的地产赋能之路
大数据·运维·服务器·人工智能·数字孪生·云渲染
容器魔方36 分钟前
科大讯飞基于Volcano实现AI基础设施突破,赢得CNCF最终用户案例研究竞赛
云原生·容器·云计算
德育处主任1 小时前
亚马逊云 Lambda 容器化部署教程
后端·容器
"匠"人1 小时前
讲解负载均衡
java·运维·负载均衡
xixingzhe21 小时前
docker compose安装Prometheus、Grafana
docker·grafana·prometheus
企鹅侠客1 小时前
ttyd:安全地通过网络共享您的 Linux 终端
linux·运维·ttyd
wb1891 小时前
全局搜索正则表达式grep
运维·笔记·ubuntu·云计算