当前位置: 首页 > news >正文

初识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

一旦有一镜像失败,那么所有的镜像层都会失败,镜像也不会创建

镜像层是不可变的,你在某一层当中添加一个新的命令,但是下一层删除了指令,镜像中基于这个指令创建的文件依然存在,但是在容器中看不见

  1. touch 123
  2. Rf -rf 123

Dockerdile的核心:

用户个性化定制docker的镜像

Dockerfile的结构:

  1. 基础镜像信息
  2. 维护者信息
  3. 镜像的操作指令
  4. 容器启动时执行的命令  前段时间为什么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的区别

(思考题):

这两个都是可以作为容器启动时的默认命令

  1. CMD可以把参数传给ENTRYPOINT
  2. 多个ENTRYPOINT和多个CMD,只会运行最后一个(一个dockerfile当中只会有一个ENTRYPOINT和CMD)
  3. ENTRYPONIT的指令不会被覆盖,CMD的指令如果在docker run的后面加上输出,会被覆盖
  4. 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&#xff1a;创建镜像&#xff0c;创建自定义的镜像 包括配置文件&#xff0c;挂载点&#xff0c;对外暴露的端口&#xff0c;设置环境变量 Docker的创建镜像方式&#xff1a; 1.基于已经镜像进行创建 根据官方号已提供的镜像源&#xff0c;创建镜像&#xff0c;然…...

Python入门第2篇(pip、字符串、方法、json、io操作)

目录 pip包管理器 字符串 方法 json 文件操作 pip包管理器 包管理器类似.NET下的nuget&#xff0c;主要用于管理引用依赖项。 安装Python的时候&#xff0c;已经默认安装了pip包管理器&#xff0c;因此无需单独安装 cmd&#xff0c;输入&#xff1a;pip --version 显示…...

IntelliJ IDEA 智能(AI)编码工具插件

文章目录 通义灵码-阿里CodeGeeX-清华大学智谱AIBitoAmazon CodeWhisperer-亚马逊GitHub Copilot - 买不起CodeiumAIXcoder 仅仅自动生成单元测试功能 TestMe插件&#xff08;免费&#xff09;仅仅是模板填充&#xff0c;不智能。 Squaretest插件&#xff08;收费&#xff09;…...

Java编程中通用的正则表达式(二)

正则表达式&#xff0c;又称正则式、规则表达式、正规表达式、正则模式或简称正则&#xff0c;是一种用来匹配字符串的工具。它是一种字符串模式的表示方法&#xff0c;可以用来检索、替换和验证文本。正则表达式是一个字符串&#xff0c;它描述了一些字符的组合&#xff0c;这…...

[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 特点 模拟多人操作线程组可以添加多个&#xff0c;多个线程组可以并行或者串行取样器(请求)和逻辑控制器必须依赖线程组才能…...

十大排序(含java代码)

一、冒泡排序 冒泡排序就是把小的元素往前调或者把大的元素往后调&#xff0c;比较是相邻的两个元素比较&#xff0c;交换也发生在这两个元素之间。&#xff08;类似于气泡上浮过程&#xff09; 动图演示 代码实现 int a[]{2,5,3,7,4,8};for (int i 0; i < a.length; i) {f…...

js基础:简介、变量与数据类型、流程循环控制语句、数组及其api

JS基础&#xff1a;简介、变量与数据类型、流程循环控制语句、数组及其api 一、简介 1、js概述 tip&#xff1a;JavaScript是什么&#xff1f; 有什么作用&#xff1f; JavaScript&#xff08;简称JS&#xff09;是一种轻量级的、解释性的编程语言&#xff0c;主要用于在网页…...

kubeadm搭建单master多node的k8s集群--小白文,图文教程

参考文献 K8S基础知识与集群搭建 kubeadm搭建单master多node的k8s集群—主要参考这个博客&#xff0c;但是有坑&#xff0c;故贴出我自己的过程&#xff0c;坑会少很多 注意&#xff1a; 集群配置是&#xff1a;一台master&#xff1a;zabbixagent-k8smaster&#xff0c;两台…...

CSS层叠样式表一

1&#xff0c;CSS简介 1.1 CSS-网页的美容师 CSS的主要使用场景就是美化网页&#xff0c;布局页面的 CSS也是一种标记语言 CSS主要用于设置HTML页面中的文本内容&#xff08;字体&#xff0c;大小&#xff0c;对齐方式等&#xff09;、图片的外形&#xff08;宽高、边框样式…...

【等保】安徽省等保测评机构名单看这里!

随着互联网技术的飞速发展&#xff0c;网络安全已成为国家安全、社会稳定的重要保障&#xff0c;因此我们严格贯彻落实等保政策。等保测评机构在等保制度执行过程中发挥着重要的作用。现在我们就来看看安徽省等保测评机构有哪些&#xff1f; 【等保】安徽省等保测评机构名单看…...

学习IO的第八天

作业&#xff1a;使用信号灯循环输出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-日志模块的简单使用方法

扩展阅读&#xff1a; Python-Django的“日志功能-日志模块(logging模块)-日志输出”的功能详解 现在有下面的Python代码&#xff1a; # -*- coding: utf-8 -*-def log_out_test(content_out):print(content_out)content1 "i love you01" log_out_test(content1)现…...

​argparse --- 命令行选项、参数和子命令解析器​

3.2 新版功能. 源代码&#xff1a; Lib/argparse.py 教程 此页面包含该 API 的参考信息。有关 Python 命令行解析更细致的介绍&#xff0c;请参阅 argparse 教程。 argparse 模块可以让人轻松编写用户友好的命令行接口。 程序定义它需要哪些参数&#xff0c;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 个城市&#xff0c;编号为 1 … N …...

fastadmin配置教程

第一. 打开小皮&#xff0c;创建一个网站 第二. 打开fastadmin官网&#xff0c;下载压缩包 下载好后是这个样子 打开网站的根目录&#xff0c;将这个压缩包压缩到你网站的根目录里 第三&#xff0c;小皮里面创建一个数据库 第四&#xff0c;然后打开网站&#xff0c;输入创…...

golang游戏服务器 - tgf系列课程01

TGF框架的特点和功能 课程介绍了TGF框架的特点和功能在第一节课程中我们并不会介绍框架的使用。我们希望在这节课程中,能让你了解到tgf是一个什么样的框架 概要 本节课程介绍了TGF框架的特点和功能。TGF是一个开箱即用的服务器框架, 适合中小型团队和独立开发者进行游戏开发。…...

react dom的diff理解及性能优化

diff的三大过程 当某个值变化时&#xff0c;他从根组件寻找 (key,state,props,context) 当父组件稳定时&#xff0c;react会跳过子组件的props的对比 只有当当前组件值改变时&#xff0c;从他开始&#xff0c;所有的子孙节点都会对比props props是全等比较&#xff0c;所以&am…...

【acwing】92. 递归实现指数型枚举

穿越隧道 递归枚举、位运算 方法① 从1到n&#xff0c;顺序访问每位数&#xff0c;是否选择&#xff0c;每位数有两种状态&#xff0c;选1或不选0. AC代码如下&#xff1a; #include <iostream> using namespace std;const int N 100; // bool st[N]; int n;void dfs(in…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...