当前位置: 首页 > news >正文

Docker 容器 -- 编写你的第一个 Dockerfile

概述

你已经学会了使用 docker run 来运行别人做好的镜像,比如:

docker run hello-world
docker run nginx

但如果你想把自己的应用打包成镜像,该怎么办?

答案就是:写一个 Dockerfile

什么是 Dockerfile?

Dockerfile 是一个文本文件,里面包含了一组指令,告诉 Docker 如何一步步构建一个镜像。

你可以把它理解为:

“制作镜像的步骤说明书”

比如:

  • 基于哪个基础镜像?
  • 要复制哪些文件?
  • 安装什么依赖?
  • 启动时运行什么命令?

准备一个简单的 Python 应用

我们以一个最简单的 Python Web 应用为例。

1. 创建项目目录

mkdir my-flask-app
cd my-flask-app

2. 创建 app.py 文件

# app.py
from flask import Flaskapp = Flask(__name__)@app.route("/")
def hello():return "Hello, Docker! "if __name__ == "__main__":app.run(host="0.0.0.0", port=5000)

3. 创建 requirements.txt

Flask==2.3.3

编写你的第一个 Dockerfile

在项目根目录创建一个名为 Dockerfile 的文件(注意:没有后缀):

touch Dockerfile

打开文件,写入以下内容:

# 1. 指定基础镜像
FROM python:3.9-slim# 2. 设置工作目录
WORKDIR /app# 3. 复制 requirements.txt 并安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt# 4. 复制应用代码
COPY . .# 5. 暴露端口
EXPOSE 5000# 6. 定义启动命令
CMD ["python", "app.py"]

逐行解释 Dockerfile 指令

指令作用
FROM python:3.9-slim使用官方 Python 3.9 镜像作为基础
WORKDIR /app在容器内创建 /app 目录,并设为工作目录
COPY requirements.txt .把本地的 requirements.txt 复制到容器
RUN pip install ...在容器中安装 Python 依赖
COPY . .把当前目录所有文件复制到容器
EXPOSE 5000声明容器运行时监听 5000 端口
CMD ["python", "app.py"]容器启动时运行的命令

COPYRUN 的顺序很重要——先复制 requirements.txt 再安装依赖,可以利用 Docker 的缓存机制,加快后续构建速度。

构建镜像

my-flask-app 目录下运行:

docker build -t my-flask-app:1.0 .
  • docker build:构建镜像
  • -t my-flask-app:1.0:给镜像打标签(名字:版本)
  • .:指定构建上下文为当前目录

构建过程会显示每一步的执行日志,稍等片刻即可完成。

运行容器

镜像构建成功后,运行它:

docker run -d -p 5000:5000 my-flask-app:1.0
  • -d:后台运行
  • -p 5000:5000:把宿主机的 5000 端口映射到容器的 5000 端口

验证结果

打开浏览器,访问:

http://localhost:5000

你应该看到:

Hello, Docker! 

此时,你已经成功用 Dockerfile 构建并运行了自己的第一个应用

常见问题

1. 构建失败

检查:

  • Dockerfile 文件名是否正确(无后缀)
  • app.pyrequirements.txt 是否在同一目录
  • 网络是否正常(pip 安装依赖需要联网)

2. 端口被占用

换一个端口:

docker run -d -p 8080:5000 my-flask-app:1.0

然后访问 http://localhost:8080

3. 如何查看日志?

docker logs <container-id>

最佳实践

  1. 合理分层:把不变的(如依赖)放在前面,利用缓存。
  2. 使用 .dockerignore:像 .gitignore 一样,排除不需要的文件(如 __pycache__)。
  3. 选择合适的基础镜像:优先使用 slimalpine 等轻量镜像。
  4. 避免在容器中存储数据:使用卷(Volume)持久化数据。

总结

通过这个简单例子,你已经掌握了:

  • 什么是 Dockerfile
  • 如何编写基本指令
  • 如何构建和运行自定义镜像

Dockerfile 是自动化交付的第一步,也是 CI/CD 流水线的核心

http://www.dtcms.com/a/461652.html

相关文章:

  • 做的好的网站开发网站空间200m
  • 虚拟机怎么做网站上海做网站天锐
  • 网站优化要怎么做才会做到最佳百度站长统计
  • ALV 单元格控制案例
  • 网站被墙 做301跳转服务器正常网站打不开
  • maven mvn 安装自定义 jar 包
  • Flink 广播状态(Broadcast State)实战从原理到落地
  • 苏州市吴江区住房和城乡建设局网站网站开发的项目开发
  • 基于MBSE的系统设计和流程合规实例
  • 【文件读写】18,21关
  • Turbopack vs Webpack vs Vite:前端构建工具三分天下,谁将胜出?
  • 如何外贸网站推广网站建设与管理试题及答案
  • 广州建网站维护公司wordpress 手机不显示内容
  • 水位流量在线监测装置:精准监测与智能管理的科技基石
  • mac下解压jar包
  • 收费网站怎么制作山东省建设执业资格注册管理中心网站
  • 腾讯云网络vpc之arping返回MAC一样问题
  • 网站建设网页设计案例网站开发的外文文献
  • 西安优化网站推广宁波做网站排名的公司有哪些
  • 库、编译器有一个错误:undefined reference to `stat64@GLIBC_2.33‘
  • npm uninstall 执行的操作、有时不会删除 node_modules 下对应的文件夹
  • Unity网络开发--套接字Socket(2)
  • 大学网站建设技术方案wordpress 评论优化
  • 做网站设计要注意什么问题wordpress 枚举用户
  • 基于单片机的Boost升压斩波电源电路
  • 【Emmy精简系统】清爽加速Windows 11 25H2
  • 洛谷P2071 座位安排
  • 广西代理网站建设公司公司网站建设注意点
  • 设计模式--外观模式:简化复杂系统的统一接口
  • 网站开发需要看哪些书哪个网站可以做一对一老师