现在的docker使用因为高效方便,基本已经普遍通用,为了帮助一些小白更好上手掌握制作镜像,作者写了这篇文章,以期能够更好的帮助你快捷使用docker
文章目录
- docker的简介
- 镜像制作的两种方式
- [方式一:使用 docker commit(从运行中的容器创建镜像)](#方式一:使用 docker commit(从运行中的容器创建镜像))
-
- [步骤 1:拉取基础镜像并启动容器](#步骤 1:拉取基础镜像并启动容器)
- [步骤 2:在容器内做修改(比如安装软件)](#步骤 2:在容器内做修改(比如安装软件))
- 步骤3:在主机上封装整个容器为新镜像
- [步骤 4:验证新镜像](#步骤 4:验证新镜像)
- [方式二:使用 Dockerfile(推荐方式强烈安利!!!)](#方式二:使用 Dockerfile(推荐方式强烈安利!!!))
-
- 步骤1:下载需要的各种依赖
- 步骤2:跑起你需要跑的
- 步骤3:写填写Dockerfile
- 步骤4:构建镜像
- [步骤 5:运行镜像](#步骤 5:运行镜像)
- [步骤 6:内卷!!!](#步骤 6:内卷!!!)
- 总结
docker的简介
Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖(如代码、运行时、系统工具、库、配置文件等)打包到一个轻量级、可移植的容器中,并在任何支持 Docker 的环境中一致地运行。
📌 核心思想:"一次构建,到处运行"(Build Once, Run Anywhere)
虚拟机(VM)vs 容器
| 特性 | 容器 | 虚拟机 |
|---|---|---|
| 隔离级别 | 进程级隔离 | 硬件级隔离(Hypervisor) |
| 启动速度 | 毫秒级(快) | 秒级~分钟级(慢) |
| 资源占用 | 低(共享宿主机内核) | 高(每个 VM 有完整 OS) |
| 镜像大小 | 几十 MB ~ 几百 MB | 几 GB 起 |
| 可移植性 | 极高 | 较低 |
| 典型代表 | Docker, containerd | VMware, VirtualBox, Hyper-V |
✅ 简单说:容器 = 轻量级、秒启、高效的应用沙箱
镜像制作的两种方式
1.使用 docker commit 命令基于容器创建镜像(适合快速测试,不推荐用于生产)
2.使用 Dockerfile 编写构建指令,通过 docker build 创建镜像(推荐方式,可复用、可版本控制)
方式一:使用 docker commit(从运行中的容器创建镜像)
⚠️ 注意:这种方式适合临时调试,但不符合"基础设施即代码"原则,不建议用于正式项目。说粗俗点就是救救火可以,但是正规开发不建议,而且有诸多限制且听我细细分解。
步骤 1:拉取基础镜像并启动容器
拉取一个 Ubuntu 镜像
bash
docker pull ubuntu:22.04
这里拉的是基础镜像,就是一个能跑ubuntu的极简环境,也是因为极简环境所以有些驱动没有跑一些复杂的软件可能会出现驱动丢失等错误。
启动一个交互式容器(-it 表示交互终端)
bash
docker run -it --name my_container ubuntu:22.04 /bin/bash
目的:配置模型运行环境
步骤 2:在容器内做修改(比如安装软件)
在容器内安装模型运行所需各种库
我拿nginx举例
更新包列表
bash
apt update
安装 nginx(举例)
bash
apt install -y nginx
验证是否安装成功
bash
nginx -v
如果是模型等原理是相同的,但是你需要做的是下载各种依赖库,然后通过docker cp的指令把需要的模型复制过去。然后使用指令让模型跑起来,并能看到自己想要的结果即可。
步骤3:在主机上封装整个容器为新镜像
退出容器,退出容器指令exit
查看已停止的容器
bash
docker ps -a
将容器提交为新镜像
bash
docker commit my_container my_nginx_image:v1
my_container是容器名 my_nginx_image:v1是镜像名加版本号。
步骤 4:验证新镜像
以nginx的镜像举例
查看本地镜像
bash
docker images
启动新镜像测试
bash
docker run -it my_nginx_image:v1 /bin/bash
进入后可执行 nginx -v 验证是否保留了安装
如果是模型或其他
bash
docker run -it --rm my_nginx_image:v1 /bin/bash
可以是这个指令用完就停止容器
从上面可见这种方式无法追溯变更过程,也不便于团队协作。
方式二:使用 Dockerfile(推荐方式强烈安利!!!)
你选取一台与上线环境架构相同的线下机子,最好还能通网(方便下载各种需要的环境)
步骤1:下载需要的各种依赖
如果是通网的,直接用包管理器下就好了,apt install或yum install有啥用啥,能下好就好,自己大多数情况下不用改全局了,都帮你自动配置
步骤2:跑起你需要跑的
确保该环境下你的东西能跑起来,拿我用包管理器下载的nginx举例就是
bash
nginx start
只要能跑起来并能查到他的线程,你就事半功倍了。
步骤3:写填写Dockerfile
创建个文件夹在文件夹下
bash
nano Dockerfile
以包管理器的nginx举例,它的Dockerfile如下
bash
# 使用官方 Ubuntu 22.04 作为基础镜像
FROM ubuntu:22.04
# 设置环境变量,避免 apt 弹出交互提示
ENV DEBIAN_FRONTEND=noninteractive
# 更新系统并安装 nginx
RUN apt update && \
apt install -y nginx && \
rm -rf /var/lib/apt/lists/*
# 暴露 80 端口(文档说明用途,实际运行需配合 -p)
EXPOSE 80
# 启动 nginx(前台运行,否则容器会退出)
CMD ["nginx", "-g", "daemon off;"]
步骤4:构建镜像
在 Dockerfile 所在目录执行:
bash
docker build -t my_nginx_image_from_dockerfile:v1 .
该指定为打包镜像my_nginx_image_from_dockerfile:v1这个为镜像名称加版本号。注意后面还有一点哦别漏下,
-t:指定镜像名和标签
.:表示当前目录为构建上下文(context)
步骤 5:运行镜像
以nginx举例哦
bash
# 后台运行,并映射 8080 主机端口到容器 80 端口
docker run -d -p 8080:80 --name my_web my_nginx_image_from_dockerfile:v1
然后在宿主机浏览器访问:http://localhost:8080,应该能看到 Welcome to nginx! 页面。
到此dockerfile优势一目了然,可版本控制、可重复构建、清晰透明、适合 CI/CD。
步骤 6:内卷!!!
优化 Dockerfile(多阶段构建、减小体积等)
使用 .dockerignore 忽略无关文件
合并 RUN 命令减少层数
使用更小的基础镜像(如 alpine)
多阶段构建(适用于编译型语言如 Go、Java)
作者懒得码字了,有兴趣留言,作者看到了就继续写了。
总结
最后希望能帮助到你,不喜勿喷,欢迎交流指正!
