docker制作镜像的两种方式保姆级教程

 更新时间:2026年04月30日 08:41:42   作者:呼啦啦呼啦啦啦啦啦啦  
Docker 作为容器化技术的标杆,其镜像管理功能是开发者日常工作的核心环节,无论是构建、拉取还是优化镜像,掌握常用命令都能显著提升效率,这篇文章主要介绍了docker制作镜像的两种方式,需要的朋友可以参考下

现在的docker使用因为高效方便,基本已经普遍通用,为了帮助一些小白更好上手掌握制作镜像,作者写了这篇文章,以期能够更好的帮助你快捷使用docker

docker的简介

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖(如代码、运行时、系统工具、库、配置文件等)打包到一个轻量级、可移植的容器中,并在任何支持 Docker 的环境中一致地运行。

📌 核心思想:“一次构建,到处运行”(Build Once, Run Anywhere)

虚拟机(VM)vs 容器

特性容器虚拟机
隔离级别进程级隔离硬件级隔离(Hypervisor)
启动速度毫秒级(快)秒级~分钟级(慢)
资源占用低(共享宿主机内核)高(每个 VM 有完整 OS)
镜像大小几十 MB ~ 几百 MB几 GB 起
可移植性极高较低
典型代表Docker, containerdVMware, VirtualBox, Hyper-V

✅ 简单说:容器 = 轻量级、秒启、高效的应用沙箱

镜像制作的两种方式

1.使用 docker commit 命令基于容器创建镜像(适合快速测试,不推荐用于生产)
2.使用 Dockerfile 编写构建指令,通过 docker build 创建镜像(推荐方式,可复用、可版本控制)

方式一:使用 docker commit(从运行中的容器创建镜像)

⚠️ 注意:这种方式适合临时调试,但不符合“基础设施即代码”原则,不建议用于正式项目。说粗俗点就是救救火可以,但是正规开发不建议,而且有诸多限制且听我细细分解。

步骤 1:拉取基础镜像并启动容器

拉取一个 Ubuntu 镜像

docker pull ubuntu:22.04

这里拉的是基础镜像,就是一个能跑ubuntu的极简环境,也是因为极简环境所以有些驱动没有跑一些复杂的软件可能会出现驱动丢失等错误。
启动一个交互式容器(-it 表示交互终端)

docker run -it --name my_container ubuntu:22.04 /bin/bash

目的:配置模型运行环境

步骤 2:在容器内做修改(比如安装软件)

在容器内安装模型运行所需各种库

我拿nginx举例

更新包列表

apt update

安装 nginx(举例)

apt install -y nginx

验证是否安装成功

nginx -v

如果是模型等原理是相同的,但是你需要做的是下载各种依赖库,然后通过docker cp的指令把需要的模型复制过去。然后使用指令让模型跑起来,并能看到自己想要的结果即可。

步骤3:在主机上封装整个容器为新镜像

退出容器,退出容器指令exit

查看已停止的容器

docker ps -a

将容器提交为新镜像

docker commit my_container my_nginx_image:v1

my_container是容器名 my_nginx_image:v1是镜像名加版本号。

步骤 4:验证新镜像

以nginx的镜像举例

查看本地镜像

docker images

启动新镜像测试

docker run -it my_nginx_image:v1 /bin/bash

进入后可执行 nginx -v 验证是否保留了安装

如果是模型或其他

docker run -it --rm my_nginx_image:v1 /bin/bash

可以是这个指令用完就停止容器
从上面可见这种方式无法追溯变更过程,也不便于团队协作。

方式二:使用 Dockerfile(推荐方式强烈安利!!!)

你选取一台与上线环境架构相同的线下机子,最好还能通网(方便下载各种需要的环境)

步骤1:下载需要的各种依赖

如果是通网的,直接用包管理器下就好了,apt install或yum install有啥用啥,能下好就好,自己大多数情况下不用改全局了,都帮你自动配置

步骤2:跑起你需要跑的

确保该环境下你的东西能跑起来,拿我用包管理器下载的nginx举例就是

nginx start

只要能跑起来并能查到他的线程,你就事半功倍了。

步骤3:写填写Dockerfile

创建个文件夹在文件夹下

nano Dockerfile

以包管理器的nginx举例,它的Dockerfile如下

# 使用官方 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 所在目录执行:

docker build -t my_nginx_image_from_dockerfile:v1 .

该指定为打包镜像my_nginx_image_from_dockerfile:v1这个为镜像名称加版本号。注意后面还有一点哦别漏下,

-t:指定镜像名和标签

.:表示当前目录为构建上下文(context)

步骤 5:运行镜像

以nginx举例哦

# 后台运行,并映射 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)

作者懒得码字了,有兴趣留言,作者看到了就继续写了。

总结

到此这篇关于docker制作镜像的两种方式保姆级教程的文章就介绍到这了,更多相关docker如何制作镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker 学习笔记之docker连接网络的设置

    docker 学习笔记之docker连接网络的设置

    本篇文章主要介绍了docker 学习笔记之docker连接网络的设置 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • docker 拉取镜像出错的问题解决

    docker 拉取镜像出错的问题解决

    当Docker拉取镜像遇到网络错误时,通常是因为镜像源无法访问,解决此问题可通过修改Docker的配置文件/etc/docker/daemon.json,设置一个可用的镜像加速地址,修改后重新加载配置并重启Docker服务即可,这样可以提高拉取速度和成功率,避免因网络问题导致的镜像拉取失败
    2024-10-10
  • Redis快速部署为Docker容器的实现方法

    Redis快速部署为Docker容器的实现方法

    本文主要介绍了Redis快速部署为Docker容器的实现方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • DocKer 复制本地镜像的步骤实现

    DocKer 复制本地镜像的步骤实现

    本文主要介绍了DocKer 复制本地镜像的步骤实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-12-12
  • 如何在 Ubuntu 下通过 Docker 部署 Caddy 服务器

    如何在 Ubuntu 下通过 Docker 部署 Caddy 

    本文介绍了如何在Ubuntu系统下通过Docker部署Caddy服务器,首先安装Docker,然后启动Docker服务并设置为开机自启,接着拉取Caddy镜像,并创建一个Caddyfile配置文件,使用命令运行Caddy容器,并将本地的Caddyfile挂载到容器内,感兴趣的朋友跟随小编一起看看吧
    2025-03-03
  • 从零搭建docker+jenkins+node.js自动化部署环境的方法

    从零搭建docker+jenkins+node.js自动化部署环境的方法

    这篇文章主要介绍了从零搭建docker+jenkins+node.js自动化部署环境的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Docker通过容器生成镜像提交DockerCommit详解

    Docker通过容器生成镜像提交DockerCommit详解

    这篇文章主要介绍了Docker通过容器生成镜像提交DockerCommit的详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-09-09
  • Docker容器无法解析域名的处理

    Docker容器无法解析域名的处理

    这篇文章主要介绍了Docker容器无法解析域名的处理问题,具有很好的参考价值,希望对大家有所帮助,
    2023-11-11
  • 使用Docker搭建本地开发环境的详细指南

    使用Docker搭建本地开发环境的详细指南

    这篇文章主要介绍了使用Docker搭建本地开发环境的详细指南,涵盖了从基础Docker准备到多容器管理、安全强化等各个方面,通过使用Docker,可以确保开发环境的一致性、可移植性和可版本控制,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • docker镜像Tag为none的原因及分析

    docker镜像Tag为none的原因及分析

    文章介绍了Docker镜像标签为none的原因及其处理方法,none标签的镜像可能有用,也可能无用,具体取决于是否有容器引用,建议在构建同名同tag的镜像前检查是否存在同名镜像,并注意强行删除镜像可能带来的问题,Docker没有自动删除none镜像的机制,需要手动删除
    2025-02-02

最新评论