dockerfile---创建镜像
dockerfile创建镜像:创建自定义镜像。
包扩配置文件的创建,挂载点,对外暴露的端口。设置环境变量。
docker镜像的方式:
1、基于官方源进行创建
根据官方提供的镜像源,创建镜像,然后拉起容器。是一个白板,只能提供基础的功能,扩展性的功能还是需要自定义(进入容器进行操)
2、基于模板进行创建
3、dockerfile
联合文件系统(UnionFS),docker的基础。镜像通过分成来进行集成,特性:一次同时加载多个文件系统,但是从外面来看,就是一个文件系统。
docker镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是UnionFS。
每一层都是layers,每一层都包含文件系统的一部分,这些层次叠加在一起,最终形成的就是rootfs。
docker原理

bootfs:宿主机提供的内核和引导程序
roosfs:就是容器的操作系统,在dockerfile中,我们可以自己指定。
rootfs是多个基础镜像和应用镜像结合起来的只读层。镜像实际上就是一个只读文件
容器基于镜像实力,运行起来后容器可变成可读可写层。
docker报错
在dockerfile当中每创建一个指定都是一格镜像,镜像层被缓存和复用
1-6层
1-4 4失败
再次执行1-4直接完成,继续运行5-6
一旦有一层镜像失败,那么所有的镜像层都会失败。镜像也不会创建
镜像层是不可变的,在某一次添加一个新的命令,在下一次删除指令,镜像中基于这个命令创建的文件依然存在,但在容器中不可见。
总结以上描述核心:用户个性化定制docker的镜像
dockerfile的结构:
1、基础镜像信息
2、维护者信息
3、镜像的操作指令
4、容器启动时,执行的命令。
docker logs 没日志原因?????????
nginx:定义好了容器执行的命令 /bin/bash,覆盖了容器内的标准输出。
dockerfile语法:
| 类型名 | 说明 |
| FROM | 指定基础镜像的信息,指定容器的操作系统。 |
| MAINTAINER | 指定维护者信息(可有可无) |
| RUN | 在基础镜像上执行的命令,每个run就是一层,分层越多,镜像就越大。 |
| ENTRYPOINT | 设置容器运行时的命令(容器内部运行的主程序) |
| CMD | 可以指定容器运行时的默认命令(docker run /bin/bash后面加了其他的命令,cmd指令将会被覆盖) |
| EXPOSE | 暴露端口(指定容器的运行端口) |
| ENV | 设置环境变量,环境变量可以被run命令使用(声明容器运行需要的环境变量) |
| ADD | 复制,解压。解压不支持.zip和.tlr,tar.gz tar.bz2 支持url的地址解压和复制(解压) |
| COPY | 复制文件,不能解压,而且只能复制本地文件。文件要和dockerfile在一个目录.。(官方推荐) |
| VOLUME | 创建一个容器内的挂载点,既可以为宿主机挂载,也可以供容器挂载。 |
| USER | 设置运行镜像时使用的用户或者UID(可以不加) |
| WORKDIR | 未后续指令设置的工作目录。 |
| ONBUILD | 这个镜像可以被其他镜像引用,需要这个命令。 |
| ARG | 传参,用于创建容器时,传递参数。ENV用于容器运行时设置环境变量。 |
CMD和ENTRYPOINT的区别
| cmd可以把参数传给ENTRYPOINT的默认命令。 |
| 有多个entrypoint和多个cmd,只会运行最后一个(一个dockerfile当中只会有一个entrypoint和cmd) |
| ENTRYPOINT指令不会被覆盖,CMD的指令如果在docker run的后面加上输出,会被覆盖。 |
| ENTRYPOINT和CMD的指令在容器启动时执行,都会成为容器的主进程。主进程负责接受信号,处理容器的生命周期,主进程退出,容器也将终止运行。 |
RUN命令的优化:
核心作用:主要是减少镜像的层数:把多个run命令写一起。
&& 符号:
RUN yum-y install nginx && make -j 4 && make install
前一个命令执行成功,才会执行下一个命令。
; 符号:
RUN yum-y install nginx;make -j 4;make install
不管前一个命令执行成功,后面的命令都会执行。
|| 符号:
RUN yum-y install nginx || make -j 4
如果前面的命令执行失败,才会执行后面的操作
\:换行
RUN yum-y install nginx \
&& make -j 4 \
&& make install可读写更高
copy和add区别
copy和add都可以把本地文件复制到镜像中,官方推荐复制用copy
add:可以解压,add可以在复制文件之后会自动解压,可以支持URL下载源文件,支持下载,但是不能解压。通过URL拷贝的文件无法自动解压。
copy:只能复制,不能解压,而且只能是本地文件,不支持URL路径
centos7 构建一个apache的dockerfile(编译安装):
所需的包放在与Dockerfile文件同一个目录下
![]()
vim DockerfileFROM centos:7
MAINTAINER "this is my apache <LYW>"
RUN yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl
ADD apr-1.6.2.tar.gz /opt
ADD apr-util-1.6.0.tar.gz /opt
ADD httpd-2.4.29.tar.bz2 /opt
RUN mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr && mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util &&\
cd /opt/httpd-2.4.29 &&\
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi &&\
make -j 4 && make install
EXPOSE 80
CMD ["/usr/local/httpd/bin/apachectl","-D","FOREGROUND"]
创建启动容器
docker run -itd --name 容器 镜像名:标签例
docker run -itd --name test1 apache1:centos
centos7 构建一个apache的dockerfile(编译安装):

FROM centos:7
MAINTAINER "this is my nginx <LYW>"
RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
ADD nginx-1.22.0.tar.gz /opt
RUN useradd -M -s /sbin/nologin nginx &&\
cd /opt/nginx-1.22.0 &&\
mkdir -p /usr/local/nginx/run/ &&\
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module &&\
chown -R nginx.nginx /usr/local/nginx &&\
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ &&\
make -j 4 && make install
EXPOSE 80
RUN
CMD ["/usr/local/nginx/sbin","-g","daemon off;"]
创建启动容器
docker run -itd --name nginx1 nginx:centos
操作中遇到的问题
1、yum安装出错
解决方法:重启docker
systemctl restart docker.service
2、报错:RUN中&&\与下一个命令一起
解决方案:将下一条命令run单写
相关文章:
dockerfile---创建镜像
dockerfile创建镜像:创建自定义镜像。 包扩配置文件的创建,挂载点,对外暴露的端口。设置环境变量。 docker镜像的方式: 1、基于官方源进行创建 根据官方提供的镜像源,创建镜像,然后拉起容器。是一个白板,…...
Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试
原文连接:Raspberry PI Codesys EtherCAT步进驱动ECR60 Motion功能测试 – 个人资料收集 (rtplc.com) <div class"post_info_wrapper "> <p class"has-drop-cap">运动控制功能是codesys及EtherCAT通讯的重要功能&am…...
03 Temporal 详细介绍
前言 在后端开发中,大家是否有遇到如下类型的开发场景 需要处理较多的异步事件需要的外部服务可靠性较低需要记录保存某个对象的复杂状态 在以往的开发过程中,可能更多的直接使用数据库、定时任务、消息队列等作为基础,来解决上面的问题。然…...
【算法】【动规】乘积为正数的最长子数组长度
跳转汇总链接 👉🔗算法题汇总链接 1.1 乘积为正数的最长子数组长度 🔗题目链接 给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积…...
Kubernetes实战(十四)-k8s高可用集群扩容master节点
1 单master集群和多master节点集群方案 1.1 单Master集群 k8s 集群是由一组运行 k8s 的节点组成的,节点可以是物理机、虚拟机或者云服务器。k8s 集群中的节点分为两种角色:master 和 node。 master 节点:master 节点负责控制和管理整个集群…...
Spring之容器:IOC(1)
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…...
【.Net 6.0--通用帮助类--ConvertHelper】
前言 类型转换帮助类,包含下表中的方法: 方法名方法解释ObjToIntobject转intObjToMoneyobject转doubleObjToStringobject转stringObjToDecimalobject转decimalObjToDateobject转datetimeObjToDateSplitYMDobject转datetime(yyyy-MM-dd&…...
【加解密】报文签名与加解密,MD5,RSA,AES使用案例(基于 Java)
需要考虑哪些问题? 在进行报文传输时,有两个问题需要考虑: 消息防篡改加密报文 定义消息结构 为了方便后面使用,这里定义消息结构: public static class Message {public String data; //消息public String sign;…...
新建vue3项目
三种方法 一. 第一种方式 1、操作步骤: 创建项目目录 vue create 项目名称选择配置方式 ? Please pick a preset: #选择一个配置 Default ([Vue 3] babel, eslint)Default ([Vue 2] babel, eslint)Manually select …...
出现 Error:Unable to access jarfile xxxx\target\nacos-server.jar 解决方法
目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 执行Nacos中的startup.cmd的时候出现闪退,于是在该脚本的最后一行添加pause,查看因为什么原因闪退 出现的bug如下所示:Error:Unable to access jarfile xxxx\target\nacos-server.jar 截图如下所示: 查看内部文件夹,…...
记录一次API报文替换点滴
1. 需求 各位盆友在日常开发中,有没有遇到上游接口突然不合作了,临时需要切换其他接口的情况?这不巧了,博主团队近期遇到了,又尴尬又忐忑。 尴尬的是临时通知不合作了,事前没有任何提醒; 忐忑…...
PMP项目管理 - 沟通管理
系列文章目录 PMP项目管理 - 质量管理 PMP项目管理 - 采购管理 PMP项目管理 - 资源管理 PMP项目管理 - 风险管理 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in…...
fckeditor编辑器改造示例:增加PRE,CODE控件
查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置,前后端开发环境的配置,编辑器的配置,网络服务的配置,网络命令的应用与配置,windows常见问题的解决等。 文章目录 修改方法:1)修改fckco…...
风速预测(五)基于Pytorch的EMD-CNN-LSTM模型
目录 前言 1 风速数据EMD分解与可视化 1.1 导入数据 1.2 EMD分解 2 数据集制作与预处理 2.1 先划分数据集,按照8:2划分训练集和测试集 2.2 设置滑动窗口大小为96,制作数据集 3 基于Pytorch的EMD-CNN-LSTM模型预测 3.1 数据加载&…...
单元测试二(理论)-云计算2023.12-云南农业大学
文章目录 一、单选题1、三次握手、四次挥手发生在网络模型的哪一层上?2、互联网Internet的拓扑结构是什么?3、以下哪一种网络设备是工作在网络层的?4、以下哪种关于分组交换网络的说法是错误的?5、以下哪种协议是在TCP/IP模型中的…...
QModelIndex 是 Qt 框架中的一个类,用于表示数据模型中的索引位置
QModelIndex 是 Qt 框架中的一个类,用于表示数据模型中的索引位置。 在 Qt 中,数据模型是一种组织和管理数据的方式,常见的数据模型包括 QAbstractItemModel、QStandardItemModel 和 QSqlQueryModel 等。QModelIndex 类提供了一种标识数据模…...
前端实现一个时间区间内,再次单选功能,使用Antd组件库内日历组件Calendar
需求:需要先让用户选择一个时间区间,然后再这个时间区间中,让用户再次去单选其种特殊日期。 思路: 1.先用Antd组件库中日期选择DatePicker.RangePicker实现让用户选择时间区间 2.在选择完时间区间后,用这个时间区间…...
【运维笔记】Hyperf正常情况下Xdebug报错死循环解决办法
问题描述 在使用hyperf进行数据库迁移时,迁移报错: 查看报错信息,错误描述是Xdebug检测到死循环,可是打印的堆栈确实正常堆栈,没看到死循环。 寻求解决 gpt 说的跟没说一样。。 google一下 直接把报错信息粘贴上去…...
嵌入式开发中的总线与时钟
总线 AHB总线 AHB的全称是"Advanced High-performance Bus",中文翻译就是"高级高性能总线"。这是一种在计算机系统中用于连接不同硬件组件的总线架构,它可以帮助这些组件之间高效地传输数据和信息。这个总线架构通常用于处理速度较快且对性能要求较高的…...
k8s debug 浅谈
一 k8s debug 浅谈 说明: 本文只是基于对kubectl debug浅显认识总结的知识点,后续实际使用再补充案例 Kubernetes 官方出品调试工具上手指南(无需安装,开箱即用) debug-application 简化 Pod 故障诊断: kubectl-debug 介绍 1.18 版本之前需要自己…...
openpilot自动驾驶系统深度解析:架构剖析与实战指南
openpilot自动驾驶系统深度解析:架构剖析与实战指南 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub_Trending/…...
从零构建本地化AI代码助手:架构、微调与工程实践
1. 项目概述:从零构建你自己的Claude代码助手最近在开发者社区里,一个名为“build-your-claude-code-from-scratch”的项目引起了我的注意。这个标题本身就充满了吸引力——它暗示着一种可能性:我们是否能够不依赖任何现成的、闭源的商业API&…...
5分钟免费获取:开源鼠标连点器MouseClick完整使用指南
5分钟免费获取:开源鼠标连点器MouseClick完整使用指南 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,…...
游戏技能工程化:用数据驱动与计算机视觉构建Apex Legends个人成长系统
1. 项目概述:从“Apex Growth”到“OpenClaw Skill”的爬升之路如果你是一名游戏开发者,尤其是对竞技类FPS(第一人称射击)游戏感兴趣,那么“Apex Legends”这个名字你一定不陌生。这款游戏以其快节奏、高机动性和深度的…...
OpenClawTuto:从零构建高可靠GUI自动化脚本的工程实践指南
1. 项目概述与核心价值 最近在GitHub上看到一个挺有意思的项目,叫“OpenClawTuto”。光看名字,你可能会有点懵,这“OpenClaw”是啥?是开源爪子?还是某种工具?其实,这是一个围绕“OpenClaw”这个…...
免费开源鼠标连点器终极指南:5分钟掌握高效自动化技巧
免费开源鼠标连点器终极指南:5分钟掌握高效自动化技巧 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,…...
从零打造开源机械爪:低成本机器人抓取方案全解析
1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“OpenClawTuto”。光看这个名字,你可能会有点摸不着头脑,它不像“XX管理系统”或者“XX深度学习框架”那样一目了然。但作为一个在开源社区和自动化领域摸爬滚打了十来年的老手…...
基于LanceDB的AI记忆管理系统:从向量存储到智能记忆引擎
1. 项目概述:一个面向AI记忆管理的向量数据库解决方案最近在折腾AI应用,特别是那些需要长期记忆和上下文关联的智能体(Agent)时,我发现一个核心痛点:如何高效、低成本地存储和检索海量的对话历史、知识片段…...
大模型涌现能力:从原理到工程实践的探索与分类
1. 项目概述:从“玄学”到“科学”的涌现能力探索最近和几个做模型研发的朋友聊天,大家不约而同地提到了一个词:“涌现能力”。这个词听起来有点玄乎,像是某种不可预测的“魔法”,但当我们深入讨论时,发现它…...
基于Codebender在线IDE快速开发Adafruit FLORA可穿戴硬件项目
1. 项目概述:为什么选择在线IDE来玩转可穿戴硬件?如果你和我一样,是个喜欢鼓捣硬件的创客,那么对Arduino、树莓派这类开发板一定不陌生。每次开始一个新项目,最头疼的往往不是写代码,而是配环境:…...
