初识Dockerfile
Dockerfile:创建镜像,创建自定义的镜像
包括配置文件,挂载点,对外暴露的端口,设置环境变量
Docker的创建镜像方式:
1.基于已经镜像进行创建
根据官方号已提供的镜像源,创建镜像,然后拉起容器,是一个白板,只能提供基础的功能,扩展性的功能还是要自定义(进入容器操作)
2.基于模版进行创建
模版网址https://download.openvz.org/template/precreated/
演示:乌班图
导入镜像

创建容器

3.Dockerfile
联合文件系统(UnionFS),docker镜像的基础
镜像是通过分层来进行集成,特性,可以一次可以同时加载多个文件系统,但是从外面来看,也就是对用户来说,就是一个文件系统。
Docker镜像实际上就是由一层一层的文件系统组成,这种层级的文件系统就是unionFS
每一层都是layer,每一层都包含文件系统的一部分,这些层次叠加在一起,最终形成的就是rootfs
rootfs是什么呢:
看图:

Bootfs:宿主机提供的内核和引导程序
Roofs:就是容器的操作系统,在dockerfile中,我们可以自己指定
Rootfs是多个镜像和应用镜像结合起来的只读层,镜像实际上就是一个只读文件
容器基于镜像实例,运行起来之后,容器就变成可读可写层
在dockerfile当中,每创建一个指令,都是一个镜像层,镜像层会被缓存和复用
1-6
1-4失败
1-4将直接完成,继续运行5-6
一旦有一镜像失败,那么所有的镜像层都会失败,镜像也不会创建
镜像层是不可变的,你在某一层当中添加一个新的命令,但是下一层删除了指令,镜像中基于这个指令创建的文件依然存在,但是在容器中看不见
- touch 123
- Rf -rf 123
Dockerdile的核心:
用户个性化定制docker的镜像
Dockerfile的结构:
- 基础镜像信息
- 维护者信息
- 镜像的操作指令
- 容器启动时执行的命令 前段时间为什么nginx看不见日志: nginx定义好了容器的指令,/bin/bash,覆盖了容器内的标准输出
Dockerfile的语法:
(都是大写)
FROM:指定基础镜像信息,指定容器的操作系统
MAINTANER:指定维护者信息(可有可无)
RUN:在基础的镜像上执行命令,每个RUN就是一层,分层越多,镜像越大
ENTRYPOINT:设置容器运行时的默认命令(容器内部运行的主程序)
CMD:指定容器运行时的默认命令(docker run /bin/bash后面加了其他命令,cmd的指令将会被覆盖)
EXPOSE:暴露端口,(指定容器的运行端口)
ENV:设置容器的环境变量,环境变量可以被run命令使用(声明容器运行需要的环境变量)
ADD:复制,解压。解压是不支持.zip和.tar 只支持tar.gz 和tar.bz2,可以支持url地址解压和复制,主要作用就两字,解压
COPY:复制文件,不能解压,而且只能复制本地文件,文件要和dockerfile在一个目录里 (官方推荐复制用COPY)
VOLUME:创建一个容器内的挂载点,既可以为宿主机挂载,也可以供容器挂载
USER:设置运行镜像时使用的用户或者UID(可以不加,可有可无)
WORKDIR:为后续指令设置的工作目录
ONBUILD:这个镜像可以被其他镜像引用,需要这个命令
ARG:和EVN一样,传参,用与创建容器时,传递参数,ENV可用于容器运行时的设置的环境变量
CMD和ENTRYPOINT的区别
(思考题):
这两个都是可以作为容器启动时的默认命令
- CMD可以把参数传给ENTRYPOINT
- 多个ENTRYPOINT和多个CMD,只会运行最后一个(一个dockerfile当中只会有一个ENTRYPOINT和CMD)
- ENTRYPONIT的指令不会被覆盖,CMD的指令如果在docker run的后面加上输出,会被覆盖
- ENTRYPONIT和CMD的指令在容器启动时执行,都会成为容器的主进程,主进程负责接收信号,处理容器的生命周期,主进程退出,容器也将终止运行
演示一个dockerfile

vim Dockerfile(Docker要大写)

docker build -t centos7:test .
docker run --name test3 centos7:test

Run命令的优化:
主要是减少镜像的层数:把多个run命令写在一块
&&符号:
RUN yum -y install nginx && make -j 4 && make install
前一个命令执行成功才会执行下一个命令
:符号:
RUN yun -y install nginx; make -j 4; make install
不管前面一个命令是否成功,后面的命令都会执行
||:
如果前面的命令执行失败,才会执行后面的操作
反斜杠\:换行
RUN yun -y install nginx\
&& make -j 4\
make install
可读性更高
COPY和add区别:
COPY和add都可以把本地文件复制到镜像中,但是官方推荐如果复制,使用COPY
区别:
Add可以解压压缩,如果是一个压缩文件,add在复制之后会自动解压(tar.gz和tar.bz2)可以支持URL下载源文件,支持下载,但是不能解压,通过URL拷贝的文件无法自动解压
COPY只能复制,不能解压,而且只能是本地文件,不支持URL路径
如和构建一个更高级的dockerfile:
需求:基于centos7构建一个Apache的dockerfile(编译安装):
必须要与dockerfile在同一目录,否则解压报错

FROM centos:7
MAINTAINER this is my diy apache <wang>
RUN yum install -y 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 build -t apache:centos .
构建dockerfile
层次

镜像已经创建好

创建容器,后面不用加/bin/bash 否则将会覆盖CMD
docker run -itd --name test3 http -p 1314:80 apache:centos


如何基于镜像进行二次构建
通过二次构建,可以大大减少镜像的空间(补充)
第一层

二层构建

重新构建一下

结果显示比原来小了200多MB

相关文章:
初识Dockerfile
Dockerfile:创建镜像,创建自定义的镜像 包括配置文件,挂载点,对外暴露的端口,设置环境变量 Docker的创建镜像方式: 1.基于已经镜像进行创建 根据官方号已提供的镜像源,创建镜像,然…...
Python入门第2篇(pip、字符串、方法、json、io操作)
目录 pip包管理器 字符串 方法 json 文件操作 pip包管理器 包管理器类似.NET下的nuget,主要用于管理引用依赖项。 安装Python的时候,已经默认安装了pip包管理器,因此无需单独安装 cmd,输入:pip --version 显示…...
IntelliJ IDEA 智能(AI)编码工具插件
文章目录 通义灵码-阿里CodeGeeX-清华大学智谱AIBitoAmazon CodeWhisperer-亚马逊GitHub Copilot - 买不起CodeiumAIXcoder 仅仅自动生成单元测试功能 TestMe插件(免费)仅仅是模板填充,不智能。 Squaretest插件(收费)…...
Java编程中通用的正则表达式(二)
正则表达式,又称正则式、规则表达式、正规表达式、正则模式或简称正则,是一种用来匹配字符串的工具。它是一种字符串模式的表示方法,可以用来检索、替换和验证文本。正则表达式是一个字符串,它描述了一些字符的组合,这…...
[GPT]Andrej Karpathy微软Build大会GPT演讲(上)--GPT如何训练
前言 OpenAI的创始人之一,大神Andrej Karpthy刚在微软Build 2023开发者大会上做了专题演讲:State of GPT(GPT的现状)。 他详细介绍了如何从GPT基础模型一直训练出ChatGPT这样的助手模型(assistant model)。作者不曾在其他公开视频里看过类似的内容,这或许是OpenAI官方…...
接口测试-Jmeter使用
一、线程组 1.1 作用 线程组就是控制Jmeter用于执行测试的一组用户 1.2 位置 右键点击‘测试计划’-->添加-->线程(用户)-->线程组 1.3 特点 模拟多人操作线程组可以添加多个,多个线程组可以并行或者串行取样器(请求)和逻辑控制器必须依赖线程组才能…...
十大排序(含java代码)
一、冒泡排序 冒泡排序就是把小的元素往前调或者把大的元素往后调,比较是相邻的两个元素比较,交换也发生在这两个元素之间。(类似于气泡上浮过程) 动图演示 代码实现 int a[]{2,5,3,7,4,8};for (int i 0; i < a.length; i) {f…...
js基础:简介、变量与数据类型、流程循环控制语句、数组及其api
JS基础:简介、变量与数据类型、流程循环控制语句、数组及其api 一、简介 1、js概述 tip:JavaScript是什么? 有什么作用? JavaScript(简称JS)是一种轻量级的、解释性的编程语言,主要用于在网页…...
kubeadm搭建单master多node的k8s集群--小白文,图文教程
参考文献 K8S基础知识与集群搭建 kubeadm搭建单master多node的k8s集群—主要参考这个博客,但是有坑,故贴出我自己的过程,坑会少很多 注意: 集群配置是:一台master:zabbixagent-k8smaster,两台…...
CSS层叠样式表一
1,CSS简介 1.1 CSS-网页的美容师 CSS的主要使用场景就是美化网页,布局页面的 CSS也是一种标记语言 CSS主要用于设置HTML页面中的文本内容(字体,大小,对齐方式等)、图片的外形(宽高、边框样式…...
【等保】安徽省等保测评机构名单看这里!
随着互联网技术的飞速发展,网络安全已成为国家安全、社会稳定的重要保障,因此我们严格贯彻落实等保政策。等保测评机构在等保制度执行过程中发挥着重要的作用。现在我们就来看看安徽省等保测评机构有哪些? 【等保】安徽省等保测评机构名单看…...
学习IO的第八天
作业:使用信号灯循环输出ABC sem.c #include <head.h>union semun {int val; /* Value for SETVAL */struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */unsigned short *array; /* Array for GETALL, SETALL */struct seminf…...
【clickhouse】ck远程访问另一个ck
代码实现 CREATE TABLE tmp.tbsas remote( host, database_name, table_name, user, password );就相当于从ck1直接请求ck2 参考文档 https://github.com/ClickHouse/ClickHouse/issues/15295 https://clickhouse.com/docs/zh/sql-reference/table-functions/remote...
Django的logging-日志模块的简单使用方法
扩展阅读: Python-Django的“日志功能-日志模块(logging模块)-日志输出”的功能详解 现在有下面的Python代码: # -*- coding: utf-8 -*-def log_out_test(content_out):print(content_out)content1 "i love you01" log_out_test(content1)现…...
argparse --- 命令行选项、参数和子命令解析器
3.2 新版功能. 源代码: Lib/argparse.py 教程 此页面包含该 API 的参考信息。有关 Python 命令行解析更细致的介绍,请参阅 argparse 教程。 argparse 模块可以让人轻松编写用户友好的命令行接口。 程序定义它需要哪些参数,argparse 将会知…...
洛谷 P8802 [蓝桥杯 2022 国 B] 出差
文章目录 [蓝桥杯 2022 国 B] 出差题目链接题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 思路解析CODE [蓝桥杯 2022 国 B] 出差 题目链接 https://www.luogu.com.cn/problem/P8802 题目描述 A \mathrm{A} A 国有 N N N 个城市,编号为 1 … N …...
fastadmin配置教程
第一. 打开小皮,创建一个网站 第二. 打开fastadmin官网,下载压缩包 下载好后是这个样子 打开网站的根目录,将这个压缩包压缩到你网站的根目录里 第三,小皮里面创建一个数据库 第四,然后打开网站,输入创…...
golang游戏服务器 - tgf系列课程01
TGF框架的特点和功能 课程介绍了TGF框架的特点和功能在第一节课程中我们并不会介绍框架的使用。我们希望在这节课程中,能让你了解到tgf是一个什么样的框架 概要 本节课程介绍了TGF框架的特点和功能。TGF是一个开箱即用的服务器框架, 适合中小型团队和独立开发者进行游戏开发。…...
react dom的diff理解及性能优化
diff的三大过程 当某个值变化时,他从根组件寻找 (key,state,props,context) 当父组件稳定时,react会跳过子组件的props的对比 只有当当前组件值改变时,从他开始,所有的子孙节点都会对比props props是全等比较,所以&am…...
【acwing】92. 递归实现指数型枚举
穿越隧道 递归枚举、位运算 方法① 从1到n,顺序访问每位数,是否选择,每位数有两种状态,选1或不选0. AC代码如下: #include <iostream> using namespace std;const int N 100; // bool st[N]; int n;void dfs(in…...
告别抓包失败!保姆级配置:让Burp+Proxifier稳定抓取任意微信小程序
微信小程序抓包实战:BurpProxifier零失败配置指南 每次调试微信小程序接口都像在玩捉迷藏?明明按照教程一步步操作,却总在最后一步功亏一篑。作为经历过数十次抓包失败的过来人,我总结出一套"一次配置终身受用"的解决方…...
实测对比:ChatGPT、Gemini、Grok、Claude 在四个开发任务中的表现差异
2026年,AI编程助手已经成为开发者的标配。但不同模型在不同任务上的表现差异很大,选对模型往往能事半功倍。本文基于同一测试环境(聚合平台solo.kulaai.cn),对四款主流模型进行了横向对比,记录下实测数据&a…...
A89306电机控制器驱动库:SPI寄存器级控制与FOC系统集成
1. A89306电机控制器驱动库技术解析与工程实践1.1 芯片定位与系统角色A89306是由Allegro MicroSystems推出的高集成度三相无刷直流(BLDC)电机控制器专用IC,面向中高端工业驱动与精密运动控制场景。该芯片并非通用MCU,而是集成了栅…...
C语言完美演绎7-1
/* 范例:7-1 */#include<stdio.h>void main(){int MyArray1[]{1,2,3,4,5}; /* 同MyArray[5]{1,2,3,4,5}; */int MyArray2[5]{1,2,3}; /* 元素值少于五个时,数组的初始化会把不足的数组元素以0取代 */for(int i0;i<5;i)printf("MyArray…...
整流器模型预测控制mpc仿真三相三电平npc型整流器有限集模 整流器模型预测控制mpc仿真三相...
整流器模型预测控制mpc仿真三相三电平npc型整流器有限集模整流器模型预测控制mpc仿真三相三电平npc型整流器有限集模型预测控制fcs-mps,控制目标为跟踪电流和中点电位平衡,有参考文献文章:标题:整流器模型预测控制(MPC…...
5分钟掌握B站视频下载的终极解决方案
5分钟掌握B站视频下载的终极解决方案 【免费下载链接】BiliDownloader BiliDownloader是一款界面精简,操作简单且高速下载的b站下载器 项目地址: https://gitcode.com/gh_mirrors/bi/BiliDownloader 还在为无法保存喜欢的B站视频而烦恼吗?BiliDow…...
如何让旧iPhone/iPad焕发新生:Legacy-iOS-Kit终极降级指南
如何让旧iPhone/iPad焕发新生:Legacy-iOS-Kit终极降级指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...
从ItemCF到Swing:手把手教你用Python实现小红书式协同过滤召回(附代码避坑)
从ItemCF到Swing:Python实战小红书式协同过滤召回系统 在内容社区和电商平台的推荐系统中,协同过滤算法始终占据着核心地位。不同于深度学习推荐模型对海量数据和算力的依赖,基于物品和用户的协同过滤方法以其直观的可解释性和稳定的效果&…...
思欣跃:家长有效帮助孩子改善注意力和识别多动症表现的方法
如何识别儿童多动症的主要症状及表现 识别儿童多动症(ADHD)的主要症状至关重要。首先,注意力缺陷常表现为孩子在完成作业时容易分心,难以坚持做一件事情。如果孩子常在课堂上插嘴或走动,这可能是多动症的迹象。此外&am…...
【技术干货】从 Gemma 4 到本地智能体:打造可落地的 Local AI 工作流实战
摘要 本文围绕 Google 最新开源模型家族 Gemma 4,系统梳理其技术特性、模型选型思路,并结合 Ollama Hermes Agent / Open-Chat,搭建一套可在本地落地的智能体(Agent)工作流。同时补充云端 OpenAI 兼容 API 的调用示例…...
