李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 博友圈
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • 网站地图
    • 网站统计
    • 另一个网站
    • 我的导航站
    • 赞助
  • 🚇开往
!Destiny
惟坚韧者始能遂其志
  1. 首页
  2. 原创
  3. 正文

Docker核心概念解析及使用

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

一、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
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

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

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

Docker核心概念解析及使用

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

微信扫一扫分享

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

岁月同一天 9 月 23 日

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

  • 代码人生
    1 年前 2025年9月23日
    Consul开启transparent-proxy访问外部资源的时候,请求偶发Connection reset问题分析

    在Consul中启用透明代理(Transparent Proxy)后,访问外部资源出现偶发Connection rese…

  • 其他
    7 年前 2019年9月23日
    Idea激活码

    2020.4.21到期 亲测有效 812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNI…

相关文章
  • 为什么不建议在 Docker 中运行 MySQL?从技术原理到实践避坑2025年10月24日
  • k8s+docker部署Golang项目2020年6月4日
  • docker registry私库镜像删除2020年6月6日
  • Docker打包部署示例2019年10月31日
  • k8s + docker + Jenkins使用Pipeline部署SpringBoot项目时Jenkins错误集锦2020年4月8日

李锋镝

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

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

文章评论

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

封侯非我意,但愿海波平。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
Redis7+&8.X 全新进阶系列(02):Redis Functions 详解——替代Lua脚本的官方轻量化函数方案 Redis7.x&8.x 全新进阶系列(01):划时代升级总览——从6.x到7.x/8.x全版本变革全景 让WordPress静态化之Rocket‑Nginx WordPress下一代默认主题Ipsum预览 C++之父重磅发声:AI编程正在毁掉一代程序员 支撑全网40%网站的WordPress正在重新拥抱PHP生态
关于主题加载速度优化的一点儿小演进给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比关于使用AI的一些思考WordPress下一代默认主题Ipsum预览Kratos+ v1.1.16版本更新说明
什么是RESTful?RESTful详解 重构 Controller 终极指南:从臃肿到优雅的 7 大黄金法则 + 实战技巧 linux中ftp查看不到文件列表的问题 k8s+docker部署Golang项目 【漫画】戏说外行对程序员的误会有多深 Chrome 浏览器漏洞
最近评论
李锋镝 发布于 23 小时前(09月22日) 是的,换风格了,不过我觉得之前的年份命名挺好的,一看就知道哪一年的
obaby 发布于 1 天前(09月22日) 我现在是个假的wp了,哈哈哈 wp终于改了主题的命名风格了
李锋镝 发布于 3 天前(09月20日) 静态博客我之前也用过,但是感觉不是很方便,后来就一直用的WordPress
Sheep5 发布于 3 天前(09月20日) 我直接用静态博客,天然有速度优势。
不凡 发布于 3 天前(09月20日) 主要是wordpress插件丰富,需要什么功能插件,插件市场应有尽有,typecho是性能更好、更轻...
标签聚合
AI Claude JVM AI编程 IDEA 架构 K8s 分布式 Spring WordPress Theme 日常 SpringBoot ElasticSearch Redis SQL MySQL 数据库 JAVA 多线程
友情链接
  • Serendipity
  • 彬红茶日记
  • 蜗牛工作室
  • Honesty
  • 皮皮社
  • 韩情脉脉
  • 若梦博客
  • Mr.Sun的博客
  • 哥斯拉
  • lijie blog
  • 知向前端
  • sssr7844的博客
  • 懋和道人
  • 九仞之行
  • 韩小韩博客
  • 老张博客
  • 志文工作室
  • 临窗旋墨
  • 瓦匠个人小站
  • 林羽凡

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号