李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 系列文章
  • AI工具集
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • Now
    • 每日心情
    • 网站地图
    • 网站统计
    • 赞助
  • 星球穿梭
  • 🚇开往
白雪成红
惟坚韧者始能遂其志
  1. 首页
  2. 原创
  3. 正文

Docker核心概念解析及使用

2025年5月21日 约 1,907 字7 分钟 188 0 0
本文最后更新于 2025年5月21日,距今已 507 天,其中的信息可能已经发生变化,请注意甄别。

一、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镜像仓库

参考链接

4
  1. 1Docker官方下载页www.docker.com
  2. 2Docker官方文档docs.docker.com
  3. 3腾讯云Docker最佳实践cloud.tencent.com
  4. 4Docker Hub镜像仓库hub.docker.com
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

Docker核心概念解析及使用

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: docker 容器
最后更新:2025年5月21日

岁月同一天 10 月 11 日

回望过去的今天,你在写什么

  • 中间件
    1 年前 2025年10月11日
    Kafka 为什么要抛弃 Zookeeper?

    Kafka 抛弃 Zookeeper(引入 KRaft 模式)是为了解决长期依赖 Zookeeper 带来的性能瓶颈、架…

  • 中间件
    1 年前 2025年10月11日
    高性能场景为什么推荐使用PostgreSQL,而非MySQL?

    在高性能场景(如高并发读写、复杂查询、大数据量存储、多维度数据处理等)中,PostgreSQL 常被优先推荐,核心原因在…

  • 原创
    7 年前 2019年10月11日
    JAVA关键字之volatile关键字说明

    volatile作用 volatile主要是为了解决多线程内存不可见问题。 对于一写多读,是可以解决变量同步问题,但是如…

相关文章
  • k8s+docker部署Golang项目2020年6月4日
  • k8s + docker + Jenkins使用Pipeline部署SpringBoot项目时Jenkins错误集锦2020年4月8日
  • 为什么不建议在 Docker 中运行 MySQL?从技术原理到实践避坑2025年10月24日
  • CentOS安装docker2019年10月25日
  • Dockerfile指令详解之COPY和ADD2020年6月5日

李锋镝

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

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

还没有评论,快来抢沙发吧~

晚上,我在宿舍和几个兄弟在聊天,忽然一哥们冲进屋内。他大喊:“我突然有一种热烈的想学习的冲动!”我说:“想学就学啊,没人拦你!”这哥们走到桌子前坐下。端起了一杯水说:“不行,这太冲动了,喝口水冷静一下。”我:……

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
讨论下XXL-JOB GLUE模式的安全问题 心气没了,干什么都不得劲 Kratos-plus v1.1.26版本更新说明 我觉得是时候公布我的导航网站了 代码是 AI 写的,生产事故谁背锅? 给主题增加了游客中心功能
给主题增加了游客中心功能我觉得是时候公布我的导航网站了游本昌去世关于主题加载速度优化的一点儿小演进给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能心气没了,干什么都不得劲
docker registry私库镜像删除 如何通过个人博客赚钱? 【PostgreSQL 15】PostgreSQL 15对UNIQUE和NULL的改进 JAVA开发处理金额的数据类型你知道多少? WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比 如何通过命令查看Java应用内存中对象数量
最近评论
老张博客 发布于 14 小时前(10月10日) NAS现在就不要搞了吧,除非你手里有内存和硬盘。
李锋镝 发布于 19 小时前(10月10日) 确实,很多不必要的东西,买了回来也是吃灰……
林羽凡 发布于 23 小时前(10月10日) 一个是不想折腾了,另一个有些觉得没必要的折腾或购买,想想就会算了。
李锋镝 发布于 23 小时前(10月10日) 少年老成吧大概是 :21:
Hary 发布于 23 小时前(10月10日) 我也是这样,感觉都不想折腾了,我还没到中年呢吧啊啊啊
标签聚合
WordPress 架构 MySQL Claude Theme AI编程 日常 Redis 多线程 SQL K8s JAVA IDEA 分布式 ElasticSearch 数据库 SpringBoot Spring JVM AI
友情链接
  • 搬砖日记
  • Mr.Sun的博客
  • 皮皮社
  • lijie blog
  • 志文工作室
  • 九仞之行
  • 彬红茶日记
  • 知向前端
  • 韩情脉脉
  • 哥斯拉
  • 林羽凡
  • 瓦匠个人小站
  • Honesty
  • 韩小韩博客
  • sssr7844的博客
  • 老张博客
  • Serendipity
  • 懋和道人

COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

lifengdi.com 十年之约虫洞

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号