Dockerfile语法和简单镜像构建
Dockerfile是一个用于定义Docker镜像的文本文件,包含了一系列的指令和参数,用于指示Docker在构建镜像时应该执行哪些操作,例如基于哪个基础镜像、复制哪些文件到镜像中、运行哪些命令等。
Dockerfile文件的内容主要有几个部分组成,包括基础镜像,创建者信息,镜像操作指令,容器启动指令等
创建Dockerfile文件并通过docker bulid来构建镜像,是除了从镜像仓库拉取、解压保存镜像之外的另一种自定义构建镜像的方式。构建指令:docker build -t="image-name" <文件目录> --load
Dockerfile文件指令
#FROM
FROM指定基础镜像,这个文件需要在本地有,如果没有则在docker build后增加--load参数去docker官网进行拉取
Dockerfile文件中定义的镜像就以FROM的镜像为基础,可指定tag
#MAINTAINER
是备注,用以指定创建者信息
#COPY
将同目录下的文件复制到镜像中
也可以使用—chown=参数指定权限
格式为 filename <path>
#ADD
格式同COPY
区别是移动tar文件后会自动解压
docker官方推荐使用COPY
#RUN
说明镜像构建过程中需要运行的命令,每次执行都会增加一层
有shell模式和exec模式
shell模式: 直接使用linux命令即可
exec模式:通过方括号指定参数来实现,如
RUN ["/bin/bash","-c"," yum -y install xxx"]
/bin/bash表示解释器位置 -c代表指定后面是要执行的命令
#EXPOSE
声明端口,说明这个端口是容器映射出去的端口 可以指定多个
声明后,docker run -P会随机将宿主机端口映射到声明后的端口
#CMD
CMD在docker run命令执行时执行
有shell模式和exec模式
但会被docker run后自带的命令所覆盖
如果使用了ENTRYPOINT指令,作为其默认参数
#ENTERYPOINT
作用于CMD相同
有shell模式和exec模式
ENTERYPOINT 不会被docker run后自带的命令覆盖,如果使用了参数--entrypoint则可以覆盖
ENTERYPOINT与CMD混用:
ENTERYPOINT ["nginx","-c"]
CMD ["/nginx.conf"]
nginx是nginx的命令行工具
-c代表用xx文件执行该命令
/nginx.conf基于根目录下的nginx.conf运行,即该文件是默认文件
如果docker run指定了命令,就会覆盖掉CMD指定的文件,转而使用docker run指定的文件
#VOLUME
指定容器内的默认挂载点,使用后会默认把宿主机/var/lib/docker/volumes中挂载到容器中的挂载点,在docker run时可以通过-v手动指定宿主机挂载点
1.持久化存储,避免因为重启导致数据丢失
2.可以通过-v来更好管理存储,容器端固定而宿主机端不固定
#WORKDIR
指定命令的工作目录,需要提前创建好
#ENV
指定环境变量
格式为ENV key=value
例如ENV VERSION= 1.0,就可以使用$VERSION来引用
#USER
用以指定执行命令的用户和用户组
#ONBUILD
延迟执行创建的命令,在某次构建镜像时不会执行,但下次如果有新的dockerfile使用了本镜像进行镜像构建时,就会执行这条命令。
nginx镜像构建
mkdir wsdockerfile
#centos8已经停更了,下载软件需要另外的源,这个文件清华镜像站和centos官网都能找到
cp Centos-vault-8.5.2111.repo wsdockerfile/
cd wsdockerfile/
#删除并替换/etc/yum.repos.d/的源文件
#下载nginx并开放80端口
#用ENTRYPOINT使docker启动时自动启动nginx
cat > dockerfile << EOF
FROM centos
MAINTAINER ws
RUN rm -rf /etc/yum.repos.d/*
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/
RUN yum install -y nginx
COPY index.html /usr/share/nginx/html/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
EOFecho 123 > index.htmldocker build -t="ws/nginx:v1" . #开始构建
#[+] Building 130.1s (10/10) FINISHED docker:default
# => [internal] load build definition from dockerfile 0.0s
# => => transferring dockerfile: 270B 0.0s
# => [internal] load .dockerignore 0.0s
# => => transferring context: 2B 0.0s
# => [internal] load metadata for docker.io/library/centos:latest 0.0s
# => [1/5] FROM docker.io/library/centos 0.0s
# => [internal] load build context 0.0s
# => => transferring context: 77B 0.0s
# => CACHED [2/5] RUN rm -rf /etc/yum.repos.d/* 0.0s
# => CACHED [3/5] COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/ 0.0s
# => [4/5] RUN yum install -y nginx 129.6s
# => [5/5] COPY index.html /usr/share/nginx/html/ 0.0s
# => exporting to image 0.4s
# => => exporting layers 0.4s
# => => writing image sha256:075aaa08f6799ed252578b0c82645e41c61a818584e6e183053a6ce 0.0s
# => => naming to docker.io/ws/nginx:v1 0.0s
docker images | grep ws/nginx
#ws/nginx v1 075aaa08f679 51 seconds ago 342MB
docker run -d -p 80 --name wshttp ws/nginx:v1
#1f57b4d4b5a8d73fa5488b792099c08fe15cb1bbfdc71d166c1430f5be9e15d4
docker ps
#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#1f57b4d4b5a8 ws/nginx:v1 "/usr/sbin/nginx -g …" 19 seconds ago Up 18 seconds 0.0.0.0:32768->80/tcp, :::32768->80/tcp wshttp
tomcat8镜像构建
tomcat版本tomcat-8.5.97 官网能下载到 jdk版本jdk-8u45
mkdir wsdockerfile2
cp jdk-8u45-linux-x64.rpm apache-tomcat-8.5.97.tar.gz Centos-vault-8.5.2111.repo wsdockerfile2
cd wsdockerfile2
#ADD传送jdk包和tomcat包并解压
#rpm包安装jdk-8u45
#ENTRYPOINT安装tomcat,开始后查看日志
echo "
FROM centos
MAINTAINER ws
RUN rm -rf /etc/yum.repos.d/*
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/
ADD jdk-8u45-linux-x64.rpm /usr/local/ #\\
ADD apache-tomcat-8.5.97.tar.gz /usr/local/
RUN cd /usr/local && rpm -ivh jdk-8u45-linux-x64.rpm
RUN mv /usr/local/apache-tomcat-8.5.97 /usr/local/tomcat8
ENTRYPOINT /usr/local/tomcat8/bin/startup.sh && tail -F /usr/local/tomcat8/logs/catalina.out
EXPOSE 8080
" > dockerfiledocker build -t="tomcat8" . --load
#
相关文章:
Dockerfile语法和简单镜像构建
Dockerfile是一个用于定义Docker镜像的文本文件,包含了一系列的指令和参数,用于指示Docker在构建镜像时应该执行哪些操作,例如基于哪个基础镜像、复制哪些文件到镜像中、运行哪些命令等。 Dockerfile文件的内容主要有几个部分组成,…...
uniapp使用wxml-to-canvas开发小程序保存canvas图片
微信小程序官方解决方案:wxml-to-canvas 使用wxml-to-canvas要知道一些前提条件 1、只能画view,text,image 2、每个元素必须要设置宽高 3、默认是flex布局,可以通过flexDirection: "column"来改变排列方式 4、文字 必…...
关于数据库切换的麻烦
背景介绍 现项目使用了两个数据源,分别为A、B,两个数据库的数据结构并不相同,数据库A是用来做查询一些基本信息的,数据库B是用来保留业务操作数据的。后端是在mapper层用DS注解来区分哪些地方用数据库A,而哪些地方用数…...
Qt/QML编程学习之心得:Linux下读写文件File(24)
在Linux嵌入式系统中,经常会使用Qt来读写一个文件,判断一个文件是否存在,具体如何实现呢? 首先,要使用linux系统中相关的头文件: #include <unistd.h> #include <stdio.h> #include <stdlib.h> 其次,判断路径是否存在, if(!dir.exists()){mkdir(…...
【Vue2+3入门到实战】(22)VUE3之组合式API - setup、reactive和ref函数、computed、watch、生命周期函数详细讲解
目录 一、组合式API - setup选项1. setup选项的写法和执行时机2. setup中写代码的特点3. <script setup>语法糖 二、组合式API - reactive和ref函数1. reactive2. ref3. reactive 对比 ref 三、组合式API - computed四、组合式API - watch1. 侦听单个数据2. 侦听多个数据…...
如何在互联网上找到你想要的数据?
互联网时代,信息爆炸,怎么在网上查到到自己想要的信息已经变难了。毕竟经常搜索的内容前几页都是广告。 那么如何在大量的广告和垃圾信息中获取到自己想要的信息呢? 首先,明确自己的需求,比如你想找哪个方面的数据,…...
揭秘淘宝商品详情API如何助力电商创新发展
淘宝商品详情API是淘宝开放平台提供的一种数据接口服务,能够获取到淘宝网商品详情的各种信息,包括商品标题、价格、销量、评价等。通过淘宝商品详情API,开发者可以轻松地获取到这些数据,并利用这些数据进行商业分析和应用开发。 …...
vue element plus Space 间距
虽然我们拥有 Divider 组件,但很多时候我们需要不是一个被 Divider 组件 分割开的页面结构,因此我们会重复的使用很多的 Divider 组件,这在我们的开发效率上造成了一定的困扰。 间距组件就是为了解决这种困扰应运而生的。 基础用法# 最基础…...
【驱动序列】C#获取电脑硬件之CPU信息,以及它都有那些品牌
欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是是《驱动序列》文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识…...
目标检测-One Stage-YOLO v3
文章目录 前言一、YOLO v3的网络结构和流程二、YOLO v3的创新点总结 前言 根据前文目标检测-One Stage-YOLOv2可以看出YOLOv2的速度和精度都有相当程度的提升,但是精度仍较低,YOLO v3基于一些先进的结构和思想对YOLO v2做了一些改进。 提示:…...
安泰ATA-4014高压功率放大器在传感器脉冲涡流检测中的应用
传感器在工程领域起着至关重要的作用,能够实时获取各种物理量的信息。而功率放大器作为传感器信号处理的重要组成部分,广泛应用于各种测量和控制系统中。本文将探讨功率放大器在这一领域的重要性和作用。 首先,了解传感器脉冲涡流检测的基本原…...
Axure全面指南:正确打开并高效使用的步骤!
AxureRP是目前流行的设计精美的用户界面和交互软件。AxureRP根据其应用领域提供了一组丰富的UI控制。作为Axure的国内替代品,即时设计可以在线协作,浏览器可以在无需下载客户端的情况下打开和使用。如果以前使用Axure,很容易切换到即时设计。…...
ts axios 指定返回值类型,返回数据类型不确定该怎么办 typescript
ts axios 指定返回值类型,返回数据类型不确定该怎么办 typescript 转到 ts 以来,一直有个问题困扰着我,就是每次用 axios 获取数据时,返回值 res 的类型都不能确定,这就导致编辑器一直提示我: 原因 原因是…...
判断是否是json字符串
一、在isJson.js文件里创建一个isJson类并抛出 /*** isJson 类用于判断一个字符串是否为有效的 JSON 字符串。* class isJson* param {string} str - 要判断的字符串。* returns {boolean} 如果字符串是有效的 JSON 字符串,则返回 true;否则返回 false。…...
SpringBoot集成Minio(接上文)
如果启动项目出现下面错误,把minio的版本更换为低版本的,我最初用的是8.5.7版本的出现下面错误,后面一直调低版本发现8.2.2,8.3.0都是可以的。(因为我需要用8.5.7的版本所以调了别的依赖的版本,大家可以根据…...
更新 torchtext 造成的torch版本不匹配的问题
更新 torchtext 造成的torch版本不匹配的问题 - pip 原来的版本配置 cuda11.6 torch-GPU 1.13.1 如果直接pip update torchtext 会卸载原来的torch然后默认安装CPU版本,很烦。网上的各种方法都是推荐conda.但是我一直都是pip。因此考虑pip 的解决办法。 解决办…...
flutter资源
开发者平台 腾讯云 https://cloud.tencent.com/developer/article/1902681 掘金 stackoverflow 个人博主 Magic旭 https://www.jianshu.com/u/f9b0b77d6038 J船长 https://juejin.cn/user/1820446987136903/posts 老孟 http://www.laomengit.com/flutter/widgets/Theme.html#t…...
C++经典程序
C有许多经典的程序示例,以下是其中一些简单但常见的例子,以帮助你更好地了解C语言的基本概念。 1. **Hello World程序:** cpp #include <iostream> int main() { std::cout << "Hello, World!" << std…...
Java多线程-Thread类的run方法
Java多线程-Thread类的run方法 一、背景二、研究Thread类的start()源码1、源码(比较短,贴一下)1.1 重点:start0(); 三、研究Thread类的run()源码1、源码(很关键,必须贴) 四、创建线程的2种方式1…...
java基础之Java8新特性-方法引入
目录 1.简介 2.方法引入 方法引入遵循规范 方法引入种类 1.静态方法引入 2.对象方法引入 3.实例方法引入 4.构造函数引入 1.简介 方法引用是 Java 8 中引入的另一个重要特性,它提供了一种简洁的语法来直接引用现有方法或构造函数。方法引用可以看作是 Lambd…...
K8S中的hostPort、NodePort 、targetPort、port、containerPort 的区别
Dockerfile的EXPOSE Dockerfile中端口的声明: EXPOSE <端口1> [<端口2>...] 所以:EXPOSE的 第一个作用:只是说明docker容器开放了哪些端口,并没有将这些端口实际开放了出来!更多的作用是告诉运维人员或容器操作人员我开放了容器的哪些端口,只是一种说明。 …...
SpringBoot整合FreeMarker模板引擎
中文官方参考手册 http://freemarker.foofun.cn/ 1.先加入FreeMarker依赖 <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version> </dependency>2.新建一个FreeMark…...
编程基础 - 变量与常量
编程基础 - 变量与常量 返回序言及专栏目录 文章目录 编程基础 - 变量与常量前言一、变量是什么?二、为什么要有变量三、局部变量和全局变量四、常量五、只读变量小结 前言 变量是编程最重要知识点之一,从根本上讲,编程就是对数据的操作&a…...
Linux入门攻坚——12、Linux网络属性配置相关知识2
CentOS 7网络属性配置: 传统命名机制:以太网eth[0,1,2,...],wlan[0,1,2...] 可预测功能的命名机制: udev支持多种不同的命名方案: Firmware ,拓扑结构 在对待设备文件这块,Linux改…...
如何自己实现一个分布式事务
实现分布式事务是一个复杂的过程,它需要精心设计并考虑数据的一致性、系统的可用性和分区容错能力。分布式事务确保在分布式系统中,即使是跨多个数据库、服务或消息队列,事务要么完全成功,要么完全失败。 以下是实现分布式事务的…...
使用Nonebot编写QQ机器人
使用 NoneBot 这个工具,来编写 QQ 机器人。 安装基础软件 一、安装 NoneBot 库 直接使用 pip 安装即可 pip install nonebot二、安装酷Q 软件和 HTTP API 插件 酷Q 软件可以直接到官网下载,https://cqp.cc/b/news,或者可以到网盘下载&am…...
认识SpringBoot中的条件注解
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏&…...
使用PAI-DSW搭建基于LangChain的检索知识库问答机器人
教程简述 在本教程中,您将学习如何在阿里云交互式建模(PAI-DSW)中,基于LangChain的检索知识库实现知识问答。旨在建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 LangChain是一个开源的框架,…...
优雅的通过Shell脚本生成Go的程序包
前言 随着Go语言的普及,越来越多的开发人员选择使用Go编写代码。虽然越来越多的公司项目已使用持续集成/持续部署(CI/CD)工具,用于自动化构建、测试和部署Go程序包,但存在一些部署在ECS服务器的Go程序包或需要手动编译…...
益生菌抗癌?补充这种益生菌,抑制肝癌,还改善肠道健康
撰文 | 宋文法 肠道菌群,是人体不可分割的组成部分,生活在我们肠道内的数万亿细菌对健康起着重要作用,它们影响着人的新陈代谢、消化能力、抵御感染、控制人体对药物的反应,甚至还能预防某些癌症。 非酒精性脂肪肝病,是…...
网站建设的好处/信息流推广渠道
dp[i][j]dp[i-a[i][j]dp[i-a[i]][j-1]; 其中前一项j不变表示j这一项无限取转载于:https://www.cnblogs.com/linkzijun/p/6288364.html...
南阳做网站推广/百度推广一年大概需要多少钱
vscode在ubuntu和windows都可用 ubuntu ssh -p 服务器端口号 服务器名字服务器IP地址 ssh -X -p 服务器端口号 服务器名字服务器IP地址 # -X 可以在本地看显示的图像 将服务器里文件传输到本地当前目录里 -r递归传输,递归遍历每个目录和文件 scp -P 服务器端口号…...
网站建设试用/网站seo属于什么专业
通过UIPageControl和UIScrollView的结合实现滑动翻页的效果时默认显示的时第一个view,而大多数时候我们可能 需要将第二个或者第三个view作为默认页显示,而这时仅仅设置currentPage是不够的,它只能改变页面指示器的颜色, 并不会完…...
做网站公司cnfg/网络营销模式案例
用户名 性别 邮件{% for user in users %}{{user.name}}{% if user.sex 1 %}男{% else %}女{% endif %}{{user[email]}}{% else %}暂无数据{% endfor %}...
高校网站建设需求单/泉州网站建设优化
策略模式【Strategy Pattern】刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵…...
网站中文章内图片做超链接/微信crm系统软件
原文地址为: Windows环境下“路径”处理头文件 #include <Shlwapi.h> 引用库文件 #pragma comment(lib, "shlwapi.lib") 路径截断与合并函数 PathRemoveArgs 去除路径后面的参数 PathRemoveBackslash 去除路径最后的反斜杠…...