零基础利用deepseek学习Makefile和Docker

第一部分:Makefile - 你的自动化任务指挥官 🚗

  1. 是什么?

想象一下你要组装一辆乐高汽车:
• 你需要按步骤:先拼底盘 → 装轮子 → 安座椅 → 盖车顶 → 装车窗 → 最后贴上贴纸。

• 如果有人帮你把所有步骤写在清单上,每次想拼车时,喊一声"make 汽车",机器人就自动按步骤完成拼装,多省事!

Makefile 就是这个自动化清单!
• 它是一个纯文本文件(没有后缀名或叫Makefile)。

• 里面写满了任务指令(比如编译代码、运行测试、复制文件)。

• 你只需要在命令行输入 make 任务名,它会自动执行该任务及所有依赖任务!

  1. 核心概念(一看就懂)

• 目标 (Target): 你想执行的任务名称(比如 拼装汽车)。

• 依赖项 (Dependencies): 执行此任务前需要先完成哪些其他任务(比如 拼装底盘 和 安装轮子 是 拼装汽车 的依赖)。

• 命令 (Commands): 实现任务的具体操作指令(比如 组装底盘 任务下写着 “用A01乐高块4个拼成底板”)。命令前必须用 Tab 键缩进!

  1. 实战 - 一个最简单的 Makefile 示例

假设你有两个文件:main.c(源代码)和 program(编译后的程序)。

创建一个文件 Makefile (没有后缀名),内容如下:

最终目标:构建程序

build: program

如何构建 program:它依赖 main.c

program: main.c
gcc main.c -o program # 命令:用 gcc 编译 main.c,输出叫 program
@echo “🚀 编译成功!” # 命令:打印提示信息 (@ 表示安静执行)

任务:运行程序

run: program
./program # 运行刚编译的程序

任务:清理垃圾(删除编译后的文件)

clean:
rm -f program # 强制删除 program 文件
@echo “🧹 清理完毕!”

  1. 怎么用?(在命令行操作)

在包含 Makefile 的目录打开终端:
• 编译程序 ➡️ 输入 make build

◦   它会自动找 build 目标 → 发现依赖 program → 再找 program 目标 → 执行 gcc main.c -o program 命令编译。

◦   你只需一条命令!

• 运行程序 ➡️ 输入 make run

◦   它检查 run 依赖 program → 如果 program 已存在,直接运行;如果不存在,会先编译再运行。

• 清理文件 ➡️ 输入 make clean

◦   删除 program 文件,不留下垃圾。

• 终极偷懒 ➡️ 只输入 make

◦   默认会执行文件里第一个目标(这里是 build)。
  1. 为什么用?

• 自动化一切重复操作:编译、测试、打包、部署等。

• 记住复杂流程:即使几个月后回来,一句 make 就能重建项目。

• 节省时间:不用再敲繁琐命令。

💡 一句话总结:Makefile 是批处理脚本的超强升级版,用“任务依赖链”自动化你的工作流程。

第二部分:Docker - 你的软件集装箱 🚢

  1. 是什么?

想象你要送宠物狗去旅行:
• 普通方式:空运送狗 -> 可能水土不服,缺粮、缺玩具、甚至被隔壁仓位的猫吓到。

• 集装箱方式:把狗屋、食物、水盆、玩具、空调都打包进一个标准集装箱 -> 运到目的地后,拆箱即用,环境完全一致!

Docker 就是把软件及其运行环境打包的集装箱系统!
• 镜像 (Image):打包好的“集装箱模板”(包含操作系统+软件+配置),比如 Ubuntu+Python3.9+你的代码。

• 容器 (Container):运行中的“集装箱实例”(基于镜像启动的实际运行环境)。

  1. 核心概念(简单类比)

概念 真实世界比喻 Docker 世界

镜像 (Image) 乐高汽车组装说明书+所有积木块 打包好的软件模板(不可修改)

容器 (Container) 根据说明书拼好的一辆乐高汽车 正在运行的软件实例(可启动/停止)

Dockerfile 组装说明书(文本步骤) 定义如何构建镜像的脚本文件

Registry 乐高商店(存积木块) Docker Hub(存放官方/自定义镜像)

  1. 实战 - 如何用 Docker 运行一个程序?

假设你想在 Ubuntu 系统中运行一个 Python 程序,但你用的是 Windows/Mac。不用装虚拟机!三步搞定:

  1. 下载镜像(去商店买乐高)
    docker pull python:3.9 # 下载官方Python3.9镜像(包含Ubuntu+Python)

  2. 启动容器(拼装乐高汽车)
    docker run -it --name my-python-app python:3.9 bash

    解释:

    -it: 交互式运行(像进入容器内部)

    –name: 容器名字叫 my-python-app

    python:3.9: 用这个镜像启动

    bash: 启动后运行bash命令(进入容器终端)

    现在你已经进入容器内部的 Ubuntu 终端了!😮
    输入 python --version 会显示 Python 3.9.x

  3. 在容器里运行你的代码
    如果你本地有个 app.py,可以复制到容器里运行:

    在宿主机器(非容器)执行:

    docker cp ./app.py my-python-app:/app/

    回到容器内部终端执行:

    cd /app
    python app.py

  4. 高级玩法:自己打包镜像(写 Dockerfile)

创建一个 Dockerfile 文件(无后缀):

基础镜像(乐高底板)

FROM python:3.9-slim

工作目录(容器里的路径)

WORKDIR /app

复制本地文件到镜像(把积木放进盒子)

COPY . .

安装依赖(安装额外零件)

RUN pip install -r requirements.txt

设置启动命令(怎么玩这辆乐高车)

CMD [“python”, “app.py”]

构建自己的镜像 🛠️
docker build -t my-python-app . # -t 是给镜像取名, . 表示当前目录

运行你的镜像 🚀
docker run --name my-app-instance my-python-app

它会自动执行 CMD 命令:python app.py

  1. 为什么用 Docker?

• 一致的环境:开发、测试、生产环境100%一致,告别“在我电脑好好的”问题。

• 秒级启停:启动容器比虚拟机快10倍(资源占用极低)。

• 轻松移植:镜像复制到任何支持Docker的机器都能运行。

• 隔离安全:每个容器像独立房间,互不干扰。

🌟 一句话总结:Docker 是“一次打包,到处运行”的现代软件交付方式,解决环境依赖噩梦。

总结:Makefile vs Docker 怎么选?

场景 工具选择 原因

自动化项目编译/测试/部署流程 ✅ Makefile 任务驱动,适合管理本地开发流程

解决环境依赖问题 ✅ Docker 打包整个运行环境,跨平台无痛运行

复杂CI/CD流水线 ✅✅ 两者结合! Makefile调本地任务,Docker提供统一运行时环境

💡 新手建议:

  1. 从 Makefile 开始自动化你的重复命令行操作(哪怕是简单的复制文件)。

  2. 当遇到“这软件在我机器装不上”时,试试用 Docker 下载官方镜像直接运行!

  3. 终极利器: 用 Makefile 封装 docker 命令!比如:
    run:
    docker run -p 8080:80 my-app

    build:
    docker build -t my-app .

    然后只需 make build 和 make run 就够了!

现在就去试试吧!这两个工具会成为你开发路上的超级帮手 🛠️✨

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值