Docker镜像制作定制应用打包:从零开始

为什么需要自己制作Docker镜像

很多朋友在部署服务时直接拉取官方镜像,但遇到需要定制应用打包的场景(比如把自己写的小程序、特定配置文件加进镜像),就得亲手制作镜像了。
本文将带你从零开始,用最直接的步骤完成 Docker镜像制作定制应用打包,让你以后部署任何应用都能随心所欲。

前置准备:装好Docker并确认版本

先确保你的Linux服务器(本文以CentOS 7/Ubuntu 20.04为例)安装了Docker。
没装的话执行:

# CentOS
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

# Ubuntu
sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker

检查版本:docker --version,输出类似 Docker version 24.0.7 就可以了。
还要确认当前用户能执行docker命令(不加sudo),可以把用户加入docker组:sudo usermod -aG docker $USER,然后重新登录。

编写Dockerfile:定制应用的核心文件

在服务器上新建一个文件夹,作为打包工作目录。
比如我们要打包一个Python写的简单Web应用(Flask),文件结构如下:

myapp/
├── app.py          # 你的应用代码
├── requirements.txt # 依赖列表
└── Dockerfile      # 镜像定制说明书

Dockerfile 示例(一行一行解释):

# 使用官方Python3.9镜像作为基础
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录所有文件到容器内/app
COPY . /app

# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt

# 暴露端口(假设应用跑在5000端口)
EXPOSE 5000

# 容器启动时运行的命令
CMD ["python", "app.py"]
小提示:COPY . /app 会复制整个目录,如果只想复制必要文件,可以写具体文件名。--no-cache-dir 可以减少镜像体积。

执行打包:构建镜像并验证

myapp 目录下执行构建命令(注意最后的点):

docker build -t my-flask-app:v1 .
  • -t 指定镜像名称和标签,名称最好用小写字母;
  • 末尾的 . 代表Dockerfile所在的当前目录。

构建过程会逐条执行Dockerfile指令,看到 Successfully builtSuccessfully tagged 就表示镜像制作成功了。

查看生成的镜像:

docker images

你应该能看到 my-flask-app 镜像,大小为几百MB(基础镜像已经占了一部分)。

避坑指南:镜像制作中常见的报错

报错1:COPY failed: file not found
因为你漏了文件或者Dockerfile中的路径写错了。确保 COPY . /app 中的 . 对应的是你终端所在的目录,且目录里确实有 app.pyrequirements.txt

报错2:pip install 失败
如果是在公司内网,可能需要换国内源。在Dockerfile中修改 RUN 指令:

RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r requirements.txt

报错3:docker build 执行很慢
请检查是否每次构建都重新下载依赖。可以把依赖复制步骤放到代码复制之前,利用Docker缓存机制:

COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app/

这样只要 requirements.txt 没变,pip步骤就会使用缓存,大大加快构建速度。

效果验证:运行并测试定制镜像

用刚打好的镜像启动一个容器:

docker run -d -p 5000:5000 --name myapp-test my-flask-app:v1
  • -d 后台运行;
  • -p 5000:5000 将宿主机的5000端口映射到容器内的5000端口。

检查容器运行状态:docker ps,如果看到 myapp-test 状态为 Up,说明启动正常。
然后访问 http://服务器IP:5000 看看应用是否返回正确页面。

你还可以进入容器内确认文件:

docker exec -it myapp-test /bin/bash
ls /app

所有文件都复制过来了,依赖也安装完毕。
至此,你已经完成了 Docker镜像制作定制应用打包 的全部流程。
以后需要修改应用代码,只需更新源码后重新构建一次镜像,就能得到最新版本。

如果你在制作镜像时遇到其他问题,建议优先检查Dockerfile中的路径和命令,或者把构建日志贴到网上搜索,通常几分钟就能找到答案。

分享到:
上一篇
云原生Docker Compose实战用法
下一篇
Docker私有仓库搭建内网加速
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意