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 编译
- 创建构建目录并进入:
mkdir build
cd build
- 生成 Makefile:
cmake ..
- 编译:
cmake --build .
- 运行:
./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!
💡 注意事项:
-
如果项目有多文件或第三方依赖,可在
CMakeLists.txt和 Dockerfile 中适当调整。 -
可以通过多阶段构建优化镜像大小,将编译阶段和运行阶段分开:
- 编译阶段用
ubuntu或debian带编译工具。 - 运行阶段只用
scratch或ubuntu:22.04仅复制可执行文件。
- 编译阶段用

浙公网安备 33010602011771号