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

dockerfile常用指令

Dockerfile常用指令
视频学习资料来源这里,点击本行文字即可跳转,讲的比较详细,不过比较老,跟最新的肯定是有一些差异的

Dockerfile官网文档的话点击这里
中文文档可以看看这个,不过没有详细的代码demo
或者是看这个
或者自行百度

注意docker使用的是分层设计,每一行Dockerfile都会有一个小镜像,在执行的时候如果指令没变,并且之前的镜像已经生成成功了,那么使用的是之前的缓存镜像,构建镜像时使用 --no-cache 参数。

docker build --no-cache -t xxxxxxx

在这里插入图片描述

构建一个你自己的Dockerfile

// 到虚拟机你的用户目录或者root目录下,创建/编辑Dockerfile文件
vim Dockerfile// 写入以下内容,注意Dockerfile指令的关键字必须大写
FROM centos:7// 构建一个镜像 -t代表你要构建的镜像仓库/名字和版本号
// 注意,运行的时候会把你当前所在目录的全部文件,都打包成镜像,所以执行的时候,最好目录中只存放了你需要打包的内容
// 注意,最后有一个点
docker build -t mycentos7:01 .

可以看到镜像构建成功了

在这里插入图片描述

运行的时候直接进入容器

// 例如你要运行centos容器
docker run -it centos:7

使用RUN指令,例如我要构建镜像的时候,当镜像启动的时候执行一些命令

// 例如我要打包镜像的时候,当镜像启动的时候执行一些命令
// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim// 构建的时候,会给你的镜像下载vim,注意后面有一个点
docker build -t mycentos7:02 .---------------华丽的分割线-----------
// 例如我要打包镜像的时候,当镜像启动的时候执行一些命令,看到echo大家应该很熟悉了,这里可以写shell脚本
// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出,注意指令发生变化,不会加载原先的docker镜像,会从新下载
FROM centos:7
RUN echo helloWord
RUN yum install -y vim
# 也可以使用这种书写格式,放个数组进去执行
# RUN["yum","install","-y","vim"]// 构建的时候,会给你的镜像下载vim,注意后面有一个点
docker build -t mycentos7:03 .

使用EXPOSE指令

// 例如我要打包镜像的时候,当镜像启动的时候执行一些命令 && 声明运行容器使用的端口,EXPOSE可以配置多个
// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672

使用WORKDIR指令(设置工作目录)

// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
# 创建镜像的工作路径
WORKDIR /data
# 可以使用多个WORKDIR,不加/是相对路径,会在/data下新建一个test目录
WORKDIR test

使用ADD 或者 COPY命令(拷贝文件)
在这里插入图片描述

// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
# 创建镜像的工作路径
WORKDIR /data
# 可以使用多个WORKDIR,不加/是相对路径,会在/data下新建一个test目录
WORKDIR test
# COPY 后面可以跟相对路劲和绝对路劲,以下写法是将虚拟机中的相对路径的test.txt拷贝到镜像的绝对路径/data/test中
COPY test.txt /data/test---------华丽的分割线 ADD指令----------
// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
# 创建镜像的工作路径
WORKDIR /data
# 可以使用多个WORKDIR,不加/是相对路径,会在/data下新建一个test目录
WORKDIR test
# COPY 后面可以跟相对路劲和绝对路劲,以下写法是将虚拟机中的相对路径的test2.txt拷贝到镜像的绝对路径/data/test中
ADD test2.txt /data/test---------华丽的分割线 ADD后面跟URL(COPY是不可以的)----------
// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
# 创建镜像的工作路径
WORKDIR /data
# 可以使用多个WORKDIR,不加/是相对路径,会在/data下新建一个test目录
WORKDIR test
# COPY 后面可以跟相对路劲和绝对路劲
# 以下写法是将网络资源【URL这里是下载的网络资源地址】拷贝到镜像的绝对路径/data/test中
# 注意,这里如果下的是压缩包,是不会解压的
ADD URL /data/test---------华丽的分割线 ADD后面带压缩包,可以解压到镜像----------
// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
# 创建镜像的工作路径
WORKDIR /data
# 可以使用多个WORKDIR,不加/是相对路径,会在/data下新建一个test目录
WORKDIR test
# COPY 后面可以跟相对路劲和绝对路劲
# 以下写法是将压缩包文件解压拷贝到镜像的绝对路径/data/test中
# 注意,这里拷贝进去的是解压的文件了
# xxx是你的压缩包文件
ADD xxx /data/test---------华丽的分割线 ADD后面带压缩包,解压到镜像,改名字----------
// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
# 创建镜像的工作路径
WORKDIR /data
# 可以使用多个WORKDIR,不加/是相对路径,会在/data下新建一个test目录
WORKDIR test
# COPY 后面可以跟相对路劲和绝对路劲
# 以下写法是将压缩包文件解压拷贝到镜像的绝对路径/data/test中
# 注意,这里拷贝进去的是解压的文件了
# xxx是你的压缩包文件
ADD xxx /data/test
# RUN mv 文件名字 要移动的文件目录
# xxx是文件名字,文件目录是testMv
RUN mv xxx testMv---------华丽的分割线 ADD后面带压缩包,解压到镜像,改名字----------
// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
# 创建镜像的工作路径
WORKDIR /data
# 可以使用多个WORKDIR,不加/是相对路径,会在/data下新建一个test目录
WORKDIR test
# COPY 后面可以跟相对路劲和绝对路劲
# 以下写法是将压缩包文件解压拷贝到镜像的绝对路径/data/test中
# 注意,这里拷贝进去的是解压的文件了
# apache-tomcat-8.5.61.tar.gz是你的压缩文件
ADD apache-tomcat-8.5.61.tar.gz /data/test
# RUN mv 文件名字 要移动的文件目录
RUN mv apache-tomcat-8.5.61.tar.gz tomcat
# 进入镜像的时候直接到tomcat工作目录中
WORKDIR tomcat

使用VOLUME指令

// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
WORKDIR /data
WORKDIR test
ADD apache-tomcat-8.5.61.tar.gz /data/test
RUN mv apache-tomcat-8.5.61.tar.gz tomcat
WORKDIR tomcat
# 哪个目录允许挂载出来到宿主机,例如/data/test可以挂载
VOLUME /data/test// 执行构建指令,注意有个点
docker build -t mycentos:07 .// 执行挂载数据卷这里的路劲是我的,要替换成你们的
// -v 你宿主机的绝对路径:容器内部的绝对路径,注意路劲一定要写对不然挂不上
docker run -it -v /root/home/dockerFileVolume:/data/test

使用ENV指令,定义环境变量

// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
# 环境变量可以是key value,也可以是key:value
ENV BASE_DIR /data/test
WORKDIR /data
WORKDIR test
ADD apache-tomcat-8.5.61.tar.gz /data/test
RUN mv apache-tomcat-8.5.61.tar.gz tomcat
WORKDIR tomcat
# 需要加$
VOLUME $BASE_DIR

使用ENTRYPOINT和CMD指令,指定容器启动之后运行的指令

CMD指令和ENTRYPOINT指令的区别,CMD指令会被覆盖不用加参数,ENTRYPOINT需要加--entrypoint

// 注意:ENTRYPOINT 可以写多个
// 创建一个文件
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
# 环境变量可以是key value,也可以是key:value
ENV BASE_DIR /data/test
WORKDIR /data
WORKDIR test
ADD apache-tomcat-8.5.61.tar.gz /data/test
RUN mv apache-tomcat-8.5.61.tar.gz tomcat
WORKDIR tomcat
# 需要加$
VOLUME $BASE_DIR
# 容器运行起来查看一下目录之下有哪些文件
ENTRYPOINT ls $BASE_DIR
# 容器起来之后查看某个文件,xxx是你的文件,可以看到ENTRYPOINT 后面跟的是linux指令
ENTRYPOINT tail -f xxx----------华丽的分割线----------// 注意:CMD可以写多个
vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
# 环境变量可以是key value,也可以是key:value
ENV BASE_DIR /data/test
WORKDIR /data
WORKDIR test
ADD apache-tomcat-8.5.61.tar.gz /data/test
RUN mv apache-tomcat-8.5.61.tar.gz tomcat
WORKDIR tomcat
# 需要加$
VOLUME $BASE_DIR
CMD ls $BASE_DIR----------华丽的分割线----------
// 上面的这个CMD指令可以被覆盖,例如run的时候,执行以下echo,那么原先里面的CMD指令就被覆盖了
docker run mycentos7:001 echo "hell word"----------华丽的分割线----------
// ENTRYPOINT覆盖
docker run --entrypoint=ls mycentos7:001 $BASE_DIR

ENTRYPOINT和CMD可以配合使用,但是必须指定json的数据结构 ENTRYPOINT指定shell脚本 CMD指定参数

vim Dockerfile// 写入以下内容,写完之后保存退出
FROM centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
# 环境变量可以是key value,也可以是key:value
ENV BASE_DIR /data/test
WORKDIR /data
WORKDIR test
ADD apache-tomcat-8.5.61.tar.gz /data/test
RUN mv apache-tomcat-8.5.61.tar.gz tomcat
WORKDIR tomcat
VOLUME $BASE_DIR
# 这俩配合使用,CMD给ENTRYPOINT传递参数
ENTRYPOINT ["ls","/data"]
CMD ["/data/test"]
# 也可以这么使用,ENTRYPOINT里面写一些指令,然后CMD里面写灵活的脚本
# ENTRYPOINT ["ls"]
# CMD ["/data/test"]
# 比如动态的修改运行的jar包,run的时候写上你的jar名字
# ENTRYPOINT ["java","-jar"]
# CMD ["test.jar"]

相关文章:

dockerfile常用指令

Dockerfile常用指令 视频学习资料来源这里,点击本行文字即可跳转,讲的比较详细,不过比较老,跟最新的肯定是有一些差异的 Dockerfile官网文档的话点击这里 中文文档可以看看这个,不过没有详细的代码demo 或者是看这个 或…...

Matlab/simulink与dsp28335联合开发教程

一.入门篇(开发环境搭建) 1.1 Code Composer Studio 软件安装1.2 MATLAB 软件安装1.3 Control_SUIT3.4 软件安装1.4 C2000 Simulink 开发工具箱安装1.5 Visual_Studio_Professional 二. 基础篇(片内外设使用) 2.1 G…...

新项目搞完啦!!!

大家好,我是鱼皮。 经过了 7 场直播,总时长近 20 小时,我在 自己的编程导航 的第 5 个 全程直播开发 的项目 —— 智能 BI 项目,完结啦! 我在这里对该项目做一个简单的总结,希望让更多需要它的同学看到&am…...

分享一个可交互的小场景(二)

先看效果&#xff1a; 可互动的小场景 再看代码&#xff1a; JS部分 <script>var rotateDiv document.getElementById(rot);var rotateIcons document.getElementById(rot-icons);var clickRotateDiv document.getElementById(click-rot);var angle 0;clickRotateDi…...

2.5 DNS 应用 -- 1. DNS 概述

2.5 DNS 应用 -- 1. DNS 概述 DNS&#xff1a;Domain Name SystemDNS分布式层次式数据库DNS根域名服务器TLD和权威域名解析服务器本地域名解析服务器 DNS 查询迭代查询递归查询 DNS记录缓存和更新 DNS&#xff1a;Domain Name System Internet上主机/路由器的识别问题 IP地址域…...

基于STM32麦克风阵列音频信号处理系统设计

v hezkz17进数字音频系统研究开发交流答疑 附录: ADAU1452音频处理系统...

《重构》:Extract Class and Inline Class

hey&#xff0c;gays lets go on to refator those sh!t . i fork a rep, this the link GitHub - TIMPICKLE/refator-code: 重构 - 改善既有代码的设计 all right, lets see the genel description. 提取类 对立&#xff1a;内联类 目的&#xff1a;将大类分成小类 场景&a…...

腾讯云对象存储联合DataBend云数仓打通数据湖和数据仓库

随着数字化进程不断深入&#xff0c;数据呈大规模、多样性的爆发式增长。为满足更多样、更复杂的业务数据处理分析的诉求&#xff0c;湖仓一体应运而生。在Gartner发布的《Hype Cycle for Data Management 2021》中&#xff0c;湖仓一体&#xff08;Lake house&#xff09;首次…...

ExceptionLess windows部署。

前言 windows部署 1、一个api项目&#xff0c;里面包含了所有api。 2、一个elasticsearch项目&#xff0c;用来存储相关数据。 3、一个UI项目&#xff0c;也就是查看异常、设置新异常邮件通知等操作的后台。 异常在客户端提交的代码原理&#xff1a;一个异常被提交&#xff0c;…...

使用python实现1DCNN-GRU回归预测

要实现1DCNN-GRU进行回归预测&#xff0c;您可以使用以下Python代码作为参考&#xff1a; 首先&#xff0c;导入所需的库&#xff1a; import numpy as np import tensorflow as tf from tensorflow.keras.layers import Conv1D, MaxPooling1D, GlobalAveragePooling1D, GRU,…...

移动端数据可视化设计

在做APP设计的时候&#xff0c;难免会遇到一些需要展示数据的场景。使用传统的表格和文档展示数据不仅难看&#xff0c;也影响用户理解数据的含义。而数据可视化设计能将数据以更加直观的方式展现出来&#xff0c;使数据更加客观、更有说服力。 在移动应用中&#xff0c;数据可…...

Linux文件系统概述

本文已收录至《Linux知识与编程》专栏&#xff01; 作者&#xff1a;ARMCSKGT 演示环境&#xff1a;CentOS 7 文件系统概述 前言正文文件与磁盘磁盘介绍与机械硬盘机械硬盘基础结构机械硬盘数据存储与管理 文件操作的细节创建文件访问文件删除文件恢复文件其他情况 最后 前言 …...

go专业数据结构与算法

go语言之专业数据结构与算法 2.数组概念 3.golang实现数组结构 4.golang实现数组迭代器 5.数组栈的高级实现 6.栈模拟低级递归 7.斐波那契数列栈模拟递归 8.递归实现文件夹遍历 9.栈模拟文件递归 10.层级展示文件夹 11.数组队列的实现 12.队列实现遍历文件夹 13.循环队列 14.链…...

Hive on Spark的小文件设置参数

Hive on Spark的小文件设置参数 参数调优 了解完了Spark作业运行的基本原理之后&#xff0c;对资源相关的参数就容易理解了。所谓的Spark资源参数调优&#xff0c;其实主要就是对Spark运行过程中各个使用资源的地方&#xff0c;通过调节各种参数&#xff0c;来优化资源使用的效…...

高级SQL语句

目录 MySQL 高级(进阶) SQL 语句函数数学函数&#xff1a;聚合函数字符串函数&#xff1a; 连接查询inner join(内连接)&#xff1a;left join(左连接)&#xff1a;right join(右连接)&#xff1a; CREATE VIEW&#xff08;视图&#xff09;UNION&#xff08;联集&#xff09;C…...

IDE /skipping incompatible xxx_d.dll when searching for -lxxx_d

文章目录 概述场景复现用以测试的代码编译器位数不匹配导致?保持编译器类型一致再验证编译器位数的影响MingW下调用OS的库咋不告警?以mingW下使用winSocket为例MingW下网络编程的头文件分析该环境下链接的ws2_32库文件在哪里&#xff1f;mingW为啥可以兼容window下的动态库 概…...

C语言学习准备-编辑器选择

今天继续给大家更新C语言经典案例 今天的案例会比昨天稍微有一些难度&#xff0c;但是同时还是非常经典的案例 本来是想给大家继续更新C语言经典案例&#xff0c;但是有朋友反应C语言编辑器的选择&#xff0c;刚好我自己也是想更换一下C语言的编辑器&#xff0c;跟大家分享一下…...

微信为什么使用 SQLite 保存聊天记录?

概要 SQLite 是一个被大家低估的数据库&#xff0c;但有些人认为它是一个不适合生产环境使用的玩具数据库。事实上&#xff0c;SQLite 是一个非常可靠的数据库&#xff0c;它可以处理 TB 级的数据&#xff0c;但它没有网络层。接下来&#xff0c;本文将与大家共同探讨 SQLite 在…...

VB串口通讯方式解释

目前,Visual Basic (简称VB) 已成为WINDOWS 系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。VB 支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件。在VB 应用程序中可以方便地调用WINDOWS API函数…...

Mybatis-Plus不能更新对象字段为空值问题解决

问题描述&#xff1a; 在使用Mybatis-Plus调用updateById方法进行数据更新默认情况下是不能更新空值字段的&#xff0c;而在实际开发过程中&#xff0c;往往会遇到需要将字段值更新为空值的情况&#xff0c;该如何解决呢&#xff1f; 原因分析&#xff1a; Mybatis-Plus中字…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...