dockerfile常用指令

news2024/11/16 17:31:03

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"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3. 日志模块(下)

在日志模块的上篇中,我们详细拆解了 MyBatis 是如何整合第三方日志框架,实现了完善的日志功能的。那么在本节中,我们再来具体分析下:为了实现“将日志功能优雅地嵌入到核心流程中,实现无侵入式地日志打印”这一目标&am…

菜谱APP项目实战,可以魔改任意APP——前后端齐全

菜谱APP开发实战(可改任意APP) 1. 优点 多平台性 由于此APP开发的时候采用的是 uni-app 来开发的,所以说它可以打包成多种形态,在各种平台上进行使用。比如:微信、支付宝等各种小程序。当然也是可以打包成安卓APP&am…

如何学习 Midjourney 绘画,AI绘图

Midjourney 是至今为止最好的 AI 绘图工具,SD还是差了很多。 要用当然用最好的,为了绘制出更符合心意的图,我开始 Midjourney 的学习。 从各种渠道寻找相关的资料,国内国外,或者星球,或者群聊&#xff0c…

简析住宅小区有序充电价格响应的电动汽车有充电策略

安科瑞电气股份有限公司 上海嘉定 201801 摘要:在住宅小区传统建设模式下,充电桩安装难、配套投资大,严重阻碍了充电桩在小区内进行普及使用。为解决该问题,本文首先调研了住宅小区内的电动汽车用户的出行习惯和充电特点&#xf…

SQL力扣练习(六)

目录 1. 部门工资前三高的所有员工(185) 题解一(dense_rank()窗口函数) 题解二(自定义函数) 2.删除重复的电子邮箱(196) 题解一 题解二(官方解析) 3.上升的温度(197) 解法一(DATEDIFF())…

java中地址问题

//第一个大mapMap<String, Object> map new HashMap<>();HashMap<String, String> map2 new HashMap<>();map2.put("358","999");//给小map赋值并将其添加到map中map.put("666",map2);//获取小map并且修改对应的键值对…

商城小程序有哪些优势?

伴随着移动互联网的高速发展&#xff0c;越来越多的实体商家开始转变营销思路&#xff0c;都纷纷开始布局线上市场&#xff0c;尤其是从小程序出现以后。今天新胜天下小编就来和大家聊一聊商城小程序有哪些优势。 1. 拥有众多流量入口 商城小程序本身就是小程序里的一种类型&a…

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平研修

【科研团队必选】老师赋予目的不仅仅是技术的掌握&#xff0c;更能从技术融合与科研经验的视角下&#xff0c;培养科研团队科研素质&#xff0c;挖掘-融合-创新 目的&#xff1a;以科研及项目角度解决您的数据分析问题及热点问题&#xff0c;为您的论文写作及项目推进挖掘更好…

技术服务企业缺成本票,所得税高怎么解决?可有良策?

技术服务企业缺成本票&#xff0c;所得税高怎么解决&#xff1f;可有良策&#xff1f; 《税筹顾问》专注于园区招商、企业税务筹划&#xff0c;合理合规助力企业节税&#xff01; 技术服务型企业最核心的价值就是为客户提供技术支撑&#xff0c;而这类型的企业在税务方面面临的…

Observability:Synthetic monitoring - 合成监测入门(二)

在之前的文章 “Observability&#xff1a;Synthetic monitoring - 合成监测入门&#xff08;一&#xff09;” 里&#xff0c;我详细描述了如何使用 Project monitors 来创建监控器。我们可以通过在 terminal 中打入命令&#xff0c;创建最为基本的测试框架文件。我们可以通过…

python scrapy爬取网站数据(二)

用法很简单&#xff0c;先安装Scrapy&#xff0c;我这里是win10环境&#xff0c;py3.10 安装scrapy pip install Scrapy显示如图安装完毕 创建项目 分三步创建 scrapy stratproject spiderdemo #创建spiderdemo 项目&#xff0c;项目名随意取 cd spiderdemo #进入项目目录下…

【多线程初阶】第一次认识线程

多线程初阶系列目录 持续更新中 1.第一次认识线程 … 文章目录 多线程初阶系列目录前言1. 线程概念1.1 线程是什么1.2 为什么需要线程1.3 进程和线程的区别1.4 Java线程和操作系统线程的关系 2. 第一个Java多线程程序3. 创建线程的方法3.1 继承 Thread 类3.2 实现 Runnable 接…

深兰科技发布《深兰数字智能产业系列报告(2023年):个人数字化》

近日&#xff0c;深兰科技发布《深兰数字智能产业系列报告(2023年)&#xff1a;个人数字化》&#xff0c;这是深兰科技在数字智能产业领域发布的首份研究报告&#xff0c;也是国内第一份个人数字化产业报告。此报告是在上海市经济和信息化委员会和上海市产业技术创新促进会的共…

星辰天合公司产品完成阿里云 PolarDB 数据库产品生态集成认证

近日&#xff0c;XSKY星辰天合旗下产品与阿里云 PolarDB 开源云原生数据库展开产品集成认证测试&#xff0c;并获得阿里云颁发的产品生态集成认证证书。 测试结果表明&#xff0c;星辰天合旗下的融合计算管理平台 XHERE&#xff08;V2&#xff09;、统一数据平台 XEDP&#xf…

appuploder全过程使用教程(Windows版本)

appuploder全过程使用教程&#xff08;Windows版本&#xff09; 转载&#xff1a;使用appuploader工具流程&#xff08;Windows版本&#xff09; 一.登录apple官网&#xff0c;注册账号 1.注册苹果账号 Sign In - Apple 2.登录开发者中心 &#xff0c;出现协议弹框&#xf…

Android 画面显示流程一

DRM,英文全称 Direct Rendering Manager, 即 直接渲染管理器。 DRM是linux内核的一个子系统,提供一组API,用户空间程序,可以通过它,发送画面数据到GPU或者专用图形处理硬件,也可以使用它执行诸如配置分辨率,刷新率之类的设置操作。原本是设计提供PC设备支持复杂的图形设。…

浏览器配置环境

疯掉了 希望是最后一次 0.配置WinSCP和PUTTY 在Windows上使用PuTTY进行SSH连接-腾讯云开发者社区-腾讯云 1.配置conda 如何在Linux服务器上安装Anaconda&#xff08;超详细&#xff09;_linux安装anaconda_流年若逝的博客-CSDN博客 实验室远程登录Linux服务器并配置环境_远…

docker容器更改映射端口

问题描述&#xff1a; 我们在docker中开启nginx以后&#xff0c;如果这时候在nginx中配置除了80以外的端口的监听&#xff0c;会发现无法访问&#xff0c;这时候其实是因为我们没有开启端口映射导致的。 目前发现有两种解决方案 如下&#xff1a; 目录 一. 修改配…

Android AIDL基本使用

AIDL是Android多进程通讯方式一种。 如要使用 AIDL 创建绑定服务&#xff0c;请执行以下步骤&#xff1a; 创建 .aidl 文件 此文件定义带有方法签名的编程接口。 实现接口 Android SDK 工具会基于您的 .aidl 文件&#xff0c;使用 Java 编程语言生成接口。此接口拥有一个名为…

树莓派Pico与MicroSD卡模块接口及MicroPython编制读写MicroSD存储卡程序

介绍树莓派&#xff08;RPi&#xff09;Pico开发板(或树莓派Pico W无线开发板)与MicroSD卡模块SPI接口技术原理及SPI接口硬件连接的具体步骤&#xff0c;讲述采用MicroPython和SDCard类编制程序读写MicroSD存储卡的方法&#xff0c;给出读写MicroSD存储卡文件的测试程序。 一、…