当前位置: 首页 > java >正文

深入浅出Docker

容器与Docker简介

镜像(Image)
  • 定义静态的只读模板,包含运行应用所需的所有依赖(代码、环境、库、配置)。
  • 本质:分层存储结构(UnionFS),每一层是文件系统的增量修改。
  • 核心操作:docker pull(拉取)、docker build(构建)、docker push(推送)。
  • 生命周期:持久化存储,可重复使用。删除需显式执行 docker rmi
容器(Container)
  • 定义镜像的运行实例,本质是隔离的进程(通过 Linux Namespace 和 Cgroups 实现)。
  • 本质:镜像层(只读) + 容器层(读写),运行时添加数据。
  • 核心操作:docker run(创建并启动)、docker start/stop(启停)、docker exec(进入)。
  • 生命周期:临时性存在,停止后容器层数据默认丢失(需挂载卷持久化)。
仓库(Registry)
  • 定义集中存储和分发镜像的平台,类似代码仓库(GitHub)。
  • 核心操作:docker push(上传镜像)、docker pull(下载镜像)。
上传/下载
实例化
停止/销毁
仓库 Registry
镜像 Image
容器 Container
Docker底层技术
  • Namespace(命名空间)隔离:为进程提供独立的系统视图(PID、网络、文件系统等)。
  • Cgroups(控制组)资源限制:限制进程使用的CPU、内存、磁盘I/O资源。
  • UnionFS(联合文件系统)镜像分层:镜像由多层只读文件叠加而成,提升存储效率。

镜像管理

镜像的本质:分层存储(UnionFS)
  • 只读层(RO Layers):每层都是文件系统的增量修改(如安装软件、添加文件)。
  • 容器层(RW Layer):容器启动时在镜像层之上添加可写层(所有修改在此层发生)。
  • 关键特性
    • 写时复制(Copy-on-Write):修改文件时,从下层复制到容器层再修改(原始镜像不变)。
    • 内容寻址存储:每层通过 SHA256哈希 唯一标识。
    • 共享基础层:多个镜像可共享相同基础层(如 Ubuntu 层),节省磁盘空间。
镜像管理核心操作
docker build
docker push
docker pull
docker run
构建 Build
本地镜像
仓库 Registry
其他主机
运行容器
  • docker pull [镜像名]:[标签]:从仓库拉取镜像。
  • docker images:列出本地镜像。
  • docker rmi [镜像ID]:删除本地镜像。
  • docker build -t [镜像名] [路径]:构建镜像(需 Dockerfile)。
  • docker tag [旧名] [新名]:重命名镜像。
  • docker save -o [文件] [镜像名]:导出镜像为 tar 文件。
  • docker load -i [文件]:导入 tar 文件为镜像。
Dockerfile构建流程解析
# 基础层 (可被其他镜像共享)
FROM python:3.9-slim AS builder
# 中间层 (安装依赖)
RUN pip install --no-cache-dir flask gunicorn
# 应用层 (添加代码)
COPY app.py /app/
WORKDIR /app
# 启动命令 (容器启动时执行)
CMD ["gunicorn", "-b 0.0.0.0:8000", "app:app"]
镜像优化策略
  • 多阶段构建:丢弃构建依赖,仅保留运行时文件。
  • 合并RUN命令:减少层数,清理缓存。
  • 镜像仓库管理
docker login
docker push
docker pull
本地镜像
Docker Hub
私有仓库
生产服务器

容器操作

容器生命周期
docker create
docker start
docker pause
docker unpause
docker stop
docker start
docker kill
docker rm
docker rm
Created
Running
Paused
Stopped
Killed
  • Created:容器已创建但未启动(docker create)。
  • Running:运行中(docker start/run)。
  • Paused:进程暂停(冻结状态,保留内存)。
  • Stopped:进程终止(发送 SIGTERM 信号)。
  • Killed:强制终止(发送 SIGKILL 信号)。
  • Removed:容器被删除。
核心命令操作
  • 容器创建与启动

    • docker run:创建并启动容器。

    • docker create:仅创建不启动。

    • docker start:启动已停止容器。

  • 容器交互与管理

    • docker exec:在运行中容器执行命令。

    • docker attach:附加到运行中容器。

    • docker logs:查看容器日志。

    • docker stats:实时监控资源。

    发送信号
    转发信号
    输出流
    显示输出
    终端
    Docker守护进程
    容器主进程
  • 容器停止与删除

    • docker stop:正常停止。
    • docker kill:强制停止。
    • docker rm:删除容器。
    docker stop
    发送SIGTERM
    10秒内退出?
    正常退出
    发送SIGKILL
    docker kill
    直接发送SIGKILL

数据持久化与卷(Volumes)

Docker数据持久化
  • 卷(Volumes):Docker 管理的存储区域,独立于容器生命周期;支持加密、权限控制;高性能(本地/云存储驱动)。

  • 绑定挂载(Bind Mounts):直接映射主机任意目录,容器可修改主机文件系统,适合开发环境代码同步。

  • 临时文件系统(tmpfs):数据仅存储在内存中,容器停止即消失,适合敏感临时数据。

卷(Volumes)
容器
命名卷
var/lib/docker/volumes
  • docker volume create :创建命名卷。
  • docker volume ls:列出所有卷。
  • docker volume inspect :查看卷详细信息。
  • docker run -v : :挂载卷到容器。
持久化核心要点
创建卷
挂载到容器
数据操作
备份
迁移/恢复

网络配置

Docker 网络架构
主机物理网络
容器1网络命名空间
容器2网络命名空间
容器3网络命名空间
虚拟网卡veth0
虚拟网卡veth0
虚拟网卡veth0
docker0网桥
主机物理网卡
  • 网络命名空间(Network Namespace):每个容器独立的网络栈。
  • 虚拟网卡对(veth pair):连接容器和网桥。
  • 网桥(Bridge):软件交换机(默认docker0)。
  • IPtables/NAT:实现端口映射和防火墙。
Docker 网络驱动类型
模式命令参数特点适用场景
Bridge--network=bridge默认模式,NAT隔离单主机容器通信
Host--network=host共享主机网络栈高性能需求
Overlay--network=overlay多主机容器网络Swarm/K8s集群
Macvlan--network=macvlan直接分配MAC地址传统网络集成
None--network=none无网络安全敏感场景
http://www.xdnf.cn/news/12564.html

相关文章:

  • 【Go语言基础【14】】defer与异常处理(panic、recover)
  • C++学习-入门到精通【16】自定义模板的介绍
  • 轻量高效的B站视频下载解析
  • 对比学习
  • 零基础在实践中学习网络安全-皮卡丘靶场(第十四期-XXE模块)
  • 文档极速转换器 - 免费批量Word转PDF工具
  • 快速上手 Metabase:从安装到高级功能实战
  • 探索NoSQL注入的奥秘:如何消除MongoDB查询中的前置与后置条件
  • Android第十五次面试总结(第三方组件和adb命令)
  • react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架
  • 【西门子杯工业嵌入式-3-如何使用KEY】
  • Ubuntu20.04基础配置安装——系统安装(一)
  • uniapp 对接腾讯云IM群公告功能
  • Spring Boot + Thymeleaf 防重复提交
  • wpf ListBox 去除item 单击样式
  • Python控制台输出彩色字体指南
  • 如何判断指针是否需要释放?
  • 2024 CKA题库+详尽解析| 15、备份还原Etcd
  • 6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
  • CSS3 的特性
  • 前端开发者常用网站
  • DeepSeek09-open-webui使用
  • 银行卡二三四要素实名接口如何用PHP实现调用?
  • npm安装electron下载太慢,导致报错
  • 华为云Flexus+DeepSeek征文 | 从零到一:用Flexus云服务打造低延迟联网搜索Agent
  • 【杂谈】-DeepSeek-V3:AI开发的成本效益突破与行业启示
  • ARM SMMUv3简介(一)
  • 常用存储器介绍
  • 10.Linux进程信号
  • 第四十六天打卡