Dockerfile自定义制作镜像,其中10个指令的作用分析
docker容器中
做镜像是重要的技能。
docker commit只能制作比较简单的镜像,
要制作比较完善的镜像,
自定义程度比较高的,
就需要用到dockerfile
dockerfile可以回溯历史
动态生成镜像。
FROM是基础镜像
CMD是在容器创建的时候默认的启动命令
CMD是一个数组,是有固定的格式
每个参数是数组里面的元素
/bin/ls ==> CMD ["/bin/ls"]
/bin/ls -l -a ==> CMD ["/bin/ls","-l","-a"]
# ${ENTRYPOINT} 是命令
# ${@-${CMD}} 是参数
# ${@} 是所有的参数选项之和
# $1是第一个参数
# $2 是第二个参数
# ...
# $n 是第n个参数
# $@ 是所有的参数之和
# ${@-} 代表前面的变量没有设置
~]# echo ${AA} ~]# echo ${AA-abc}
abc
# 减号"-"后面代表,前面没有设置的时候,用这个参数
~]# AA=123
~]# echo ${AA-abc}
123
# 如果AA设置了,就用设置的值
~]# unset AA
~]# echo ${AA-abc}
abc
# 如果把AA设置的值删了,就用减号后面的值了
# 所以
# ${@-${CMD}的意思就是,如果设置参数了,就用参数,如果没有设置,就用CMD
# 这个CMD就是默认的启动参数,如果没有设置,就用CMD写的命令来启动
# ENTRYPOINT是,如果设置了,那么CMD就变成选项了。
# ENTRYPOINT一旦设置了就必须执行
~]# cat img1
#!/bin/bash
CMD="/bin/ls -l"
ENTRYPOINT="echo"
${ENTRYPOINT} ${@-${CMD}}
~]# ./img1
/bin/ls -l
~]# ./img1 id
id
# ENTRYPOINT设置成了echo命令,后面的CMD就变成了参数,被输出到屏幕
# 所以ENTRYPOINT设置了就必须执行
~]# cat myimg/Dockerfile
FROM mylinux:latest
ENTRYPOINT ["echo"]
CMD ["/bin/ls", "-l"]
# FROM ENTRYPOINT CMD这三个指令是dockerfile里面的核心指令
文件扩展名为
.tar
.tar.gz
.tar.bz2
.tar.xz
.tar.tgz
这些类型的文件
ADD指令会把这些文件包解压
COPY指令不会解压这些文件包
做镜像的时候,所有的文件都要放在做镜像的那个目录里面,也就是Dockerfile所在的目录里
| 指令 | 说明 |
| FROM | 指定基础镜像 |
| ENTRYPOINT | 默认容器的启动命令 |
| CMD | 有ENTRYPOINT时,CMD是启动参数;没有ENTRYPOINT时,CMD是启动命令; 可以容易被docker run 命令覆盖参数,比如:docker run myimage echo "Good!" |
| ADD | 把文件拷贝到容器内,并自动解压;容器联网,可下载文件比如 ADD http://www.abc.com/abc.tar /tmp/ |
| COPY | 把文件拷贝到容器内,不解压;容器联网,不能下载 |
| RUN | 在容器内执行命令,可以写多条,比如RUN touch file1RUN yum -y install nginx |
| USER | 在容器内切换用户,相当于sudo -u user |
| ENV | 设置环境变量,某些指令需要环境变量才能正确执行,比如etcdctl export ETCDCTL_API=3 |
| WORKDIR | 指定工作目录,有些任务需要,比如ansible、编译./configure |
| EXPOSE | 对外声明容器将要使用的端口号和协议,方便健康检测程序进行检测 |
WORKDIR的用法,比如
RUN touch f1
WORKDIR /tmp
RUN touch f2 # 在/tmp目录下创建f2文件
#通过Dockerfile里面的WORKDIR,也可以知悉软件装在哪了,比如源码编译安装的nginx, WORKDIR /usr/local/nginx
ENTRYPOINT和CMD的单独用法,和结合用法:
-
只使用
CMD:CMD指定的命令将作为容器启动时的命令。- 如果用户没有通过
docker run指定其他命令,那么CMD指定的命令将被执行。
-
只使用
ENTRYPOINT:ENTRYPOINT指定的命令将作为容器启动时的主程序。- 如果用户没有通过
docker run指定其他命令,那么ENTRYPOINT指定的命令将被执行。 - 当你想定义一个不可轻易覆盖的主程序时,使用
ENTRYPOINT。 - 例如,一个数据库容器可能总是需要运行数据库服务,不允许用户轻易改变这一点。
ENTRYPOINT不容易被覆盖,除非使用--entrypoint显式指定。
-
结合使用
ENTRYPOINT和CMD:CMD指定的内容将成为ENTRYPOINT指定命令的参数。- 如果用户通过
docker run指定其他命令,这些命令将覆盖CMD指定的参数。
# apache镜像,用Dockerfile制作示例:
httpd]# cat Dockerfile
FROM mylinux:latest
RUN dnf -y install httpd php && dnf clean all
RUN sed -ri -e 's,^Load,#&,' -e 's,^#(.*mod_mpm_prefork.so)$,\1,' /etc/httpd/conf.modules.d/00-mpm.conf
ADD myweb.tar.gz /var/www/html/
ENV LANG=C
WORKDIR /var/www/html
EXPOSE 80/tcp
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]docker build -t httpd:latest httpd/ 相关文章:
Dockerfile自定义制作镜像,其中10个指令的作用分析
docker容器中 做镜像是重要的技能。 docker commit只能制作比较简单的镜像, 要制作比较完善的镜像, 自定义程度比较高的, 就需要用到dockerfile dockerfile可以回溯历史 动态生成镜像。 FROM是基础镜像 CMD是在容器创建的时候默认的启动命令 …...
Linux6-vi/vim
1.vi与vim vi是Linux操作系统下的标准编辑器,类似Windows下的记事本 vim是vi的升级版,包括vi的所有功能,而且支持shell 2.vi/vim下的三种模式 vi/vim有三种模式:命令模式,插入模式和底行模式 命令模式:…...
2012年408考研真题-数据结构
8.【2012统考真题】求整数n(n≥0)的阶乘的算法如下,其时间复杂度是()。 int fact(int n){ if(n<1) return 1; return n*fact (n-1); } A. O(log2n) B. O(n) C. O(nlog2n) D. O(n^2) 解析: 观察代码,我们不…...
【北京迅为】《STM32MP157开发板使用手册》- 第四十章 二值信号量实验
iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…...
Docker UI强大之处?
DockerUI是一款由国内开发者打造的优秀Docker可视化管理工具。它拥有简洁直观的用户界面,使得Docker主机管理、集群管理和任务编排变得轻松简单。DockerUI不仅能展示资源利用率、系统信息和更新日志,还提供了镜像管理功能,帮助用户高效清理中…...
前端面试题——token安全问题处理与大数据列表展示
1.长时间保存token问题 长时间保存Token涉及多个方面的问题,包括安全性、性能、以及Token的管理策略等。以下是对长时间保存Token问题的详细分析: 一、安全性问题 Token泄露风险: Token是用户身份验证的凭证,如果长时间保存且未…...
Flask项目入门和视图
1、第一个项目的结构 以示例代码中的入口文件app.py为例子 (1)引入Flask以及创建Flask对象 from flask import Flask app Flask(__name__)(2) 路由route 视图函数 app.route(/index/) def hello_world():# 响应:…...
深入理解Lucene:开源全文搜索引擎
目录 引言 Lucene的核心概念 索引 分析器 存储 Lucene的工作流程 创建索引 搜索索引 Lucene核心技术 倒排索引 排序算法 索引压缩与合并 并发控制与实时更新 结论 引言 随着互联网的飞速发展,信息量呈指数级增长,如何有效地管理和检索这些…...
Qt中pro项目文件配置介绍
Qt中,工程文件是以.pro后缀的文件,主要用以包含Qt模块,代码文件,依赖库,以及对项目的一些属性进行配置。 具体看个例子: #这块是添加Qt模块 #.pro文件中使用#号作为注释 QT core gui #QT webengine…...
相亲交友中的用户画像构建方法探讨
随着互联网技术的发展,相亲交友平台成为现代人寻找伴侣的重要渠道之一。在这一过程中,如何精准地为用户推荐合适的对象成为了平台能否成功的关键。本文旨在探讨相亲交友平台中用户画像的构建方法,并分析其对于提高匹配度的重要性(…...
总结
本来想把这个写完再写总结的,但是我发现卡了,明天去问问别人。 今天写上传个文件,没上传好,找到问题了,但是还不知道怎么改,我发给前端成功了,刚刚看了下好像是这里的问题,但是不是…...
C# 开发教程-入门基础
1.C# 简介、环境,程序结构 2.C# 基本语法,变量,控制局域,数据类型,类型转换 3.C# 数组、 循环,Linq 4.C# 类,封装,方法 5.C# 枚举、字符串 6.C# 面相对象,继承࿰…...
Windows上,使用远程桌面连接Ubuntu
要在 Ubuntu 上设置公网 IP 并通过 Windows 远程桌面连接到 Ubuntu,你需要完成以下步骤: 设置 Ubuntu 公网 IP: 确保你的 Ubuntu 服务器已经配置了一个公网 IP 地址。 你可以通过云服务提供商(如 AWS、Azure、Google Cloud&#…...
SharePoint Online 计划 1 部署方案
概述 SharePoint Online 是 Microsoft 365 的一部分,为组织提供了一种高效、灵活的协作平台。SharePoint Online 计划 1(Plan 1)尤其适用于中小型企业,提供了基本的文档管理和协作功能。本文将详细介绍如何部署 SharePoint Online 计划 1,并探讨其配置、管理和最佳实践。…...
kubernetes存储之GlusterFS(GlusterFS for Kubernetes Storage)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...
网络安全等保培训 ppt
网络安全等级保护怎么做?...
开关磁阻电机(SRM)系统的matlab性能仿真与分析
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 SRM的基本结构 4.2 SRM的电磁关系 4.3 SRM的输出力矩 5.完整工程文件 1.课题概述 开关磁阻电机(SRM)系统的matlab性能仿真与分析,对比平均转矩vs相电流,转矩脉动vs相电流&a…...
最新动态一致的文生视频大模型FancyVideo部署
FancyVideo是一个由360AI团队和中山大学联合开发并开源的视频生成模型。 FancyVideo的创新之处在于它能够实现帧特定的文本指导,使得生成的视频既动态又具有一致性。 FancyVideo模型通过精心设计的跨帧文本引导模块(Cross-frame Textual Guidance Modu…...
茴香豆:企业级知识问答工具实践闯关任务
基础任务 在 InternStudio 中利用 Internlm2-7b 搭建标准版茴香豆知识助手,并使用 Gradio 界面完成 2 轮问答(问题不可与教程重复,作业截图需包括 gradio 界面问题和茴香豆回答)。知识库可根据根据自己工作、学习或感兴趣的内容调…...
英飞凌 PSoC6 RT-Thread 评估板简介
概述 2023年,英飞凌(Infineon)联合 RT-Thread 发布了一款 PSoC™ 62 with CAPSENSE™ evaluation kit 开发板 (以下简称 PSoC 6 RTT 开发板),该开发套件默认内置 RT-Thread 物联网操作系统。PSoC 6 RTT 开…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
