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

Docker镜像制作

目录

Dockfile是什么

构建镜像的三个步骤

dockerfile内容基础知识

docker执行一个Dockerfile脚本的大致流程

Dockerfile指令

FROM

MAINTAINER

RUN

EXPOSE

WORKDIR

ENV

ADD

COPY

VOLUME

USER

ONBUILD

CMD

ENTRYPOINT

CMD和ENTRYPOINT区别

构建dockerfile

Dockfile是什么

含义:其是用来构建docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本

构建镜像的三个步骤

  1. 编写Dockerfile文件
  2. docker build命令构建镜像
  3. docker run依照镜像运行容器实例

dockerfile内容基础知识

  • 每条保留字指令都必须为大写字母且后面要跟至少一个参数
  • 指令按照从上到下顺序执行
  • #表示注释
  • 每条指令都会创建一个新的镜像层并对镜像进行提交

docker执行一个Dockerfile脚本的大致流程

  • docker从基础镜像运行一个容器
  • 执行一条指令对容器做出修改
  • 执行类似与docker commit的操作提交一个新的镜像层
  • docker再基于刚刚提交的镜像运行一个新容器
  • 执行Dockerfile中的下一条指令直到所有的指令都执行完

Dockerfile指令

FROM

前言:

  • Dockerfile中的第一条指令必须是FROM命令,指定使用的基础镜像(基础环境)
  • Docker Hub中99%的镜像都是从scratch这个基础镜像过来的,也就是FROM后面的参数不知道写什么就写scratch

语法:FROM 基础镜像 

若在同一个Dockerfile中构建多个镜像,可以使用很多FROM命令

FROM <image>
FROM <image>:<tag>

MAINTAINER

前言:用于指定生成镜像的作者名称

语法:MAINTAINER <name>

RUN

作用:基于该镜像环境下执行命令,并提交到该镜像

语法:RUN <command>

FROM nginx:latest
RUN apt-get update
RUN apt-get install -y iproute2
RUN apt-get install -y net-tools
RUN apt-get install -y iputils-ping
EXPOSE 80

如上就是为nginx镜像添加功能使用的

注意:

  • 多行命令不要写多个RUN(不要在意上面)原因是Dockerfile中的每一个指令都会建立一层。多个RUN就会构建多层镜像,会造成镜像臃肿,多层,不仅增加了部署时间,还易出错
  • linux内一行执行多个命令:command1;conmand2;……
  • RUN书写时换行符为\

EXPOSE

作用:对外暴露该容器开放的端口

语法:EXPOSE 端口号

注意:Dockerfile中的EXPOSE仅仅是标记信息,并不能真正打开端口,仅仅是为了增加可读性。完全可以省略

WORKDIR

作用: 

  • 指定创建容器后,默认进入容器的路径,也就是进入容器的落脚点在哪(不写则在根目录)
  • 为Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY、ADD设定工作目录(就是下载东西存在哪)

语法:WORKDIR 容器内路径

ENV

作用:用于设定docker容器内的环境变量供以后使用。

语法:ENV 环境变量名 环境变量值

注意:设置好环境变脸后就可以在后面复用了,复用方式$环境变量名

ADD

作用:将宿主机目录下的文件拷贝至镜像,且ADD命令会自动处理URL和解压tar压缩包

语法:ADD 宿主机的文件/目录 镜像目录

COPY

作用:将主机的目录或文件拷贝至镜像中,但是相对于ADD来说不会解压缩

语法:COPY 宿主机的文件/目录 镜像目录

VOLUME

作用:挂载数据卷,将宿主机的目录和容器中的目录实现挂载,可实现持久化作用

语法:VOLUME ["容器中挂载路径1","容器中挂载路径2"……]

注意:

  • 有了这个参数和docker run的-v参数都可以实现启动容器就挂载目录的目的
  • 该种挂载方式为匿名挂载,既然为挂载,那么在容器中有,那么在容器外也有,对应的容器外目录查看用命令:docker inspect 容器id来查看
  • 其作用相当于启动容器的-v参数,在-v参数中也可以修改上面的挂载路径(前提是-v参数的容器路径与volume参数的容器路径相同,若不同则再次追加一个挂载路径)

USER

作用:指定运行容器时的用户和用户组

语法:USER 用户名

注意:

  • 默认情况下容器运行的身份为root用户
  • 指定运行的用户必须该用户在linux宿主机内存在,不然打不开容器

ONBUILD

作用:当构建一个被继承的Dockerfile时运行的命令,父镜像在被子继承后父镜像的onbuild被触发

语法:ONBUILD 具体指令

理解:

  • Dockerfile里用ONBUILD指定的命令,在本次镜像构建过程中并不会被执行(假设构建后的镜像为test-build)。当有新的Dockerfile使用了之前构建的test-build(FROM test-build),这时执行镜像的Dockerfile构建时,会执行test-build的Dockerfile里的ONBUILD命令
  • ONBUILD是一个特殊指令,他后面根其他指令,如RUN、COPY等,并不仅仅是一个命令
  • Dockerfile中的其他指令都是为了构建当前镜像准备的,只有ONBUILD指令是为了帮助别人定制而准备的
  • 举例:ONBUILD RUN mkdir test

CMD

作用:指定一个容器启动时要运行的命令

语法1:CMD command param1 param2

语法2:CMD ["要运行的程序","参数1",“参数2”]

注意:Dockerfile文件中只能执行一条CMD命令,若写多条,那么只有最后一个CMD命令被执行

ENTRYPOINT

作用:指定一个容器启动时要运行的命令

语法1:ENTRYPOINT command param1 param2

语法2:ENTRYPOINT ["要运行的程序","参数1",“参数2”]

注意:Dockerfile文件中只能执行一条ENTRYPOINT命令,若写多条,那么只有最后一个ENTRYPOINT命令被执行。

CMD和ENTRYPOINT区别

dockerfile1文件

FROM centos
CMD ["ls","-a"]或ENTRYPOINT ["ls","-a"]

构建镜像:docker build -f dockerfile1 -t cmdtest . 

执行:docker run cmdtest 

结果:用CMD的启动之后就执行ls -a命令,但是在后面加-l(docker run cmdtest -l)就会报错,

用ENTRYPOINT的启动之后就执行ls -a命令,但是在后面加-l就会追加-l(在命令台输入的命令就为cmd命令)

构建dockerfile

需求:为centos加vim与net-tools插件与jdk8

编辑Dockerfile文件:vim Dockerfile1

这里我写的dockerfile名为Dockerfile1 

#centos作为基础镜像
FROM centos:7
#书写具体的个人信息
MAINTAINER cjc<1111111111@qq.com>
#配置环境(键值对形式)
ENV MYPATH /usr/local
#配置工作目录,进入容器后就会自动进入该目录
WORKDIR $MYPATH
#基于以上镜像执行命令并提交到新镜像中
RUN yum -y install vim
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#将源文件复制到目标文件
ADD jdk-8u51-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_51
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH JAVA_HOME/bin:$PATH
#暴露端口80
EXPOSE 80
#执行启动容器时要运行的脚本
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash

构建镜像:docker build -f Dockerfile1 -t centosadd:1.0 .

注意:

  • -f 具体路径的Dockerfile文件名:表示构建镜像的dockerfile的名字(该参数也可以省略,但是Dockerfile名字必须为Dockerfile)
  • -t 镜像名:表示新构建镜像的名字(这个名字用小写)
  • 最后的“.”必须存在,他表示在当前文件夹下构建

相关文章:

Docker镜像制作

目录 Dockfile是什么 构建镜像的三个步骤 dockerfile内容基础知识 docker执行一个Dockerfile脚本的大致流程 Dockerfile指令 FROM MAINTAINER RUN EXPOSE WORKDIR ENV ADD COPY VOLUME USER ONBUILD CMD ENTRYPOINT CMD和ENTRYPOINT区别 构建dockerfile Do…...

v-on 可以监听多个方法吗?

目录 ​编辑 前言&#xff1a;Vue 3 中的 v-on 指令 详解&#xff1a;v-on 指令的基本概念 用法&#xff1a;v-on 指令监听多个方法 解析&#xff1a;v-on 指令的优势和局限性 优势 局限性 **v-on 指令的最佳实践** - **适度监听**&#xff1a; - **方法抽离**&#x…...

【Docker】Docker Compose的使用

我们知道使用一个Dockerfile模板文件&#xff0c;可以让用户很方便的定义⼀个单独的应用容器。然而&#xff0c;在日常工作中&#xff0c;经常会碰到需要多个容器相互配合来完成某项任务的情况。 例如要实现一个Web项目&#xff0c;除了Web服务容器本身&#xff0c;往往还需要…...

2023年中国调速器产量、销量及市场规模分析[图]

调速器行业是指生产、销售和维修各种调速器设备的行业。调速器是一种能够改变机械传动系统输出转速的装置&#xff0c;通过调整输入和输出的转速比来实现转速调节的功能。 调速器行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#xff09; 随着工业自动化程度…...

深入了解JVM调优:解锁Java应用程序性能的秘诀

文章目录 &#x1f34a; JVM调优&#x1f389; 增大Eden 空间大小&#x1f389; 如果MinorGC 频繁&#xff0c;且容易引发 Full GC&#x1f4dd; S1 区大小 < MGC 存活的对象大小&#xff0c;对象的年龄才1岁&#x1f4dd; 相同年龄的对象所占总空间大小>s1区空间大小的一…...

[java进阶]——线程池的使用,自定义线程池

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、线程池的存在意义 二、线程池的使用 2.1线程池的核心原理 2.2线程池的代码实现 三、自定义线程池 3.1线程池的参数详解 3.2线程池的执行原理 3.3灵魂两问 3.4线程池多大合适 3.5拒绝策略 一、线程池…...

Linux 进程切换与命令行参数

假设进程1现在要切走了&#xff0c;切入进程2.那进程1就要先保存数据&#xff0c;方便以后恢复&#xff0c; 然后进程2再切走&#xff0c;进程1再把数据还原&#xff1a; 操作系统又分为实时操作系统和分时操作系统。 实时操作系统是是给操作系统一个进程&#xff0c;操作系统…...

Python基础入门例程6-NP6 牛牛的小数输出

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 示例1 解答&#xff1a; 说明&#xff1a; 描述 牛牛正在学习Python的输出&#xff0c;他想要使用print函数控制小数的位数&#xff0c;你能帮助它把所有读入的数据都保留两位小数输出吗&#xff1f; 输入描述&a…...

传奇游戏常见问题解决办法

GEE合区出现错误常规解决方案 GEE合区出现错误大部分因数据库损坏导致的合区报错&#xff0c;如果合区提示内存不足&#xff0c;更新64位合区&#xff0c;使用64位合区工具在服务器上进行合并&#xff0c;合区需要将2个区数据大部分提取到内存中&#xff0c;32位合区工具支持内…...

2310D的dll问题

原文 我正在开发一个游戏引擎,偶然发现了一些空针问题. 考虑此简单程序: class Test {void doIt(){} } void main() {Test t;t.doIt(); }它编译,然后在Linux上使用DMD时,用11信号干掉了. 如果使用Java,甚至不会构建该程序,因为它会失败,说明从未初化它. 但我不关心分析器,我宁…...

包管理工具

代码共享方案 放到npm仓库&#xff0c;下载到本地放到node_modules npm配置文件 必须填写的属性&#xff1a;name、version name是项目的名称&#xff1b; version是当前项目的版本号&#xff1b; description是描述信息&#xff0c;很多时候是作为项目的基本描述&#xff1b…...

Qt第六十五章:自定义菜单栏的隐藏、弹出

目录 一、效果图 二、qtDesigner 三、ui文件如下&#xff1a; 四、代码 一、效果图 二、qtDesigner 原理是利用属性动画来控制QFrame的minimumWidth属性。 ①先拖出相应的控件 ②布局一下 ③填上一些样式 相关QSS background-color: rgb(238, 242, 255); border:2px sol…...

element table中嵌套el-select 无法选择问题

<el-table-column align"left" label"姓名" show-overflow-tooltip :key"tableKey"><template slot-scope"scope"><el-select placeholder"请选择" :disabled"!saveButton" v-model"scope.ro…...

2.6.C++项目:网络版五子棋对战之数据管理模块-游戏房间管理模块的设计

文章目录 一、意义二、功能三、作用四、游戏房间类基本框架五、游戏房间管理类基本框架七、游戏房间类代码八、游戏房间管理类代码 一、意义 对匹配成功的玩家创建房间&#xff0c;建立起一个小范围的玩家之间的关联关系&#xff01; 房间里一个玩家产生的动作将会广播给房间里…...

计算机视觉中的数据预处理与模型训练技巧总结

计算机视觉主要问题有图像分类、目标检测和图像分割等。针对图像分类任务&#xff0c;提升准确率的方法路线有两条&#xff0c;一个是模型的修改&#xff0c;另一个是各种数据处理和训练的技巧(tricks)。图像分类中的各种技巧对于目标检测、图像分割等任务也有很好的作用&#…...

GeoHash分享

写在前边 复制的一个内部分享&#xff0c;所以可能更偏向PPT性质&#xff0c;本文提出的问题&#xff0c;在末尾参考材料中都会有所提及&#xff0c;包括更深层次的实现原理和各大API对于GeoHash的优化。感兴趣的读者可以拓展看一下。 START GeoHash是一种地址编码&#xff…...

【超详细】CentOS 7安装MySQL 5.7【安装及密码配置、字符集配置、远程连接配置】

准备工作&#xff1a;CentOS 7系统&#xff0c;并确保可以联通网络 1、获取MySQL 5.7 Community Repository软件包 注意&#xff1a;这里使用的是root用户身份。 wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm2、安装软件包 rpm -ivh mysql5…...

Elasticsearch 8.X 分词插件版本更新不及时解决方案

1、关于 Elasticsearch 8.X IK 分词插件相关问题 球友在 ElasticSearch 版本选型问题中提及&#xff1a;如果要使用ik插件&#xff0c;是不是就使用目前最新的IK对应elasticsearch的版本“8.8.2”&#xff1f; https://github.com/medcl/elasticsearch-analysis-ik/releases/ta…...

Delete `␍`eslintprettier/prettier

将CRLF改为LF 然后就消失了 除此之外,也可以修改git全局配置 git config --global core.autocrlf false...

4种实用的制作URL 文件的方法

很多小伙伴有自己的博客、淘宝或者共享文件网站&#xff0c;想要分享、推广自己的网址做成url文件&#xff0c;让别人点击这个url文件直接访问自己的网站。URL文件其实就一个超级链接&#xff0c;制作的方法很多&#xff0c;这里列举4种。 收藏网站直接拖拽 1.第一种&#xf…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

Canal环境搭建并实现和ES数据同步

作者&#xff1a;田超凡 日期&#xff1a;2025年6月7日 Canal安装&#xff0c;启动端口11111、8082&#xff1a; 安装canal-deployer服务端&#xff1a; https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...