Docker打包CMake项目镜像操作步骤

步骤 1:创建项目目录结构

HelloWorldProject/
├── CMakeLists.txt
├── Dockerfile
└── HelloWorld.cpp

步骤 2:编写 HelloWorld.cpp

HelloWorld.cpp 中写:

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

步骤 3:编写 CMakeLists.txt

在项目根目录下创建 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(HelloWorld)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 添加可执行文件
add_executable(helloworld HelloWorld.cpp)

步骤 4:在本地测试 CMake 编译

  1. 创建构建目录并进入:
mkdir build
cd build
  1. 生成 Makefile:
cmake ..
  1. 编译:
cmake --build .
  1. 运行:
./helloworld

你应该看到输出:

Hello, World!

步骤 5:编写 Dockerfile

在项目根目录下创建 Dockerfile

# ===== 编译阶段 =====
FROM ubuntu:22.04 AS builder

# 安装构建工具
RUN apt-get update && \
    apt-get install -y build-essential cmake && \
    rm -rf /var/lib/apt/lists/*

# 设置工作目录
WORKDIR /app

# 复制项目文件
COPY . .

# 创建构建目录并编译
RUN mkdir build && cd build && cmake .. && cmake --build .

# ===== 运行阶段 =====
FROM ubuntu:22.04

# 设置工作目录
WORKDIR /app

# 仅从 builder 阶段复制可执行文件
COPY --from=builder /app/build/helloworld .

# 设置容器启动命令
CMD ["./helloworld"]


步骤 6:构建 Docker 镜像

在项目根目录下执行:

docker build -t helloworld:x86_64 .

这里 helloworld 是镜像名称,x86_64是镜像Tag。

导出单个镜像包

docker save -o helloworld_x86_64.tar helloworld:x86_64

步骤 7:运行 Docker 容器

加载导出的镜像:

docker load -i helloworld_x86_64.tar
docker run --rm helloworld

输出应该是:

Hello, World!

💡 注意事项:

  1. 如果项目有多文件或第三方依赖,可在 CMakeLists.txt 和 Dockerfile 中适当调整。

  2. 可以通过多阶段构建优化镜像大小,将编译阶段和运行阶段分开:

    • 编译阶段用 ubuntudebian 带编译工具。
    • 运行阶段只用 scratchubuntu:22.04 仅复制可执行文件。
posted @ 2025-09-25 14:25  江海余生  阅读(37)  评论(0)    收藏  举报