6.1 构建镜像原则

任务一:对比不同父镜像
同样安装Go语言环境,选择不同的基础镜像:
- Ubuntu基础镜像 → 最终镜像 600MB+
- Alpine基础镜像 → 最终镜像 300MB+
差距2倍多!这意味着什么?
- ⏱️ 传输时间减半
- 💾 存储成本减半
- 🚀 容器启动更快
让我们动手验证这个差异。
在这个任务中,我们将创建两个基于不同父镜像(Ubuntu和Alpine)的Dockerfile,以比较它们在镜像大小上的差异。
1、创建目录
mkdir /root/compare
cd /root/compare
2、创建两个 Dockerfile 文件
touch Dockerfile-1 Dockerfile-2
3、编辑Dockerfile文件内容
Dockerfile-1 文件内容(基于Ubuntu):

Dockerfile-2 文件内容(基于Alpine):

4、构建两个镜像
使用 Dockerfile-1 构建 golang:ubuntu 镜像:

使用 Dockerfile-2 构建 golang:alpine 镜像:

-t:指定构建的镜像名称和标签,格式为name:tag-f:指定使用的Dockerfile文件路径,当Dockerfile不是默认文件名或不在当前目录时使用.:构建上下文路径,Docker会将这个路径下的所有文件发送给Docker守护进程
5、对比镜像大小
docker images golang

任务二:对比镜像层数
在这个任务中,我们将创建两个 Dockerfile 来对比镜像层数对最终镜像大小的影响。
1、在 /root/compare 中创建文件 Dockerfile-3 和 Dockerfile-4,内容如下:
Dockerfile-3(多层构建):

Dockerfile-4(减少层数):

2、构建两个镜像,名称分别为 l3 和 l4
构建l3镜像:

构建l4镜像:

3、对比两个镜像的层数
docker history 命令可以查看镜像的层数:

任务三:基于 VNC 的 Firefox 镜像(删除)
在这个任务中,我们将创建一个包含Firefox浏览器和VNC服务器的Docker镜像,让用户可以通过网页远程访问容器中运行的Firefox。
1、创建目录
mkdir /root/firefox-vnc
cd /root/firefox-vnc
2、创建 Dockerfile 文件
vim Dockerfile

为什么在一条 RUN 指令中执行两次 apt-get,而不是拆成两条 RUN 指令?
答:这是为了减少镜像层数。每一个RUN指令都会创建一个新的镜像层,而通过&&连接多个命令,可以在一个层中完成多个操作,从而减小最终镜像的大小。另外,将apt-get update和apt-get install放在同一个RUN命令中可以确保使用的是最新的软件包列表。
3、构建镜像
docker build -t firefox-vnc .
4、查看镜像列表

5、启动容器
docker run --rm -p 8080:8080 --name ff-vnc firefox-vnc
--rm:容器停止运行后自动删除容器,避免占用磁盘空间-p 8080:8080:将容器内部的8080端口映射到主机的8080端口,使外部能够访问容器内的VNC服务--name ff-vnc:给容器指定一个易记的名称firefox-vnc:使用的镜像名称
6、打开浏览器,输入 ip:8080/vnc.html





