🧙♂️ 第一章:Dockerfile——魔法模具配方
想象一下:你想批量生产会自己泡奶茶的魔法熊猫!你需要写一份《熊猫制造配方》——这就是Dockerfile!
(敲黑板)Dockerfile其实就是文本格式的制造说明书,告诉Docker如何一步步构建镜像!
📜 第二章:基础咒语(指令详解)
2.1 FROM
– 选择基础模具
就像做奶茶要先有杯子!选择基础镜像:
FROM ubuntu:20.04 # 从Ubuntu模具开始 # 或者更轻量的: FROM alpine:latest # alpine模具(超小!)
2.2 RUN
– 施展魔法咒语
在模具里执行命令:
dockerfile
RUN apt update && apt install -y python3 # Ubuntu系
RUN apk add --no-cache python3 # Alpine系
2.3 COPY
– 注入魔法材料
把本地文件复制到镜像里:
dockerfile
COPY 魔法咒语.txt /app/咒语.txt # 复制文件
COPY 魔法书/ /app/魔法书/ # 复制整个文件夹
2.4 WORKDIR
– 设定魔法阵位置
设置工作目录(相当于cd):
dockerfile
WORKDIR /app # 进入/app目录
2.5 CMD
– 设定启动咒语
容器启动时自动执行的命令:
dockerfile
CMD ["python3", "app.py"] # 启动Python应用
🐼 实战一:Go语言魔法熊猫(静态编译)
我们要制作一个会输出”熊猫奶茶真好喝!”的Go程序!
1. 先写Go程序(panda.go):
package main import "fmt" func main() { fmt.Println("🐼熊猫奶茶真好喝!请用魔法币支付!") }
2. 再写魔法配方(Dockerfile):
dockerfile
# 使用Go语言基础模具 将golang:1.19-alpine作为建造师
FROM golang:1.19-alpine AS builder
# 设置工作目录
WORKDIR /app
# 复制Go程序到模具里
COPY panda.go .
# 编译Go程序(-ldflags去掉调试信息让程序更小)
RUN go build -ldflags="-s -w" -o 魔法熊猫 panda.go
# 使用超轻量运行时模具
FROM alpine:latest AS 营业员
# 复制编译好的程序
COPY --from=builder /app/魔法熊猫 .
# 设置启动咒语!
CMD ["./魔法熊猫"]
注:
RUN go build -ldflags="-s -w" -o 魔法熊猫 panda.go
简单说:这就是你编译后程序的名字!就像给你的魔法生物起名字一样!
源代码 (panda.go)
│
↓ (go build 编译魔法)
可执行文件 (魔法熊猫) ← 你起的名字!
│
↓ (运行)
🐼"熊猫奶茶真好喝!"
3. 构建并运行!
bash
docker build -t 熊猫奶茶店 .
# 构建镜像
docker run 熊猫奶茶店
# 运行!看到熊猫打招呼啦!
(神秘兮兮)这里用了多阶段构建魔法!第一阶段编译,第二阶段只放编译好的程序,这样镜像特别小!就像在工厂造好奶茶,只带奶茶杯出门,不用带整个工厂!
魔法熊猫
是程序,熊猫奶茶店
是环境!
Docker的魔法就在于:把程序和环境一起打包!这样无论到哪里都能运行
所以记住:先制造员工(编译程序),再装修店铺(构建镜像),这样你就有了一家可以随处开业的魔法奶茶店!✨
🌐 实战二:Node.js魔法网页(动态应用)
现在来做个更酷的——会变色的魔法网页!
1. 创建Node.js应用(app.js):
const http = require('http'); const colors = ['红色', '蓝色', '绿色', '彩虹色']; const server = http.createServer((req, res) => { const randomColor = colors[Math.floor(Math.random() * colors.length)]; res.end(`你的魔法袍变成了${randomColor}!✨`); }); server.listen(3000, () => console.log('魔法变色服务器启动啦!'));
2. 创建package.json:
{ "name": "魔法变色袍", "version": "1.0.0", "main": "app.js" }
3. 编写Dockerfile:
dockerfile
# 使用Node.js基础模具
FROM node:18-alpine AS 魔法裁缝
# 设置工作目录
WORKDIR /app
# 先复制package.json(这样依赖变更时才需要重新安装)
COPY package.json .
# 安装依赖(用npm ci比npm install更快更稳定)
RUN npm ci --only=production
# 复制所有源代码
COPY . .
# 暴露魔法端口(让外界可以访问)
EXPOSE 3000
# 设置启动咒语
CMD ["node", "app.js"]
4. 构建和运行!
bash
docker build -t 魔法变色袍 .
# 构建
docker run -p 3000:3000 魔法变色袍
# 运行并映射端口
现在打开浏览器访问 http://localhost:3000 ,每次刷新页面都会随机变色!是不是很魔法!🎨
💡 魔法小贴士
-
.dockerignore
文件:像.gitignore一样,告诉Docker哪些文件不要打包进模具 -
镜像层优化:把变化少的指令放前面,变化多的放后面,可以更好地利用缓存!
-
多阶段构建:编译环境和运行环境分开,让最终镜像非常小巧!
🎯 终极挑战:制作你的专属魔法!
试着制作一个能告诉你今天幸运颜色的魔法镜像!可以用Python写:
import random colors = ['红色', '蓝色', '绿色', '金色', '彩虹色'] print(f"今天的幸运色是:{random.choice(colors)}!")
写出对应的Dockerfile,构建并运行它!
(魔法帽喷出彩带)🎊恭喜你!现在你已经是容器魔法师了!下次我们来学如何用docker-compose编排整个魔法军团!
记住:好的Dockerfile就像好的魔法配方,要简洁、高效、可复用! 去创造你的魔法世界吧!✨