🔨 构建镜像与常用命令
首先,核心的构建命令如下。请确保在终端中切换到 Dockerfile 所在的目录(通常是项目根目录)再执行:
docker build --progress=plain -t presenton:latest -f Dockerfile .
下面的表格详细解释了命令中各个参数的含义,以及一些其他常用的构建选项:
| 命令/选项 | 说明 | 示例 |
|---|---|---|
**docker build** | 用于根据 Dockerfile 构建镜像的核心命令。 | - |
**-t presenton:latest** | 为构建成功的镜像命名和打标签。-t是 --tag的缩写。 | -t my-app:v1 |
**-f Dockerfile** | 指定要使用的 Dockerfile 路径。如果文件名就是 Dockerfile且在当前路径,可省略。 | -f ./deploy/Dockerfile.backend |
. | 构建上下文路径。Docker 引擎会将此路径下的文件打包,在 Dockerfile 中如 COPY等指令才能访问这些文件。非常重要,不要遗漏。 | 通常为当前目录 . |
**--no-cache** | 构建时不使用缓存,确保获取最新的依赖(如从 npm registry 拉取最新包)。 | docker build --no-cache -t ... |
**--build-arg** | 传递构建参数给 Dockerfile 中的 ARG指令。 | --build-arg INSTALL_OLLAMA=true |
🔍 检查镜像是否构建成功
构建完成后,可以通过以下几步来验证镜像的状态和内容。
-
确认镜像存在
使用
docker images命令列出本地镜像,检查presenton:latest是否在列表中。docker images presenton:latest -
检查镜像构建历史
使用
docker history命令可以查看镜像的构建层,这有助于确认构建步骤是否符合预期。docker history presenton:latest -
检查镜像元数据
使用
docker inspect命令可以获取镜像的详细配置信息,包括环境变量、暴露的端口、启动命令等。这是一个非常强大的诊断工具。docker inspect presenton:latest
🧪 验证镜像是否可以正常运行
确认镜像存在后,最关键的一步是运行它,看看服务是否正常启动。
-
运行容器进行测试
下面的命令会启动一个容器,并将容器的 80 端口映射到宿主机的 8080 端口,方便您通过浏览器访问
http://localhost:8080来测试 Next.js 和 FastAPI 服务。docker run -d -p 8080:80 --name presenton-test presenton:latest-
•
-d: 后台运行容器。 -
•
-p 8080:80: 端口映射(宿主机端口:容器端口)。 -
•
--name presenton-test: 为容器起个名字。
-
-
查看容器日志
服务启动后,立即查看其日志,可以快速判断是否报错。
docker logs presenton-test -
进入容器内部检查(可选)
如果日志不清晰,可以进入容器内部,像在普通 Linux 系统里一样检查文件、进程和环境变量。
docker exec -it presenton-test /bin/bash # 进入后,可以检查文件是否复制到位,例如: ls -l /app/servers/nextjs/.next-build/standalone ls -l /app/servers/fastapi/ ps aux -
停止并清理测试容器
测试完毕后,记得清理资源。
docker stop presenton-test docker rm presenton-test
📦 将镜像打包分发
确认镜像一切正常后,就可以将它打包分发给同事了。
-
将镜像保存为文件
使用
docker save命令将镜像打包成一个单独的.tar文件。这个文件包含了镜像的所有层和元数据。docker save -o presenton-latest.tar presenton:latest -
(强烈推荐)压缩文件
生成的
.tar文件通常比较大,使用gzip压缩可以显著减小文件体积,方便传输。gzip presenton-latest.tar这将会生成一个
presenton-latest.tar.gz文件。 -
同事如何加载镜像
您的同事在收到压缩包后,只需要执行以下两步即可:
-
•
解压(如果压缩了) :
gunzip presenton-latest.tar.gz -
•
加载镜像:
docker load -i presenton-latest.tar加载成功后,他就可以像使用其他镜像一样,通过
docker run命令来启动容器了。
-
💡 实用提醒
-
•
镜像大小:您这个镜像包含了 Node.js、Python、Chromium 等,压缩包体积可能会很大(可能超过 1GB),传输前请有心理准备。
-
•
文档说明:发给同事时,最好附上一个简短的说明,包括镜像名称、版本、以及如何运行(例如必要的端口映射、环境变量等)。
-
•
替代方案:对于团队协作,长期来看,搭建私有的 Docker 镜像仓库(如 Harbor、Nexus)或使用 Docker Hub 的私有仓库是更高效的镜像分发方式。
希望这份详细的指南能帮助您顺利完成镜像的构建、验证和分发!如果您在任何一个步骤遇到问题,可以随时再来问我。