Docker容器镜像与容器常用操作指南

一、镜像基础操作
  1. 搜索镜像

    docker search <镜像名>
    

    在Docker Hub中查找公开镜像,例如:

    docker search nginx
    
  2. 拉取镜像

    docker pull <镜像名>:<标签>
    

    从仓库拉取镜像到本地,标签默认为latest

    docker pull nginx:alpine
    
  3. 查看本地镜像

    docker images
    

    列出所有本地镜像,包含镜像ID、标签、大小等信息。

  4. 删除镜像

    docker rmi <镜像ID或镜像名>:<标签>
    

    删除指定镜像,若镜像被容器引用需先删除容器:

    docker rmi nginx:alpine
    
  5. 构建镜像
    通过Dockerfile构建自定义镜像:

    docker build -t <自定义镜像名>:<标签> <Dockerfile路径>
    

    例如:

    docker build -t myapp:v1 .
    
二、容器基础操作
  1. 运行容器

    docker run [OPTIONS] <镜像名>:<标签>
    

    常用参数:

    • -d:后台运行(守护进程模式)
    • --name:指定容器名称
    • -p <主机端口>:<容器端口>:端口映射
    • -v <主机路径>:<容器路径>:数据卷挂载
    • -e <环境变量>:设置环境变量
      示例:
    docker run -d --name web -p 8080:80 -v /data:/usr/share/nginx/html nginx:alpine
    
  2. 查看容器

    docker ps        # 查看运行中的容器
    docker ps -a     # 查看所有容器(包括已停止的)
    
  3. 停止容器

    docker stop <容器名或容器ID>
    

    示例:

    docker stop web
    
  4. 启动已停止容器

    docker start <容器名或容器ID>
    
  5. 删除容器

    docker rm <容器名或容器ID>
    

    强制删除运行中的容器:

    docker rm -f <容器名或容器ID>
    
  6. 查看容器日志

    docker logs <容器名或容器ID>
    

    常用参数:

    • -f:实时跟踪日志输出
    • --tail <行数>:显示最后N行日志
      示例:
    docker logs -f --tail 50 web
    
  7. 进入容器内部

    docker exec -it <容器名或容器ID> /bin/bash
    

    若容器无bash,可替换为/bin/sh

    docker exec -it <容器名或容器ID> /bin/sh
    
三、进阶操作
  1. 提交容器为镜像
    将容器修改保存为新镜像:

    docker commit <容器名或容器ID> <新镜像名>:<标签>
    
  2. 数据卷管理

    • 创建数据卷
      docker volume create <卷名>
      
    • 运行容器时挂载卷
      docker run -v <卷名>:<容器路径> ...
      
    • 查看所有卷
      docker volume ls
      
  3. 网络管理

    • 查看网络
      docker network ls
      
    • 创建自定义网络
      docker network create <网络名>
      
    • 运行容器时指定网络
      docker run --network=<网络名> ...
      
  4. 资源限制
    限制容器使用的CPU和内存:

    docker run --memory=512m --cpus=1.0 ...
    
四、最佳实践
  1. 镜像优化

    • 使用多阶段构建减少镜像体积。
    • 清理构建过程中产生的临时文件(如apt-get cleanrm -rf /var/lib/apt/lists/*)。
    • 选择轻量级基础镜像(如alpine)。
  2. 容器命名规范
    为容器设置语义化名称(如web-serverdatabase),避免使用默认随机名称。

  3. 日志轮转
    通过--log-opt参数限制日志文件大小:

    docker run --log-opt max-size=10m --log-opt max-file=3 ...
    
  4. 定期清理

    • 删除无标签镜像(<none>镜像):
      docker image prune
      
    • 删除所有停止的容器:
      docker container prune
      
    • 删除未使用的卷、网络和镜像:
      docker system prune
      
  5. 安全建议

    • 避免以root用户运行容器,使用USER指令指定非特权用户。
    • 定期更新镜像以修复安全漏洞。
    • 使用docker scan检查镜像漏洞(需Docker Hub账号)。
五、容器镜像及容器在OS组件编译构建中的意义

容器化技术在操作系统(OS)组件的编译构建过程中发挥着革命性作用,其核心价值体现在以下方面:

  1. 环境一致性保障

    • 问题背景:传统编译构建中,开发、测试、生产环境差异(如库版本、编译工具链不一致)常导致“在我机器上能编译通过”的诡异问题。
    • 容器化解决方案:通过Dockerfile定义编译环境,将OS内核、编译工具链(如gcc/binutils)、依赖库(如glibc)及构建脚本打包为镜像。例如,构建Linux内核时,可基于ubuntu:20.04镜像安装指定版本的build-essentiallibssl-dev等依赖,确保全球开发者使用完全相同的编译环境。
  2. 资源隔离与效率提升

    • 并行构建优化:容器轻量级特性支持在单台物理机启动多个隔离的编译容器,利用docker run --cpus=2 -m 4g限制每个容器的CPU/内存资源,实现编译任务并行化,缩短大型项目(如LLVM编译器)的全量构建时间。
    • CI/CD集成:在Jenkins/GitLab CI流水线中,每个构建阶段(如编译、测试、打包)运行在独立容器中,避免任务间资源竞争,提升流水线执行效率。
  3. 依赖管理与可重复性

    • 依赖锁定:通过Dockerfile显式声明编译所需依赖(如RUN apt-get install -y cmake=3.16.7),避免因宿主机环境变化导致的依赖冲突。
    • 镜像层缓存:Docker利用分层镜像技术,对Dockerfile中未变更的指令(如基础镜像、依赖安装)复用缓存层,仅重新执行变更的步骤(如代码编译),加速迭代构建。
  4. 安全合规性

    • 最小权限原则:在编译镜像中避免安装非必要工具(如curlwget),减少攻击面。例如,使用distroless基础镜像(仅包含运行时代码)替代完整OS镜像。
    • 镜像签名验证:通过Docker Content Trust对编译生成的镜像进行签名,确保镜像在传输和部署过程中未被篡改。
六、容器镜像源的配置与维护操作
1. 镜像加速器配置

场景:国内网络环境下,从Docker Hub拉取镜像速度缓慢。

配置步骤(以阿里云为例)

  1. 获取加速地址

    • 登录阿里云容器镜像服务控制台,进入“镜像中心”->“镜像加速器”,获取专属加速地址(如https://<你的ID>.mirror.aliyuncs.com)。
  2. 修改Docker配置

    • Linux:编辑/etc/docker/daemon.json,添加:
      {"registry-mirrors": ["https://<你的ID>.mirror.aliyuncs.com"]
      }
      
    • Windows/macOS(Docker Desktop)
      进入Docker Desktop设置,勾选“Use Docker Mirror”,填入加速地址。
  3. 重启Docker服务

    systemctl restart docker  # Linux
    
  4. 验证配置

    docker info | grep "Registry Mirrors"
    # 输出应包含配置的加速地址
    

常用国内镜像加速器

  • 腾讯云:https://mirror.ccs.tencentyun.com
  • 网易云:https://hub-mirror.c.163.com
  • USTC:https://docker.mirrors.ustc.edu.cn
2. 私有仓库配置与管理

场景:企业内部需要存储私有镜像(如未开源的OS组件编译产物)。

方案对比

方案特点适用场景
本地Registry轻量级,docker run -d -p 5000:5000 --name registry registry:2测试环境/小型团队
Harbor企业级,支持镜像复制、LDAP集成、镜像扫描生产环境/中大型企业

Harbor部署步骤

  1. 安装Harbor

    # 下载安装包
    wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz
    tar -zxvf harbor-online-installer-v2.9.0.tgz
    cd harbor# 修改配置(harbor.yml)
    hostname: reg.yourdomain.com
    http:port: 80
    # 启用HTTPS(可选)
    # certificate: /path/to/cert.crt
    # private_key: /path/to/cert.key# 安装
    ./install.sh
    
  2. 推送镜像到Harbor

    # 登录Harbor
    docker login reg.yourdomain.com# 打标签并推送
    docker tag nginx:alpine reg.yourdomain.com/library/nginx:alpine
    docker push reg.yourdomain.com/library/nginx:alpine
    
  3. 镜像复制(跨Region容灾)

    • 在Harbor Web界面进入“复制管理”,创建复制规则,实现镜像在不同Harbor实例间的自动同步。
3. 镜像安全维护

关键操作

  1. 漏洞扫描

    • 工具选择:Clair(开源)、Trivy(支持多语言)、Anchore Engine(企业级)。
    • 集成CI/CD:在GitLab CI中添加扫描阶段:
      scan_image:stage: securityscript:- trivy image --severity HIGH,CRITICAL reg.yourdomain.com/project/app:latest
      
  2. 镜像更新策略

    • 自动重建:在Dockerfile中指定基础镜像标签(如ubuntu:22.04而非ubuntu:latest),配合Harbor的Webhook,当基础镜像更新时触发镜像重建。
    • 滚动更新:在Kubernetes中通过Deployment的rollingUpdate策略实现镜像版本平滑升级。
  3. 镜像清理

    • 删除无用镜像
      docker image prune -a --filter "until=720h"  # 删除30天前未使用的镜像
      
    • Harbor垃圾回收:在Harbor Web界面进入“清理”,设置保留策略(如保留最近3个版本)。
七、总结

容器化技术通过环境一致性、资源隔离、依赖管理等特性,显著提升了OS组件编译构建的效率与可靠性。结合镜像加速器、私有仓库及安全维护策略,可构建端到端的容器化研发流水线,加速操作系统及核心组件的迭代周期。

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

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

相关文章

TDengine 更多安全策略

简介 上一节我们介绍了 TDengine 安全部署配置建议&#xff0c;除了传统的这些配置外&#xff0c;TDengine 还有其他的安全策略&#xff0c;例如 IP 白名单、审计日志、数据加密等&#xff0c;这些都是 TDengine Enterprise 特有功能&#xff0c;其中白名单功能在 3.2.0.0 版本…

小白入门:GitHub 远程仓库使用全攻略

一、Git 核心概念 1. 三个工作区域 工作区&#xff08;Working Directory&#xff09;&#xff1a;实际编辑文件的地方。 暂存区&#xff08;Staging Area&#xff09;&#xff1a;准备提交的文件集合&#xff08;使用git add操作&#xff09;。 本地仓库&#xff08;Local…

[创业之路-370]:企业战略管理案例分析-10-战略制定-差距分析的案例之小米

战略制定-差距分析的案例之小米 在战略制定过程中&#xff0c;小米通过差距分析明确自身与市场机会之间的差距&#xff0c;并制定针对性战略&#xff0c;实现快速发展。以下以小米在智能手机市场的机会差距分析为例&#xff0c;说明其战略制定过程。 一、市场机会识别与差距分…

Index-AniSora模型论文速读:基于人工反馈的动漫视频生成

Aligning Anime Video Generation with Human Feedback 一、引言 论文开头指出&#xff0c;尽管视频生成模型不断涌现&#xff0c;但动漫视频生成面临动漫数据稀缺和运动模式异常的挑战&#xff0c;导致生成视频存在运动失真和闪烁伪影等问题&#xff0c;难以满足人类偏好。现…

第 4 章:网络与总线——CAN / Ethernet / USB-OTG

本章目标: 深入理解三种关键通信总线(CAN、Ethernet、USB-OTG)的协议架构、硬件接口与软件驱动 掌握 STM32(或同类 MCU)中各总线的寄存器配置、中断/DMA 驱动框架 通过实战案例,实现基于 CAN 总线的节点通信、基于 Ethernet 的 TCP/IP 通信,以及基于 USB-OTG 的虚拟串口…

数据结构-DAY05

一、栈的概念 1.栈是限定仅在表尾进行插入和删除操作的线性表。先进后出、后进先出 栈顶:允许操作的一端 栈底:不允许操作的一端入栈&#xff0c;出栈。 栈分为&#xff1a;顺序栈 链式栈 2.栈结构是在堆区创建的 3.优先级就是通过栈来解决的 先进后出…

leetcode 153. Find Minimum in Rotated Sorted Array

题目描述 分析 可以发现一个规律&#xff1a; 假如整个数组最后一个元素是x。 最小值左侧&#xff08;不含最小值自己&#xff09;的元素全部大于x。 最小值右侧&#xff08;包含最小值自己&#xff0c;不包含x&#xff09;的元素全部小于x。 如果整个数组是有序的&#x…

如何在 AOSP 中判断一个源文件属于哪个模块(以 CameraService 为例)

如何在 AOSP 中判断一个源文件属于哪个模块&#xff08;以 CameraService 为例&#xff09; 在 AOSP 开发中&#xff0c;经常需要修改底层 C 代码&#xff08;如 CameraService.cpp&#xff09;&#xff0c;但很多人会遇到一个问题&#xff1a; 我修改了某个 .cpp 文件&#x…

云原生主要架构模式

云原生(Cloud Native)是一种利用云计算的优势来构建和运行可扩展、弹性和高效应用程序的方法。它不仅仅是技术的集合,更是一种架构和设计理念。本文将围绕你提出的几部分,深入探讨云原生主要的架构模式,帮助你理解如何利用这些模式构建现代化的应用。 1. 服务化架构模式(…

深入理解MySQL结构与执行流程

标题&#xff1a;深入理解MySQL结构与执行流程 MySQL以其开源、灵活性和强大的功能成为了最受欢迎的关系型数据库管理系统之一。无论是初创公司还是大型企业&#xff0c;都广泛使用MySQL来存储和管理数据。为了帮助大家更好地理解和优化MySQL的性能&#xff0c;本文将详细讲解…

Python web 开发 Flask HTTP 服务

Flask 是一个轻量级的 Web 应用框架&#xff0c;它基于 Python 编写&#xff0c;特别适合构建简单的 Web 应用和 RESTful API。Flask 的设计理念是提供尽可能少的约定和配置&#xff0c;从而让开发者能够灵活地构建自己的 Web 应用。 https://andi.cn/page/622189.html

BMVC2023 | 多样化高层特征以提升对抗迁移性

Diversifying the High-level Features for better Adversarial Transferability 摘要-Abstract引言-Introduction相关工作-Related Work方法-Methodology实验-Experiments结论-Conclusion 论文链接 GitHub链接 本文 “Diversifying the High-level Features for better Adve…

虚幻引擎5-Unreal Engine笔记之摄像头camera

虚幻引擎5-Unreal Engine笔记之摄像头camera code review! 目录 第一部分&#xff1a;摄像头的基础概念 1.1 UE5 中摄像头的定义与作用1.2 UE5 中摄像头的类型与分类 第二部分&#xff1a;摄像头的代码结构与分类 2.1 摄像头是类还是组件&#xff1f;2.2 组件的本质&#xff…

【大数据】MapReduce 编程-- PageRank--网页排名算法,用于衡量网页“重要性”-排序网页

PageRank 是 Google 创始人拉里佩奇&#xff08;Larry Page&#xff09;和谢尔盖布林&#xff08;Sergey Brin&#xff09;在 1998 年提出的一种网页排名算法&#xff0c;用于衡量网页“重要性”的一种方式。它是搜索引擎中用于排序网页的一种基础算法 一个网页越是被其他重要…

React Flow 数据持久化:Django 后端存储与加载的最佳实践(含详细代码解析)

在构建 React Flow 应用时&#xff0c;前端呈现的节点与连线构成的可视化流程只是冰山一角&#xff0c;其背后的数据持久化与灵活调取才是确保应用稳定运行、支持用户数据回溯与协作的关键。因此&#xff0c;后端存储与加载 React Flow 信息的环节&#xff0c;就如同整个应用的…

深度学习中的归一化:提升模型性能的关键因素

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4-turbo模型辅助完成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认…

Pandas:Series和DataFrame的概念、常用属性和方法

本文目录&#xff1a; 一、Series和Dataframe的概念二、创建Series对象三、创建Dataframe对象&#xff08;一&#xff09;Series1.Series的常用属性总结如下&#xff1a;2.Series的常用方法总结如下&#xff1a; &#xff08;二&#xff09;Dataframe1.Dataframe的常用属性2.Da…

数据中心Overlay解决方案

文档围绕数据中心 Overlay 解决方案展开,指出数据中心向大集中、虚拟化、云业务演进,传统架构存在网络规划复杂、弹性不足、业务扩展受限等问题。Overlay 网络在物理网络上构建虚拟网络,实现名址分离、网络与物理解耦,支持业务灵活部署。方案采用VXLAN 技术(如 SDN 控制模…

SpringBoot 项目实现操作日志的记录(使用 AOP 注解模式)

本文是博主在做关于如何记录用户操作日志时做的记录&#xff0c;常见的项目中难免存在一些需要记录重要日志的部分&#xff0c;例如权限和角色设定&#xff0c;重要数据的操作等部分。 博主使用 Spring 中的 AOP 功能&#xff0c;结合注解的方式&#xff0c;对用户操作过的一些…

以太联 - Intellinet 闪耀台北 SecuTech 国际安全科技应用博览会

2025 年 5 月 7 日至 9 日&#xff0c;台北 SecuTech 国际安全科技应用博览会现场热闹非凡&#xff0c;以太联 - Intellinet 携旗下前沿产品与解决方案精彩亮相&#xff0c;成为展会上一道亮丽的风景线&#xff0c;吸引了众多业内人士的目光&#xff0c;收获了广泛关注与高度认…