从零开始学Docker(三):DockerFile镜像定制
宿主机环境:RockyLinux 9
前言,定制docker镜像的方式有两种:
- 手动修改容器内容,然后docker commit提交容器为新的镜像
- 通过在dockerfile中定义一系列的命令和参数构成的脚本,然后这些命令应用于基础镜像,依次添加层, 最终生成一个新的镜像。极大的简化了部署工作。
Dockfile简介

镜像是多层存储,每一层在前一层的基础上进行修改;
容器也是多层存储,以镜像为基础层,在其基础上加一层作为容器运行时的存储层。
官方提供的dockerfile实例
https://github.com/CentOS/CentOS-Dockerfiles
Dockerfile命令




Dockfile实践
需求,通过dockfile,构建nginx镜像,且运行容器后,生成页面显示“云原生基础,从零开始学Docker!”
- 编辑dockfile文件
[root@192 ~]# mkdir learn_docker [root@192 learn_docker]# ls [root@192 learn_docker]# cat dockerfile FROM nginx RUN echo '<meta charset=utf8>云原生基础,从零开始学Docker!' > /usr/share/nginx/html/index.html - 根据dockfile构建镜像
[root@192 learn_docker]# docker build .[root@192 learn_docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> b268ad835d4c 12 minutes ago 187MB nginx_hunter latest 53807fe50cad 6 hours ago 187MB nginx latest 89da1fb6dcb9 31 hours ago 187MB# 对其生成的镜像重命名 repository和tag [root@192 learn_docker]# docker tag b268ad8 my_nginx [root@192 learn_docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE my_nginx latest b268ad835d4c 13 minutes ago 187MB nginx_hunter latest 53807fe50cad 6 hours ago 187MB nginx latest 89da1fb6dcb9 31 hours ago 187MB - 根据构建镜像创建容器并运行
# 创建并启动nginx容器 [root@192 learn_docker]# docker run -d -p 86:80 --name my_nginx001 my_nginx 2c4ee3f20fff7f15af0b9ace26dc2c246810ef8240751849a9c4fc4bea8bf39a [root@192 learn_docker]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2c4ee3f20fff my_nginx "/docker-entrypoint.…" 5 seconds ago Up 4 seconds 0.0.0.0:86->80/tcp, :::86->80/tcp my_nginx001 6627aa9383d9 nginx "/docker-entrypoint.…" 6 hours ago Up About an hour 0.0.0.0:85->80/tcp, :::85->80/tcp nginx001 - 验证结果

Dockfile构建一个网站镜像
这里以我之前关注过的一个前端框架Demo为例
文档地址:Vben Admin
- 打包前端框架,并上传至宿主机指定目录
[root@192 html]# pwd /root/learn_docker/html [root@192 html]# ls # 这里就是我们打包好的前段静态文件 _app.config.js assets favicon.ico index.html logo.png resource - 编写dockfile
[root@192 learn_docker]# cat /root/learn_docker/dockerfile FROM nginxMAINTAINER Hunter4JCOPY html/ /usr/share/nginx/html/EXPOSE 5173构建的nginx实例中,我使用的是默认的nginx.conf配置,文件位置在 /etc/nginx/conf.d/default.conf
server {listen 80;listen [::]:80;server_name localhost;#access_log /var/log/nginx/host.access.log main;location / {root /usr/share/nginx/html;index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#} } - 生成镜像
[root@192 learn_docker]# docker build -t myvben .[root@192 learn_docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myvben latest fae1690423df 20 minutes ago 194MB -
创建并运行容器
[root@192 learn_docker]# docker run -d -p 8080:80 --name myvben001 myvben 153421a01df490b70a238ed7706ded3d4e9efd2bf477e0c5497c4608a125dec2[root@192 learn_docker]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 153421a01df4 myvben "/docker-entrypoint.…" 3 seconds ago Up 3 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp myvben001 -
浏览器验证容器中程序运行情况

至此,我们在容器中第一个运行的项目已经部署成功了
相关文章:
从零开始学Docker(三):DockerFile镜像定制
宿主机环境:RockyLinux 9 前言,定制docker镜像的方式有两种: 手动修改容器内容,然后docker commit提交容器为新的镜像通过在dockerfile中定义一系列的命令和参数构成的脚本,然后这些命令应用于基础镜像,依…...
【Linux】 UDP网络套接字编程
🍎作者:阿润菜菜 📖专栏:Linux系统网络编程 文章目录 一、网络通信的本质(port标识的进程间通信)二、传输层协议UDP/TCP认识传输层协议UDP/TCP网络字节序问题(规定大端) 三、socket编…...
《golang设计模式》第一部分·创建型模式-05-工厂方法模式(Factory Method)
文章目录 1 概述2.1 角色2.2 类图 2 代码示例2. 1 设计2.2 代码2.3 类图 3. 简单工厂3.1 角色3.2 类图3.3 代码示例3.3.1 设计3.3.2 代码3.3.3 类图 1 概述 工厂方法类定义产品对象创建接口,但由子类实现具体产品对象的创建。 2.1 角色 Product(抽象产…...
Kubernetes 概述
1、K8S 是什么? K8S 的全称为 Kubernetes (K12345678S) 作用 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。 可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群&#…...
Electron + Vue3 + Vite + TS 构建桌面应用
之前是使用React、Electron、TS和webpack来构建桌面应用的。虽然功能齐全,但是打包等等开发的体验不太理想,总感觉太慢了。作为一个开发者,我们总是希望,执行构建命令后,可以快速打包或者启动本地应用,且通过更少的配置,来完成开发体验。 现在的vite已经得到广泛的应用…...
springboot访问请求404的原因
是记录,可能出现错误 可能出现的原因 1.你请求的URL路径不对,比如说你请求的路径是/usr/list,GET方法,但是你UserController上面的RequestMapping是这个样子:RequestMapping(“user”),有可能哈 2.前端的请求时GET方法,后端对应的处理函数的方…...
网络安全零基础该如何自学?
一、为什么选择网络安全? 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地,网络安全行业地位、薪资随之水涨船高。 未来3-5年,是安全行业的黄金发展期,提前踏入…...
Git(丢失stash数据恢复)
在这里总结一下昨天遇到的问题,我本想将本地代码push到远端仓库,依次运行了以下命令 git init //初始化 git add . //将本地代码添加到暂存区 git commit -m 注释 //将暂存区内容添加到本地仓库中。 结果这时发生了代码冲突,我的代码全没了&a…...
Maven依赖管理
依赖特性: 1、依赖配置 2、依赖传递 3、可选依赖 4、排除依赖 5、依赖范围...
【电网技术复现】考虑实时市场联动的电力零售商鲁棒定价策略(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
R语言中数据重塑(长宽表的转化)
学习笔记,仅供学习使用。 目录 1-什么是整洁的数据? 2-宽表变成长表 示例1: 示例2: 示例3: 3-长表变宽表 示例1: 示例2: 1-什么是整洁的数据? 按照Hadley的表述…...
C# Blazor 学习笔记(10):依赖注入
文章目录 前言Blazor 依赖注入依赖注入用于解决什么问题?依赖注入的生命周期。测试代码 总结 前言 Blazor 具有前后端不分离模式,但是如何直接调用需要一定的设置 Blazor 依赖注入 依赖注入在spring里面很常见,毕竟.NET 是个巨型融合怪。只…...
接口请求(get、post、head等)详解
一.接口请求的六种常见方式: 1、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体) 2、Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建…...
【【萌新的STM32学习-4】】
萌新的STM32学习-4 STM32系统框架 1.1 Cortex M 内核& 芯片 F1有四个驱动单元 四个被动单元 AHB 高级高性能总线 APB 高级外围总线 部分系统结构 最上面的ICode 总线直接连接到了内部Flash 不需要通过总线矩阵 . D Code 总线(D - Bus) 这是Cort…...
C++ Primer Plus第五章 习题
目录 复习题: 1.入口条件循环和出口条件循环之间的区别是什么?各种c循环分别属于其中的哪一种? 2.如果下面的代码片段是有效程序的组成部分,它将打印什么内容? 3.如果下面的代码片段是有效程序的组成部分࿰…...
软考A计划-系统集成项目管理工程师-信息文档和配置管理-上
点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…...
Vue 路由 路由守卫
路由守卫 正如其名, vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。简单来说,就是在路由跳转 时候的一些钩子,当从一个页面跳转到另一个页面时,可以在跳转前、中、后做一些事情。 当你打开一个页面的前后需…...
基于springboot的课程作业管理系统【附开题|ppt|万字文档(LW)和搭建文档】
主要功能 学生登录: ①首页、个人中心:修改密码、个人信息管理等 ②公告信息管理、课程信息管理、学生选课管理、作业布置管理、作业提交管理、作业评分管理、课程评价管理、课程资源管理 教师登录: ①首页、个人中心:修改密码、…...
关于个人微信API接口的开发
个人微信开发API接口可拓展功能说明 1、个人微信多账号管理、聚合聊天、多个微信号同时登陆、多个微信号集中在一个窗口进行聊天,实现一人多号同时沟通快速提升沟通效率,提升微信营销效率。 2、客服灵活分配:客服主管可自由分配微信号给指定…...
华为PMS API client token auth failed
对接华为pms时出现问题,提示华为PMS API client token auth failed 主要是权限的问题,创建项目的时候选择N/A...
惠普/H3C服务器iLO管理页面SSA配置详解:如何正确开启HBA模式与安装Windows系统
惠普/H3C服务器iLO管理界面SSA配置实战:HBA模式切换与Windows系统部署全指南 第一次接触惠普或H3C服务器的工程师,往往会被其独特的iLO带外管理系统和SSA存储配置工具所困扰。特别是当需要绕过硬件RAID直接使用单盘进行性能测试时,如何正确配…...
OpenClaw如何安装?2026年4月阿里云1分钟超简单云端搭建及百炼Coding Plan教程
OpenClaw如何安装?2026年4月阿里云1分钟超简单云端搭建及百炼Coding Plan教程。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服务启动、…...
剪映专业版教程:制作画卷开合效果
前言 今天教大家一个画卷开合效果。这种效果模拟画卷从中间向上下两边展开,停留片刻后缓缓合拢,配合四季主题诗词和朗读,适合古风视频、诗词鉴赏、传统文化展示等场景。 效果预览:画卷从中间向上下翻开,露出四季风景…...
嵌入式Linux驱动新选择:基于TinyDRM为ST7789V TFT屏幕编写现代化显示驱动
1. 为什么选择TinyDRM替代传统fbtft驱动 第一次接触ST7789V这类SPI接口的TFT屏幕时,大多数开发者都会选择fbtft驱动方案。我也不例外,当时在树莓派上折腾了好几天终于让屏幕亮起来。但随着项目深入,逐渐发现fbtft在嵌入式Linux上的局限性——…...
保姆级教程:从Vivado导出的XSA文件到Petalinux定制Linux系统(以AX7010开发板为例)
从XSA到嵌入式Linux:基于Petalinux的Zynq开发板全流程实战指南 第一次接触Zynq和Petalinux的开发者常会遇到这样的困惑:Vivado生成的硬件描述文件如何转化为可启动的Linux系统?本文将手把手带你完成从XSA文件到完整Linux系统的全流程构建&…...
3个技巧让百度网盘下载速度翻倍:直链解析工具实战指南
3个技巧让百度网盘下载速度翻倍:直链解析工具实战指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否曾为百度网盘的下载速度而烦恼?当急需获取…...
【限时解密】头部AI编码平台未公开的长代码分治协议:动态切片+跨段约束注入+状态感知回溯(附可运行PoC)
第一章:智能代码生成在长代码中的挑战 2026奇点智能技术大会(https://ml-summit.org) 当智能代码生成模型面对超过千行的模块化系统(如微服务入口层、编译器前端或分布式事务协调器)时,其输出质量常出现显著衰减。这种衰减并非源…...
破局性能与灵活性的博弈:Kuikly 动态化方案的场景实战与评估
在移动互联网进入存量竞争的时代,App 的业务迭代速度与用户体验之间往往存在着天然的“鱼和熊成鱼”的矛盾。为了实现业务的快速上线,开发者尝试了从 H5 到 React Native,再到 Flutter 的各种跨端动态化方案。然而,在追求极致性能…...
fre:ac音频转换器:如何在3分钟内完成无损格式转换
fre:ac音频转换器:如何在3分钟内完成无损格式转换 【免费下载链接】freac The fre:ac audio converter project 项目地址: https://gitcode.com/gh_mirrors/fr/freac 还在为不同设备间的音频格式不兼容而烦恼吗?fre:ac音频转换器为你提供了一站式…...
别再搞混了!手把手教你配置SAP公司代码的会计科目表(OB62详解与避坑指南)
SAP财务实战:深度解析OB62配置中的会计科目表分配逻辑与避坑策略 每次打开SAP的财务配置界面,那些看似简单的选项背后往往隐藏着复杂的业务逻辑。特别是在处理跨国公司财务系统时,会计科目表的配置就像是在搭建一座连接不同会计准则的桥梁—…...
