李锋镝的博客

  • 首页
  • 时间轴
  • 留言
  • 插件
  • 左邻右舍
  • 关于我
    • 关于我
    • 另一个网站
  • 知识库
  • 赞助
Destiny
自是人生长恨水长东
  1. 首页
  2. 原创
  3. 正文

Docker核心概念解析及使用

2025年5月21日 20点热度 0人点赞 0条评论

一、Docker核心概念解析

1. 基础定义

  • 容器(Container):从镜像创建的轻量级运行实例,提供独立隔离的运行环境,支持跨环境一致运行。
  • 镜像(Image):容器的模板,包含应用程序、依赖库、配置文件等所有运行所需资源。
  • Dockerfile:定义镜像构建流程的脚本文件,通过指令描述镜像的生成逻辑。
  • Docker Hub:全球最大的公共镜像仓库,用于存储、下载和分享镜像。

2. 架构组件

组件名称 功能描述
Docker Client 用户交互入口,通过命令行或API向Docker Daemon发送操作请求。
Docker Daemon 后台守护进程,负责处理容器、镜像、网络、存储等核心操作。
Docker Image 只读的镜像文件,用于创建容器实例。
Docker Container 镜像的运行实例,包含独立的文件系统、进程空间和资源限制。
Docker Registry 镜像仓库,支持私有或公共存储(如Docker Hub、Harbor)。
Docker网络 管理容器间通信,支持桥接、主机、覆盖网络等多种模式。
Docker存储 提供数据持久化方案,包括Volume、Bind Mounts和tmpfs Mounts。
Docker Swarm 容器编排工具,用于管理跨主机的容器集群。

二、Docker运行机制与隔离技术

1. 运行流程

  1. 用户通过Docker Client向Docker Daemon发送请求(如创建容器)。
  2. Docker Daemon通过Docker Engine解析请求,以Job形式执行具体任务。
  3. 若需镜像,从Docker Registry拉取并通过Graph Driver存储为分层镜像。
  4. Network Driver配置容器网络(如桥接模式下的虚拟网桥)。
  5. Exec Driver负责容器资源限制(如CPU、内存)和指令执行。

2. 容器隔离技术

  • 命名空间(Namespaces):隔离进程(PID)、网络(NET)、文件系统(MNT)等资源,确保容器间互不干扰。
  • 控制组(cgroups):通过Linux内核功能限制容器的CPU、内存、I/O等资源使用上限。
  • 文件系统隔离:基于UnionFS(如OverlayFS)实现镜像分层,容器层修改不影响基础镜像。
  • 网络隔离:通过虚拟网桥、IPtables规则实现容器间网络隔离或通信。
  • 安全机制:支持SELinux/AppArmor等安全策略,限制容器对宿主机的访问权限。

三、快速入门与核心操作

1. 安装与配置

  • 下载地址:Docker官方下载页
  • 镜像源配置(提升拉取速度):
    {  
    "registry-mirrors": [  
      "http://hub-mirror.c.163.com",  
      "https://docker.mirrors.ustc.edu.cn"  
    ],  
    "debug": true,  
    "experimental": false  
    }  

2. 基础验证命令

docker run hello-world  # 验证Docker安装是否成功  

3. 系统管理命令

操作场景 命令示例 说明
查看系统信息 docker info 显示Docker版本、镜像存储路径等
查看版本信息 docker version 客户端与守护进程版本
监控资源使用 docker stats 实时显示容器CPU、内存占用
清理无效资源 docker system prune -a --volumes 删除停止容器、未使用镜像和卷

四、容器生命周期管理

1. 容器操作命令

操作场景 命令示例 说明
启动容器 docker run -itd --name my-nginx nginx:latest 后台运行Nginx容器,命名为my-nginx
列出运行中容器 docker ps -l 显示最新创建的容器
列出所有容器 docker ps -a 包括已停止的容器
停止/重启容器 docker stop/restart <容器ID> -t 30 等待30秒强制停止
删除容器 docker rm <容器ID> -f 强制删除正在运行的容器
查看容器日志 docker logs -f <容器名> 实时追踪日志输出
进入容器终端 docker exec -it <容器名> bash 在容器内执行交互式Shell

2. 数据管理

  • 导出/导入容器快照:
    docker export <容器ID> > container.tar  # 导出容器文件系统快照  
    docker import container.tar my-image:v1   # 导入快照创建镜像(丢失元数据)  
  • 镜像构建:
    docker build -t my-app:v1 -f Dockerfile .  # 基于当前目录的Dockerfile构建镜像  

五、镜像操作指南

1. 镜像生命周期管理

操作场景 命令示例 说明
拉取镜像 docker pull ubuntu:22.04 拉取指定版本的Ubuntu镜像
查看本地镜像 docker images -q 仅显示镜像ID
删除镜像 docker rmi -f <镜像ID> 强制删除镜像
推送镜像到仓库 docker push my-repo/my-image:v1 需先登录私有仓库
搜索公共镜像 docker search --stars=3+ mysql 查找评分≥3的MySQL镜像

2. Dockerfile最佳实践

# 基础镜像  
FROM ubuntu:22.04  
# 维护者信息  
LABEL maintainer="admin@example.com"  
# 安装依赖  
RUN apt-get update && apt-get install -y curl  
# 复制文件到镜像  
COPY app/ /app/  
# 设置工作目录  
WORKDIR /app  
# 定义启动命令  
CMD ["python", "app.py"]  

3. 多阶段构建(精简镜像体积)

# 构建阶段:使用Go环境编译应用  
FROM golang:alpine AS builder  
WORKDIR /src  
COPY . .  
RUN go build -o myapp  

# 最终阶段:使用最小化镜像运行应用  
FROM alpine  
COPY --from=builder /src/myapp /app/  
CMD ["/app/myapp"]  

六、网络与端口配置

1. 网络模式

模式 特点 适用场景
bridge 默认模式,容器通过虚拟网桥与宿主机通信,支持端口映射。 单主机多容器通信
host 容器直接使用宿主机网络,无网络隔离。 高性能网络需求场景
none 容器无网络连接,完全隔离。 安全敏感型应用
overlay 跨主机集群网络,支持Docker Swarm集群内容器通信。 分布式应用部署

2. 端口映射

docker run -p 8080:80 -p 443:443 my-web-app  # 映射宿主机8080→容器80,443→443  
docker run -P my-app                          # 自动映射镜像中EXPOSE声明的所有端口  

七、Docker Compose 实战

1. compose.yml示例

version: '3.8'  
services:  
  web:  
    build: ./web          # 基于./web目录的Dockerfile构建  
    ports:  
      - "8080:80"         # 端口映射  
    depends_on:  
      - db                # 确保db服务先启动  
  db:  
    image: mysql:5.7       # 使用官方MySQL镜像  
    environment:  
      MYSQL_ROOT_PASSWORD: secret  # 设置环境变量  
    volumes:  
      - db-data:/var/lib/mysql     # 挂载数据卷  
volumes:  
  db-data:             # 定义命名卷  
networks:  
  app-net:             # 定义自定义网络  
    driver: bridge  

2. 常用命令

docker-compose up -d         # 后台启动所有服务  
docker-compose down --volumes # 停止并删除容器、网络和卷  
docker-compose logs web      # 查看web服务日志  

八、数据持久化方案

1. 数据卷(Volumes)

docker volume create my-vol       # 创建命名卷  
docker run -v my-vol:/data app    # 挂载卷到容器/data目录  

2. 绑定挂载(Bind Mounts)

docker run -v /host/path:/container/path app  # 挂载宿主机目录到容器  

3. 内存挂载(tmpfs)

docker run -v tmpfs:/tmp app  # 在容器/tmp目录使用内存存储(重启后数据丢失)  

九、高级特性与安全建议

1. 镜像优化原则

  • 避免使用latest标签,指定明确版本(如nginx:1.23.3)。
  • 合并RUN指令减少镜像层数(如RUN apt-get update && install -y curl)。
  • 清理临时文件(如RUN rm -rf /var/lib/apt/lists/*)。

2. 安全最佳实践

  • 避免以root用户运行容器,使用普通用户:
    RUN useradd -m app && chown app /app  
    USER app  
  • 限制容器资源:
    docker run --memory=1g --cpu-shares=512 my-app  # 限制1GB内存和512 CPU份额  
  • 使用只读根文件系统:
    RUN chmod -R a-w /  

3. 镜像迁移建议

  • 停止使用CentOS镜像,推荐替换为TencentOS Server:
    docker pull tencentos/tencentos_server24  # 拉取腾讯云TencentOS镜像  

十、参考资源

  • Docker官方文档
  • 腾讯云Docker最佳实践
  • Docker Hub镜像仓库
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/archives/article/4415

相关文章

  • CentOS安装docker
  • 解决IDEA2024UI卡顿问题
  • iTerm2设置SSH自动连接服务器
  • 更多的Xshell配色方案
  • 推荐一款比较养眼的Xshell配色方案
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: docker 容器
最后更新:2025年5月21日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >

文章评论

1 2 3 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 52 53 54 55 57 58 60 61 62 63 64 65 66 67 69 72 74 76 77 78 79 80 81 82 85 86 87 90 92 93 94 95 96 97 98 99
取消回复

我是人间惆怅客,知君何事泪纵横,断肠声里忆平生。

最新 热点 随机
最新 热点 随机
@Valid 和 @Validated 的区别 URL地址末尾加不加“/”有什么区别 Java设计模式:状态模式 Java设计模式:策略模式 Java设计模式:模板方法模式 Docker核心概念解析及使用
玩博客的人是不是越来越少了?2024年11月1号 农历十月初一准备入手个亚太的ECS,友友们有什么建议吗?别再背线程池的七大参数了,现在面试官都这么问我的第一个WordPress插件:Dylan Custom Plugin上线了动态线程池框架DynamicTp使用以及架构设计
jmap命令(jdk1.8) 妈呀,昨天晚上睡觉做了一晚上的梦,可累死我了 基于Java8的Either类 如何高效的学习技术? 离骚 准备入手个亚太的ECS,友友们有什么建议吗?
标签聚合
ElasticSearch 文学 设计模式 MySQL SpringBoot SQL JAVA 数据库 K8s 教程 多线程 JVM Spring 分布式 IDEA 架构 docker Redis 面试 日常
友情链接
  • i架构
  • LyShark - 孤风洗剑
  • 临窗旋墨
  • 博友圈
  • 博客录
  • 博客星球
  • 哥斯拉
  • 志文工作室
  • 搬砖日记
  • 旋律的博客
  • 旧时繁华
  • 林羽凡
  • 知向前端
  • 集博栈
  • 韩小韩博客

COPYRIGHT © 2025 lifengdi.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Dylan

津ICP备2024022503号-3