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

docker 镜像完整生成指南

docker 镜像完整生成指南

1. 生成镜像
▶ 方法一:通过 docker commit 生成(适合临时修改)

# 1. 启动基础容器
docker run -it --name=cpp-dev ubuntu:18.04 /bin/bash# 2. 在容器内安装环境(示例)
apt update && apt install -y \build-essential \cmake \git \wget# 3. 安装 Boost 1.88
wget https://boostorg.jfrog.io/artifactory/main/release/1.88.0/source/boost_1_88_0.tar.gz
tar -xzf boost_1_88_0.tar.gz
cd boost_1_88_0
./bootstrap.sh && ./b2 install# 4. 退出容器并提交为镜像
exit
docker commit cpp-dev ubuntu18.04-boost1.88-cmake3.27-git:1.0

▶ 方法二:通过 Dockerfile 生成(推荐,可复现)

# Dockerfile 内容
FROM ubuntu:18.04
RUN apt update && apt install -y build-essential cmake git wget
RUN wget https://boostorg.jfrog.io/artifactory/main/release/1.88.0/source/boost_1_88_0.tar.gz && \tar -xzf boost_1_88_0.tar.gz && \cd boost_1_88_0 && \./bootstrap.sh && ./b2 install
# 构建镜像
docker build -t ubuntu18.04-boost1.88-cmake3.27-git:1.0 .

2. 验证镜像

# 查看镜像列表
docker images# 测试运行
docker run -it ubuntu18.04-boost1.88-cmake3.27-git:1.0 /bin/bash
boost_version=$(grep "BOOST_VERSION" /usr/local/include/boost/version.hpp | awk '{print $3}')
echo "Boost version: $((boost_version/100000)).$((boost_version/100%1000)).$((boost_version%100))"

3. 打包镜像

# 打包为 .tar 文件
docker save -o ubuntu-dev-env_1.0.tar ubuntu18.04-boost1.88-cmake3.27-git:1.0# (可选)压缩文件
gzip ubuntu-dev-env_1.0.tar

4. 共享镜像
▶ 方式一:直接发送文件

scp ubuntu-dev-env_1.0.tar.gz user@remote:/path/

▶ 方式二:上传到镜像仓库

# 登录 Docker Hub
docker login# 标记镜像
docker tag ubuntu18.04-boost1.88-cmake3.27-git:1.0 yourusername/dev-env:1.0# 推送镜像
docker push yourusername/dev-env:1.0

5. 对方如何使用
▶ 从 .tar 文件加载

docker load -i ubuntu-dev-env_1.0.tar

▶ 从仓库拉取

docker pull yourusername/dev-env:1.0

6. 完整流程图示

docker commit
Dockerfile
启动基础容器
安装环境
生成方式
提交为镜像
构建镜像
验证镜像
打包为.tar
共享文件/上传仓库
对方加载使用

7. 注意事项

  1. 空间要求:
    • 基础镜像 (~60MB) + Boost (~1GB) ≈ 最终镜像 1.1GB+

  2. 版本控制:
    • 每次环境变更建议升级标签(如 :1.0:1.1

  3. 安全建议:
    • 删除容器内的临时文件(如 boost_1_88_0.tar.gz

    • 使用 docker scan 检查镜像漏洞


8. 文档更新记录

版本日期修改内容
v1.12024-06-05增加 Dockerfile 生成方法
v1.02024-06-04初始版本

相关文章:

  • 论文阅读笔记——Janus,Janus Pro
  • RabbitMQ 集群与高可用方案设计(一)
  • 嵌入式硬件---施密特触发器单稳态触发器多谐振荡器
  • Redis实战-缓存篇(万字总结)
  • uniapp报错mongo_cell_decision_not_found
  • TCP 和 UDP 的区别
  • Windows逆向工程提升之x86结构化异常SEH处理机制
  • 非接触式互连:当串扰是您的朋友时
  • npm修改镜像的教程,将npm镜像修改为国内地址增加下载速度
  • SpringBoot-11-基于注解和XML方式的SpringBoot应用场景对比
  • Kubernetes(k8s)全面解析:从入门到实践
  • 以前端的角度理解 Kubernetes(K8s)
  • xy坐标上如何判定两个矩形是否重合
  • 什么是ESLint?它有什么作用?
  • 指针、空间地址
  • 当NLP能模仿人类写作:原创性重构而非终结
  • 华为OD机试真题—— 货币单位换算(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 佳源科技退卷IPO:曾于2023年7月过会,原计划募资约9亿元
  • CAPL自动化-诊断Demo工程
  • 达梦数据库-学习-23-获取执行计划的N种方法
  • 网站建设行业努力都看不到效果/怎么注册网站
  • 久久做bilibili官网网站/亚马逊关键词排名提升
  • 淘宝客做网站需要那些条件/深圳网站建设开发公司
  • 网站优化时间/什么是互联网销售
  • 衡水网站推广的网络公司/国际最新新闻热点事件
  • 外贸 需要到国外建网站吗/百度官方电话号码