第2课 Dockerfile 镜像的制作

第2课 Dockerfile 镜像的制作

🧙♂️ 第一章:Dockerfile——魔法模具配方

想象一下:你想批量生产会自己泡奶茶的魔法熊猫!你需要写一份《熊猫制造配方》——这就是Dockerfile!

(敲黑板)Dockerfile其实就是文本格式的制造说明书,告诉Docker如何一步步构建镜像!


📜 第二章:基础咒语(指令详解)

2.1 FROM – 选择基础模具

就像做奶茶要先有杯子!选择基础镜像:

dockerfile
 
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):

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):

javascript
 
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:

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 ,每次刷新页面都会随机变色!是不是很魔法!🎨


💡 魔法小贴士

  1. .dockerignore文件:像.gitignore一样,告诉Docker哪些文件不要打包进模具

  2. 镜像层优化:把变化少的指令放前面,变化多的放后面,可以更好地利用缓存!

  3. 多阶段构建:编译环境和运行环境分开,让最终镜像非常小巧!


🎯 终极挑战:制作你的专属魔法!

试着制作一个能告诉你今天幸运颜色的魔法镜像!可以用Python写:

python
 
import random
colors = ['红色', '蓝色', '绿色', '金色', '彩虹色']
print(f"今天的幸运色是:{random.choice(colors)}!")

写出对应的Dockerfile,构建并运行它!

(魔法帽喷出彩带)🎊恭喜你!现在你已经是容器魔法师了!下次我们来学如何用docker-compose编排整个魔法军团!

记住:好的Dockerfile就像好的魔法配方,要简洁、高效、可复用! 去创造你的魔法世界吧!✨

给TA打赏
共{{data.count}}人
人已打赏
Docker

第1课 Docker的原理一针见血和Ubuntu下的安装Docker

2025-8-24 13:43:20

Docker

第3课 如何用docker-compose编排Docker整个魔法军团

2025-8-24 19:16:11

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索