湘潭哪里做网站/百度信息流代运营
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…...

【面试】Java最新面试题资深开发-分布式系统中的CAP理论
问题六:分布式系统中的CAP理论 分布式系统的设计涉及到CAP理论,即一致性(Consistency)、可用性(Availability)、分区容忍性(Partition Tolerance)。请解释一下CAP理论是什么&#x…...

Windows下使用CMD修改本地IP
在网络适配器界面查看当前网线连接的哪个网口,我当前连的是 以太网 这个名字的: 在windows下使用管理员权限打开CMD命令工具,输入如下命令(如我想本地ip改成192.168.2.4): netsh interface ip set address "以太网" st…...

20231211-DISM++安装win10-22h2-oct
20231211-DISM安装win10-22h2-oct 一、软件环境 zh-cn_windows_10_consumer_editions_version_22h2_updated_oct_2023_x64_dvd_eb811ccc.isowepe x64 v2.3标签:win10 22h2 wepe dism分栏:WINDOWS 二、硬件环境 8G或以上的有PE功能的启动U盘一个台式机…...

前端知识笔记(五)———前端密钥怎么存储,才最安全?
前端密钥存储安全是非常重要的,具体原因如下: 保护敏感数据:密钥用于保护敏感数据的安全性。如果密钥泄露,攻击者可能能够访问和篡改敏感数据,导致数据泄露、数据被篡改或系统被入侵。 防止恶意使用:在前端…...

【智能家居】智能家居项目
智能家居项目目录 项目目录结构 完整而典型的项目目录结构 CMake模板 CMake编译运行 README.md 项目说明文档 智能家居项目目录 【智能家居】面向对象编程OOP和设计模式(工厂模式) 【智能家居】一、工厂模式实现继电器灯控制 【智能家居】二、添加火灾检测模块(…...

在AWS Lambda上部署标准FFmpeg工具——Docker方案
大纲 1 确定Lambda运行时环境1.1 Lambda系统、镜像、内核版本1.2 运行时1.2.1 Python1.2.2 Java 2 启动EC23 编写调用FFmpeg的代码4 生成docker镜像4.1 安装和启动Docker服务4.2 编写Dockerfile脚本4.3 生成镜像 5 推送镜像5.1 创建存储库5.2 给EC2赋予角色5.2.1 创建策略5.2.2…...

C#网络应用程序(Web页面浏览器、局域网聊天程序)
目录 一、创建Web页面浏览器 1.示例源码 2.生成效果 二、局域网聊天程序 1.类 2.服务器端 3.客户端 一、创建Web页面浏览器 TextBox 控件用来输入要浏览的网页地址,Button控件用来执行浏览网页操作, WebBrowser控件用来显示要浏览的网页。这个控…...

MacOS 14挂载NTFS 硬盘的最佳方式(免费)
categories: [Tips] tags: MacOS 写在前面 众所周知, MacOS 上面插入 NTFS磁盘格式的话, 磁盘可以向 Mac 写入数据, 但是 Mac 上的数据不能写入磁盘(这是因为 MacOS 的内核扩展禁用了 NTFS 这个格式, 可能是出于安全性或其他原因) 之前一直是使用某 pojie 的 NTFS 工具的, 虽然…...

SpringAOP专栏二《原理篇》
上一篇SpringAOP专栏一《使用教程篇》-CSDN博客介绍了SpringAop如何使用,这一篇文章就会介绍Spring AOP 的底层实现原理,并通过源代码解析来详细阐述其实现过程。 前言 Spring AOP 的实现原理是基于动态代理和字节码操作的。不了解动态代理和字节码操作…...

冒泡排序(函数)
冒泡排序,将一个列表中的两个元素进行比较,并将最小的元素交换到顶部。两个元素中较小的会冒到顶部,而较大的会沉到底部,该过程将被重复执行,直到所有元素都被排序。 输入格式: 输入在第1行中给出N(1<N…...