深入理解 Docker 及常用命令

在云计算与容器化技术飞速发展的今天,Docker 已成为开发者必备的核心技能。本文将从底层原理到实战操作,系统梳理 Docker 的核心知识体系,结合大量实操案例帮助读者快速掌握容器化部署的全流程。

一、Docker 核心概念与底层原理

1.1 容器技术的本质突破

理解 Docker 的关键在于区分内核与用户空间的边界。容器内的进程并非运行在虚拟环境中,而是直接依托宿主内核运行,这与虚拟机有本质区别。以宿主为 Ubuntu、容器为 CentOS 为例:

  • 容器模式:CentOS 容器中的进程直接向 Ubuntu 内核发送系统调用(syscall),仅通过镜像提供独立的用户空间(userland)
  • 虚拟机模式:CentOS 进程先与虚拟机内的 CentOS 内核交互,再通过虚拟硬件层转发至宿主系统

这种设计使得 Docker 容器具备轻量级特性 —— 一个 Tomcat 容器的资源占用通常小于 50MB,而传统虚拟机至少需要 512MB 内存。

1.2 Docker 架构深度解析

Docker 核心组件架构图:

  • 客户端(Client):用户交互入口,通过 API 与守护进程通信
  • 守护进程(Daemon):运行在宿主机后台,负责容器生命周期管理
  • 镜像(Images):只读的文件系统模板,采用分层存储结构
  • 容器(Containers):镜像的运行实例,可看作 "带有读写层的镜像"
  • 仓库(Registry):集中存储镜像的服务,分为公共仓库与私有仓库

1.3 容器 vs 虚拟机:性能与架构对比

维度容器(Docker)虚拟机(VM)
启动时间毫秒级(100ms-500ms)分钟级(1min-3min)
资源占用共享宿主内核,资源消耗极低独立操作系统,资源占用高
隔离级别进程级隔离(Namespace+Cgroup)系统级隔离(硬件虚拟化)
镜像大小通常 10MB-500MB至少 1GB 以上
应用场景微服务部署、持续集成多操作系统环境、资源隔离
运行机制对比图:

二、Docker 版本体系与选型建议

2.1 版本分类与特性差异

Docker 主要分为两大版本体系:

  • 社区版(Docker CE)

    • 免费开源,适合开发测试环境
    • 每季度发布新版本(3 月 / 6 月 / 9 月 / 12 月)
    • 支持周期为 6 个月
  • 企业版(Docker EE)

    • 付费订阅,提供官方技术支持
    • 包含高级安全特性(如 Trustee)
    • 支持周期长达 24 个月

2.2 版本号解析

Docker 24.0.5为例:

  • 24:主版本号,每年更新一次
  • 0:次版本号,代表重大功能更新
  • 5:修订号,包含 bug 修复和小功能增强

生产环境建议:选择偶数年份的 LTS 版本(如 20.10 LTS),兼顾稳定性与新特性支持。

三、多平台 Docker 安装实战

3.1 CentOS 8 安装指南

完整安装脚本:
# 1. 卸载旧版本
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 2. 设置仓库
sudo yum install -y yum-utils
sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo# 3. 安装Docker CE
sudo yum install docker-ce docker-ce-cli containerd.io# 4. 启动服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker# 5. 验证安装
sudo docker run hello-world

3.2 Ubuntu 22.04 安装优化

推荐安装方式:
# 使用APT源安装(推荐)
sudo apt-get update
sudo apt-get install \ca-certificates \curl \gnupg \lsb-releasecurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho \"deb [arch=$(dpkg --print-architecture) 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/nullsudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io# 优化Docker存储驱动(推荐使用overlay2)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"storage-driver": "overlay2","registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOFsudo systemctl daemon-reload
sudo systemctl restart docker

3.3 常见安装问题解决方案

  1. 端口冲突问题

    # 查看占用80端口的进程
    sudo lsof -i:80
    # 停止冲突服务
    sudo systemctl stop nginx
    
  2. SELinux 限制

    # 临时关闭SELinux
    setenforce 0
    # 永久关闭(修改配置文件)
    sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
    

四、Docker 核心命令实战手册

4.1 镜像管理命令集

命令格式功能说明实战示例
docker search [关键词]从仓库搜索镜像docker search mysql
docker pull [镜像名]拉取镜像到本地docker pull nginx:1.23-alpine
docker images查看本地镜像列表docker images -a
docker rmi [镜像ID]删除本地镜像docker rmi $(docker images -q)
docker tag [源镜像] [目标镜像]镜像打标签docker tag nginx:latest mynginx:v1

4.2 容器生命周期管理

核心操作命令:
  1. 创建容器docker create -it --name mycentos centos:7 /bin/bash
  2. 运行容器docker run -d -p 8080:80 --name myapp tomcat:9.0
  3. 进入容器docker exec -it mycentos bash
  4. 查看日志docker logs -f myapp
  5. 数据备份docker cp mycontainer:/data /backup

4.3 高级管理技巧

批量操作脚本:
# 停止所有运行中的容器
docker stop $(docker ps -q)# 清理所有停止的容器
docker rm $(docker ps -aq)# 清理未使用的镜像
docker image prune -a
资源限制配置:
# 限制容器使用1GB内存
docker run -m 1g --memory-swap=2g myapp# 限制CPU使用率为2个核心
docker run --cpus=2 myapp

五、Docker 仓库管理与实践

5.1 公共仓库高效使用

Docker Hub 使用技巧:
  1. 镜像加速:配置国内镜像源

    {"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
    }
    
  2. 组织管理:创建团队仓库

    # 登录组织仓库
    docker login -u myteam -p password team.docker.com
    # 推送镜像到组织仓库
    docker push team.docker.com/myapp:v1
    

5.2 私有仓库搭建实战

基于 Harbor 搭建企业级仓库:
  1. 安装 Docker Compose

    sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
  2. 部署 Harbor

    # docker-compose.yml
    version: '2'
    services:proxy:image: nginx:1.18-alpineports:- "443:443"- "80:80"registry:image: registry:2volumes:- /data/registry:/var/lib/registryharbor-core:image: harbor-core:v2.8.0environment:- DB_HOST=postgresql# 其他服务...
    
  3. 安全配置

    # 生成自签名证书
    openssl genrsa -out ca.key 4096
    openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=harbor.mydomain.com"# 配置客户端信任证书
    cp ca.crt /etc/docker/certs.d/harbor.mydomain.com/ca.crt
    systemctl restart docker
    

六、Docker 镜像深度解析

6.1 镜像分层存储原理

Docker 镜像采用 UnionFS 分层存储,以 Nginx 镜像为例:

  1. 基础层:alpine 操作系统(约 5MB)
  2. 运行时层:Nginx 二进制文件(约 30MB)
  3. 配置层:默认配置文件(约 1MB)
  4. 用户层:自定义配置(可变层)

这种设计实现了镜像的高效复用,多个容器可共享同一基础层。

6.2 Dockerfile 最佳实践

高性能 Dockerfile 示例:

dockerfile

# 基础镜像选择
FROM alpine:3.16 AS builder# 安装编译依赖
RUN apk add --no-cache gcc g++ make# 复制源码
WORKDIR /app
COPY . .# 编译应用
RUN make all# 生产环境镜像
FROM alpine:3.16
RUN apk add --no-cache libstdc++# 复制编译结果
COPY --from=builder /app/dist/myapp /usr/bin/# 暴露端口
EXPOSE 8080# 启动命令
CMD ["myapp", "-config", "/etc/myapp.conf"]

6.3 镜像优化技巧

  1. 分层优化

    dockerfile

    # 错误示例:多层操作
    RUN apt-get update
    RUN apt-get install -y python3# 正确示例:合并操作
    RUN apt-get update && apt-get install -y python3
    
  2. 体积优化

    dockerfile

    # 使用多阶段构建
    FROM python:3.9-slim AS builder
    # 构建阶段...FROM python:3.9-slim
    # 仅复制必要文件
    COPY --from=builder /app/dist /app
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/909659.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/909659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【卫星通信】卫星与5G深度融合的架构研究——释放非地面网络潜能,构建全球无缝连接【3GPP TR 23.700-19 V0.1.0 (2025-04)】

引言 随着5G网络部署的持续推进&#xff0c;卫星通信在覆盖偏远地区、保障应急通信等场景中的重要性日益凸显。3GPP Technical Report&#xff08;TR&#xff09;23.700-19 V0.1.0&#xff08;2025-04&#xff09;作为Release 20阶段的最新研究成果&#xff0c;系统性地探讨了…

kicad运行时出错,_Pnext->_Myproxy = nullptr;访问内存出错

花费了比较长的时间&#xff0c;解决了编译过程中遇到的许多问题后&#xff0c;终于把这个开源的工程编译好了&#xff0c;运行post build 脚本将需要的链接文件拷贝好。正当我以为没有任何问题了&#xff0c;双击可执行程序运行。 结果运行起来的时候报错了&#xff0c;提示无…

资深Java工程师的面试题目(一)并发编程

以下是几道针对Java并发编程的面试题&#xff0c;涵盖基础知识、高级概念和实际应用场景&#xff0c;适合资深Java工程师的面试评估&#xff1a; 1. 线程池与任务调度 题目: 描述Java线程池的核心参数&#xff08;如corePoolSize、maximumPoolSize、keepAliveTime等&#xff…

解决Spark4.0.0依赖问题

Apache Spark 4.0.0 冲突解决指南 1. 问题背景 在尝试运行一个基于 Apache Spark 4.0.0 的 Java 应用程序。根据 Spark 4.0.0 的发布说明&#xff0c;该版本默认支持 Scala 2.13 和 JDK 17。在初始设置和运行过程中&#xff0c;遇到了以下主要问题&#xff1a; 依赖冲突 (PO…

什么是SeaTunnel

SeaTunnel&#xff1a;高性能、分布式数据集成平台 1. 什么是SeaTunnel&#xff1f; SeaTunnel&#xff08;原名Waterdrop&#xff09;是一个高性能、分布式、可扩展的数据集成平台&#xff0c;专为大规模数据同步、ETL&#xff08;Extract, Transform, Load&#xff09;和实…

Android 使用OkHttp 下载文件失败问题定位和修复

一、背景 使用Okhttp下载文件时,存在失败情况,刚开始以为是网络问题,后面添加相关日志发现,是在网络波动比较大的情况下,被判为timeout超时,结束了下载任务。 二、解决方案 有问题的下载配置写法: 注:这里只是展示配置下载的关键代码 val client OkHttpClient()val request…

【Docker基础】Docker核心概念:命名空间(Namespace)之PID详解

目录 引言 1 基础概念回顾 1.1 命名空间概述 1.2 命名空间的类型 2 PID命名空间详解 2.1 PID命名空间的概念 2.2 PID命名空间的作用 2.3 PID命名空间的工作原理 2.3.1 PID命名空间的创建与销毁 2.3.2 PID命名空间的层次结构 2.3.3 PID命名空间的进程ID映射 3 PID命…

SSM框架:企业级Java开发利器

SSM框架详解&#xff1a;Java企业级开发的核心基石 SSM框架是Java企业级开发中最流行的框架组合&#xff0c;由Spring、Spring MVC和MyBatis三大框架整合而成。这个轻量级的框架组合为Java开发者提供了高效、灵活的企业级应用解决方案。 一、SSM框架组成解析 1. Spring框架 …

网络安全中的人工智能应用

人工智能&#xff08;AI&#xff09;在网络安全中的应用从根本上改变了企业抵御网络威胁的方式。它利用先进的机器学习&#xff08;ML&#xff09;算法分析多源海量风险数据&#xff0c;挖掘威胁模式&#xff0c;从而更轻松地快速应对新兴风险。AI 能以惊人的速度和准确性帮助发…

Vue + Spring Boot 前后端交互实践:正确使用 `Content-Type: application/json` 及参数传递方式

在前后端分离开发中&#xff0c;前端通过 HTTP 请求与后端进行数据交互是常见的操作。其中&#xff0c;Content-Type 是决定请求体格式的重要字段之一。本文将以一个具体的例子出发&#xff0c;讲解如何在 Vue 前端 使用 Axios 发送 JSON 格式请求&#xff0c;并在 Spring Boot…

微服务拆分 SpringCloud

拆分原则 什么时候拆分 大多数小型项目&#xff1a; 一般是先采用单体架构&#xff0c;随着用户规模扩大、业务复杂后再逐渐拆分为微服务架构&#xff08;前易后难&#xff09;。确定的大型项目&#xff1a; 资金充足&#xff0c;目标明确&#xff0c;可以直接选择微服务架构…

DataX Hive写插件深度解析:从数据写入到Hive表关联实战

引言 在大数据处理流程中&#xff0c;将数据高效写入Hive表是数据仓库建设的关键环节。DataX作为阿里巴巴开源的数据同步工具&#xff0c;其Hive写插件&#xff08;Hdfswriter&#xff09;提供了将数据写入HDFS并与Hive表无缝关联的能力。本文将系统介绍Hdfswriter的功能特性、…

基于国产USRP搭建十六通道同步采集系统, 耗费200万 欢迎免费体验

随着无线通信、雷达探测和电子侦察等技术的发展&#xff0c;多通道信号同步采集的需求日益突出。我司基于8台USRP-LW N321设备&#xff0c;构建了一套高精度十六路通道信号同步采集系统&#xff0c;该系统通过并行采集与精确时频对齐&#xff0c;可为空间谱测向和MIMO系统等关键…

《前端编译工具源映射配置:Webpack与Gulp的深度剖析》

当我们深入探索不同前端编译工具时&#xff0c;Webpack与Gulp在源映射配置上的差异与特色&#xff0c;如同隐藏在代码深处的神秘宝藏&#xff0c;等待我们去挖掘、去解读。 Webpack作为现代前端构建的核心工具&#xff0c;在源映射配置方面展现出了高度的灵活性与可定制性。它…

4. 时间序列预测的自回归和自动方法

4.1自回归 自回归是一种时间序列预测方法&#xff0c;仅依赖于时间序列的先前输出&#xff1a;该技术假设下一个时间戳的未来观测值与先前时间戳的观测值存在线性关系。 在自回归中&#xff0c;前一个时间戳的输出值成为预测下一个时间戳的输入值&#xff0c;并且误差遵循简单线…

Android 多屏幕旋转控制原理与实战

在嵌入式设备、双显示终端或定制系统中&#xff0c;Android 多屏幕控制&#xff08;尤其是屏幕方向旋转&#xff09;是一个兼具挑战与价值的功能模块。本文将深入分析如何识别多个显示、如何通过系统 API 控制旋转&#xff0c;并讨论为何某些 displayId 无法旋转。 &#x1f4c…

faiss上的GPU流程,GPU与CPU之间的联系

GPU使用流程 1、初始化阶段 1.1:初始化GPU资源对象 目的: 为GPU上的操作分配和管理资源,例如临时内存和CUDA流。 操作: 创建StandardGpuResources对象来管理GPU的内存和计算资源。例如: faiss::gpu::StandardGpuResources res; res.setTempMemory(1024 * 1024 * 512); …

在CentOS 7系统安装PostgreSQL 15时出现`libzstd.so.1`依赖缺失问题

--> 正在处理依赖关系 libzstd.so.1()(64bit)&#xff0c;它被软件包 postgresql15-server-15.13-1PGDG.rhel7.x86_64 需要---> 软件包 python3-pip.noarch.0.9.0.3-8.el7 将被 安装---> 软件包 python3-setuptools.noarch.0.39.2.0-10.el7 将被 安装--> 解决依赖关…

走进Coinate|迪拜第二大交易平台如何构建极速金融引擎

在加密资产交易飞速发展的今天&#xff0c;技术实力已成为交易平台生存与发展的核心竞争力。与那些高调营销却技术薄弱的平台不同&#xff0c;来自迪拜的头部交易平台——Coinate&#xff0c;则始终坚持”以技术立命”的发展路径。 在迪拜这片充满创新与资本活力的中东热土&am…

手机日志是什么?如何调试手机日志

目录 一、手机日志的类型&#xff1a; 二、如何查看和调试手机日志&#xff08;以 Android 为例&#xff09;&#xff1a; 方法 1&#xff1a;使用 Android Studio ADB&#xff08;推荐&#xff09; 方法 2&#xff1a;使用手机端日志工具&#xff08;免电脑&#xff09; …