Docker镜像制作自定义:手把手教你自定义Docker镜像

前置准备


在开始Docker镜像制作自定义之前,你的电脑上需要安装好Docker。



  • 安装Docker:根据操作系统去Docker官网下载并安装。Windows/Mac建议安装Docker Desktop,Linux用包管理器安装(如sudo apt install docker.io)。

  • 基础概念:Docker镜像是一个轻量级、可执行的软件包,包含了运行应用所需的所有内容(代码、运行环境、库、配置文件等)。Dockerfile是描述如何构建镜像的文本文件。

  • 准备一个简单项目:本文以Node.js写一个简单HTTP服务器为例。你也可以用自己的Python/Java/静态网页项目。


在终端执行以下命令创建一个项目目录并进入:


  mkdir my-node-app && cd my-node-app

分步操作


步骤1:编写应用代码


my-node-app 目录下创建 app.js


const http = require('http');
const server = http.createServer((req, res) => {
res.end('Hello from Docker!');
});
server.listen(3000, () => console.log('Server running on port 3000'));

步骤2:编写Dockerfile


创建名为 Dockerfile 的文件(注意没有扩展名),内容如下:


# 使用官方Node.js 18镜像作为基础镜像
FROM node:18-alpine

设置工作目录

WORKDIR /app

复制当前目录下所有文件到容器工作目录

COPY . .

暴露应用端口

EXPOSE 3000

启动命令

CMD ["node", "app.js"]


说明FROM 指定基础镜像,WORKDIR 切换目录,COPY 复制文件,EXPOSE 声明端口,CMD 定义容器启动时运行的命令。

步骤3:构建镜像


my-node-app 目录下执行构建命令:


docker build -t my-node-app:v1 .


  • -t my-node-app:v1 给镜像指定名称和标签

  • . 表示Dockerfile所在目录(当前目录)


构建完成后,运行 docker images 可以看到自定义镜像已经列出。


步骤4:运行容器


docker run -d -p 4000:3000 --name my-node-container my-node-app:v1


  • -d 后台运行

  • -p 4000:3000 把宿主机的4000端口映射到容器的3000端口

  • --name 指定容器名称


步骤5:验证访问


打开浏览器,访问 http://localhost:4000,如果看到“Hello from Docker!

”,说明自定义镜像制作成功。


避坑指南



  • Dockerfile指令顺序:经常变化的文件(如代码)放在后面,利用Docker缓存提高构建速度。建议先复制package.json再执行npm install,最后复制代码。

  • 端口冲突:如果宿主机4000端口已被占用,换个端口映射。

  • 权限问题:Linux下非root用户运行docker需要加sudo或把用户加入docker组。

  • 镜像尺寸过大:建议使用Alpine版本的基础镜像(如node:18-alpine),大幅减小体积。

  • 本地文件未更新:如果改代码后容器未反映,需要重新构建镜像再运行(docker build + docker run)。


高频问题解答


Q1:怎么把自定义镜像推送到Docker Hub?

先注册Docker Hub账号,在终端 docker login 登录,然后给镜像打标签:docker tag my-node-app:v1 你的用户名/my-node-app:v1,最后执行 docker push 你的用户名/my-node-app:v1


Q2:构建时遇到“COPY failed: file not found”怎么办?

确认Dockerfile和要复制的文件在同一个目录(或子目录),并且路径写对。使用COPY . .会复制当前构建上下文所有文件。


Q3:如何减小镜像体积?



  • 选择更小的基础镜像(如alpine

  • 合并RUN指令,清理缓存(如npm cache clean --force

  • 使用多阶段构建


Q4:能不能在Dockerfile中使用环境变量?

可以,使用ENV指令定义,如ENV NODE_ENV=production,在代码中通过process.env.NODE_ENV读取。


效果验证



  1. 运行 docker images 确认镜像存在。

  2. 运行 docker ps 确认容器正常运行。

  3. 使用 curl http://localhost:4000 或浏览器访问,返回自定义内容即成功。

  4. 若要停止并删除容器:docker stop my-node-container && docker rm my-node-container


如果你正在处理Docker镜像制作自定义,建议先按本文步骤完整执行,再根据自己的环境做微调;

遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
Linux进程管理ps top:Linux 进程管理入门:p
下一篇
零基础也能懂的服务器数据备份策略配置实战
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意