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

Docker实战指南:从安装到架构解析

一、Docker 安装指南

Ubuntu/Debian 系统安装

# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc# 安装依赖
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release# 添加 Docker GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 设置稳定版仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io# 验证安装
sudo docker run hello-world

安装后配置

# 将当前用户加入 docker 组(避免每次使用 sudo)
sudo usermod -aG docker $USER# 重启 Docker 服务
sudo systemctl restart docker# 配置镜像加速器(国内用户)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://your-mirror.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

🏗️ 二、Docker 架构深度解析

Docker CLI
(客户端)

Docker Daemon
(服务器)

Containerd

RunC

核心组件详解

  • Docker Daemon (dockerd):常驻后台进程,管理 Docker 对象
  • Docker Client (docker):用户与 Docker 交互的主要接口
  • Containerd:行业标准的容器运行时
  • RunC:轻量级容器运行时

🔍 三、Docker 内部原理深度剖析

命名空间(Namespaces)隔离

# 查看容器的命名空间
docker inspect --format '{{.State.Pid}}' <container_id>
ls -l /proc/<pid>/ns/

控制组(Cgroups)资源限制

# 查看容器的 Cgroups 配置
cat /sys/fs/cgroup/memory/docker/<container_id>/memory.limit_in_bytes
cat /sys/fs/cgroup/cpu/docker/<container_id>/cpu.shares

联合文件系统(UnionFS)

# 查看镜像分层信息
docker history nginx:latest

🚀 四、Docker 核心工作流程

镜像构建流程

# Dockerfile 示例
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

容器启动流程

复制

docker run -d --name web -p 80:80 nginx:latest

🔧 五、高级特性与最佳实践

Docker Compose 多容器管理

# docker-compose.yml 示例
version: '3.8'
services:web:image: nginx:latestports:- "80:80"volumes:- ./html:/usr/share/nginx/htmldb:image: postgres:13environment:POSTGRES_PASSWORD: example

安全最佳实践

# 使用非root用户运行
FROM node:16
RUN useradd -m appuser
USER appuser
WORKDIR /home/appuser
COPY --chown=appuser:appuser . .
CMD ["node", "app.js"]

📊 六、性能监控与调试

容器监控命令

# 查看容器资源使用
docker stats# 查看容器详细配置
docker inspect <container_id># 查看容器日志
docker logs -f <container_id># 性能分析
docker exec <container_id> top

资源限制配置

# 运行带资源限制的容器
docker run -d \--name limited-container \--memory="512m" \--cpus="1.5" \--blkio-weight="500" \nginx:latest
http://www.xdnf.cn/news/1441819.html

相关文章:

  • 【Linux】网络(中)
  • 数据结构:栈和队列(上)
  • 数据结构从青铜到王者第十九话---Map和Set(2)
  • 下载必要软件
  • Qt读写Excel--QXlsx基本使用
  • 基于-轻量级文档搜索系统的测试报告
  • 【GM3568JHF】FPGA+ARM异构开发板 使用指南:WIFI
  • SQLite3 操作指南:SQL 语句与 ORM 方法对比解析​
  • 存算一体:重构AI计算的革命性技术(1)
  • K8s Pod CrashLoopBackOff:从镜像构建到探针配置的排查过程
  • react-android-0.80.2-debug.aar下载很慢
  • GitHub 宕机自救指南技术文章大纲
  • Flutter Android真机器调式,虚拟机调试以及在Vscode中开发Flutter应用
  • 充电座结构设计点-经验总结
  • 10.2 工程学中的矩阵(2)
  • Android/Java 异常捕获
  • 电子病历空缺句的语言学特征描述与自动分类探析(以GPT-5为例)(中)
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘isort’问题
  • MCP模型库哪个好?2025年收录12万+服务的AI智能体工具集成平台推荐
  • AI创业公司:来牟科技-智能割草机器人
  • 如何高效记单词之:抓住首字母——以find、fund、fond、font为例
  • 股指期货放开后,市场会发生什么变化?
  • 数据结构:顺序栈与链栈的原理、实现及应用
  • 解析SWOT分析和PV/UV这两个在产品与运营领域至关重要的知识点。
  • 前端性能优化:请求和响应优化(HTTP缓存与CDN缓存)
  • Redis初阶学习
  • 宋红康 JVM 笔记 Day12|执行引擎
  • 《SVA断言系统学习之路》【03】关于布尔表达式
  • 番茄生吃熟吃大PK!VC vs 番茄红素,谁更胜一筹?医生不说的秘密!
  • 【算法--链表】142.环形链表中Ⅱ--通俗讲解如何找链表中环的起点