Dockerfile 使用教程

1.Dockerfile

1.1 什么是Dockerfile

Dockerfile可以认为是 Docker镜像的描述文件,是由一系列命令和参数构成的脚本 。主要作用是 用来构建docker镜像的构建文件
  • 通过架构图可以看出通过DockerFile可以直接构建镜像

1.2 Dockerfile解析过程

构建镜像步骤:
1)使用:通过命令“touch Dockerfile”创建Dockerfile文件然后在文件里编写命令
    Dockerfile内容要求:
    1.每条保留字指令都必须为大写,且后面都要跟至少一个参数
    2.指令按照从上到下,顺序执行
    3.#表示注释
    4.每条指令都会创建一个新的镜像层,并对镜像进行提交
2)构建命令:“docker build -t 镜像名:版本 Dockerfile所在目录 ”
#“.”表示当前目录,会把Dockerfile所在的目录里的所有文件打包
docker build -t mycentos:1.0 .
    如果不想将Dockerfile所在目录的所有文件打包,可以使用 dockerignore过滤
    1.在 Dockerfile所在的目录创建 dockerignore文件
    2.然后在里面编写需要过滤的文件“#”为注释,参考如下:
/temp:排除根目录下任意子目录中所有名字以temp开头的文件或目录。如文件/somedir/temporary.txt会被排除。
//temp*:排除根目录下任意两级子目录中所有名字以temp开头的文件或目录。如文件/somedir/subdir/temporary.txt会被排除。
temp?:排除根目录下名字以temp开头,后面为任意一个字符的文件或目录。如目录/tempa和/tempb都会被排除。

1.3 Dockerfile的保留命令

官方说明: Dockerfile reference | Docker Docs
保留字
作用
FROM
当前镜像是基于哪个镜像的 第一个指令必须是FROM
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
构建镜像时需要运行的指令
EXPOSE
当前容器对外暴露出的端口号,仅仅是声明
WORKDIR
指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ENV
用来在构建镜像过程中设置环境变量
ADD
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包
COPY
类似于ADD,拷贝文件和目录到镜像中 将从构建上下文目录中<原路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
VOLUME
容器数据卷,用于数据保存和持久化工作,仅仅是声明
CMD
指定一个容器启动时要运行的命令 Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT
指定一个容器启动时要运行的命令 ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数

(1) FROM 命令

  • 基于那个镜像进行构建新的镜像,在构建时会自动从docker hub拉取base镜像 必须作为Dockerfile的第一个指令出现
  • 语法:
    FROM <image>
    FROM <image>[:<tag>] 使用版本不写为latest
    FROM <image>[@<digest>] 使用摘要 #例: FROM centos:7 FROM openjdk:8-jre

(2) MAINTAINER 命令

  • 镜像维护者的姓名和邮箱地址[废弃]
  • 语法:
    MAINTAINER <name>

(3) RUN 命令

  • RUN指令将在当前映像之上的新层中执行任何命令并提交结果。生成的提交映像将用于Dockerfile中的下一步
  • 语法:
    RUN <command> (shell form, the command is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows)
    RUN echo hello
    RUN ["executable", "param1", "param2"] (exec form)
    RUN ["/bin/bash", "-c", "echo hello"] #例: RUN ["yum","install","-y","vim"] RUN cd /root RUN mv apache-tomcat-8.5.61 tomcat

(4) EXPOSE 命令

  • 用来指定构建的镜像在运行为容器时对外暴露的端口
  • 语法:
    EXPOSE 80/tcp 如果没有显示指定则默认暴露都是tcp
    EXPOSE 80/udp #例: EXPOSE 8080

(5) CMD 命令

  • 用来为启动的容器指定执行的命令,在Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令才会生效。
  • 注意: Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令才会生效。
  • 语法:
    CMD ["executable","param1","param2"] (exec form, this is the preferred form)
    CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
    CMD command param1 param2 (shell form) #例: CMD ["java","-jar","xxx.jar"] CMD java -jar xxx.jar

(6) WORKDIR 命令

  • 用来为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。如果WORKDIR不存在,即使它没有在任何后续Dockerfile指令中使用,它也将被创建。
  • 语法:
    WORKDIR /path/to/workdir
    WORKDIR /a
    WORKDIR b
    WORKDIR c
    `注意:WORKDIR指令可以在Dockerfile中多次使用。如果提供了相对路径,则该路径将与先前WORKDIR指令的路径相对` #例: WORKDIR /root/data

(7) ENV 命令

  • 用来为构建镜像设置环境变量。这个值将出现在构建阶段中所有后续指令的环境中。
  • 语法:
    ENV <key> <value>
    ENV <key>=<value> ... #例:
    ENV BASE_DIR /apps/data
  • 坏境变量用法:$变量名称

(8) ADD 命令

  • 用来从context上下文复制新文件、目录或远程文件url,并将它们添加到位于指定路径的映像文件系统中。
  • 语法:
    ADD hom* /mydir/ 通配符添加多个文件
    ADD hom?.txt /mydir/ 通配符添加
    ADD test.txt relativeDir/ 可以指定相对路径
    ADD test.txt /absoluteDir/ 也可以指定绝对路径
    ADD url #例: ADD xxx.jar . ADD https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.68/bin/apache-tomcat-9.0.68.tar.gz

(9) COPY 命令

  • 用来将context目录中指定文件复制到镜像的指定目录中
  • 语法:
    COPY src dest
    COPY ["<src>",... "<dest>"] #例: COPY xxx.txt .

(10) VOLUME 命令

  • 用来定义容器运行时可以挂在到宿主机的目录
  • 语法:
    VOLUME ["/data"]

(11) ENTRYPOINT命令

  • 用来指定容器启动时执行命令和CMD类似
  • 语法:
    ["executable", "param1", "param2"]
    ENTRYPOINT command param1 param2 #例 ENTRYPOINT java -jar xxx.jar ENTRYPOINT ["java","-jar","xxx.jar"]
    ENTRYPOINT指令,往往用于设置容器启动后的 第一个命令 ,这对一个容器来说往往是固定的。 CMD指令,往往用于设置容器启动的第一个命令的 默认参数 ,这对一个容器来说可以是变化的。

1.4 Dockerfile构建springboot项目部署

1.准备springboot可运行项目
2.将可运行项目放入linux虚拟机中
3.编写Dockerfile
FROM openjdk:8
WORKDIR /ems
ADD ems.jar /ems
EXPOSE 8989
ENTRYPOINT ["java","-jar"]
CMD ["ems.jar"]
4.构建镜像
[root@localhost ems]# docker build -t ems .
5.运行镜像
[root@localhost ems]# docker run -p 8989:8989 ems
6.访问项目
http://10.15.0.8:8989/ems/login.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年高教社杯数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其…

LLM - LLaMA-2 获取文本向量并计算 Cos 相似度

目录 一.引言 二.获取文本向量 1.hidden_states 与 last_hidden_states ◆ hidden_states ◆ last_hidden_states 2.LLaMA-2 获取 hidden_states ◆ model config ◆ get Embedding 三.获取向量 Cos 相似度 1.向量选择 2.Cos 相似度 3.BERT-whitening 特征白化 …

.ssh文件夹下缺失known_hosts文件

.ssh文件夹下缺失known_hosts文件 先确认工蜂或github 添加了git生成的密钥 然后 桌面打开git bash 1、执行ssh -T gitgitlab.com 2、输入yes

b站手机缓存文件转MP4

b站缓存的文件 音频、视频、弹幕是分开的 这里我只用到了音频和视频所以只介绍这一部分 b站的缓存视频文件和路径结构如下 默认缓存路径 内部存储\Android\data\tv.danmaku.bilil\download\89720189 文件夹结构 文件夹 c_738583 这是单个视频的缓存文件夹 进入c_738583文件夹…

电脑可以上网,微信都可以用,但浏览器打不开网页

可以试试设置DNS&#xff08;其他windows版本步骤&#xff09;&#xff1a; 1.打开控制面板 2.网络和Internet 3.查看网络计算机和设备 4.按照下图步骤&#xff1a; 5.按下图进行

Unity 之 方括号[ ] 的用法以及作用

文章目录 在Unity中&#xff0c;方括号 [ ] 通常用于表示属性、特性&#xff08;Attributes&#xff09;或者元数据&#xff08;Metadata&#xff09;。这些标记提供了附加信息&#xff0c;可以用于修改类、方法、字段等的行为或者在编辑器中进行设置。 以下是一些常见的用法&…

基于stm32的烟雾浓度检测报警proteus仿真设计(仿真+程序+讲解)

基于STM32的烟雾浓度检测报警仿真设计(仿真程序讲解&#xff09; 1.主要功能2.仿真3. 程序4. 资料清单&下载链接 基于STM32的烟雾浓度检测报警仿真设计(仿真程序讲解&#xff09; 仿真图proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语言 设计编号&a…

Huggingface托管机器学习模型及API提供

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 我想在我的网络和移动应用程序中使用机器学习模型&#xff0c;但要做到这一点&#xff0c;我必须在某个地方托管我的机器学习应用程序。 托管预先训练的 ML 模型称为推理。 我只想添加一些 Python ML 代码并快速获得 REST…

C语言:字符函数和字符串函数(一篇拿捏字符串函数!)

目录 求字符串长度&#xff1a; 1. strlen(字符串长度) 长度不受限制函数&#xff1a; 2. strcpy(字符串拷贝) 3. strcat(字符串追加) 4. strcmp(字符串比较) 长度受限制函数&#xff1a; 5. strncpy(字符串拷贝) 6. strncat(字符串追加) 7. strncmp(字符串比较) 字…

MR混合现实汽车维修情景实训教学演示

MR混合现实技术应用于汽车维修课堂中&#xff0c;能够赋予学生更加真实&#xff0c;逼真地学习环境&#xff0c;让学生在情景体验中不断提高自己的专业能力。 MR混合现实汽车维修情景实训教学演示具体体现在&#xff1a; 1. 虚拟维修指导&#xff1a;利用MR技术&#xff0c;可…

upgrade pip报错:def read(rel_path: str) -> str: syntaxerror

命令行执行以下命令就可以大功告成! wget https://bootstrap.pypa.io/pip/2.7/get-pip.py python get-pip.py pip install --upgrade setuptools最后大功告成:

Vue3+ts封装一个简单版的Message组件

Vue3ts封装一个Message组件 项目中需要使用信息提示框的功能&#xff0c;ui组件库使用的是字节的arco-design-vue。看了一下&#xff0c;现有的Message不满足要是需求&#xff0c;直接使用message组件的话&#xff0c;改样式太麻烦。Notification组件样式倒是符合了&#xff0c…

使用maven创建springboot项目

创建maven快速启动项目 命令行或者idea、eclipse快捷创建也可以 pom.xml下project项目下导入springboot 父工程 <!--导入springboot 父工程--> <parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.bo…

Flink+Paimon多流拼接性能优化实战

目录 &#xff08;零&#xff09;本文简介 &#xff08;一&#xff09;背景 &#xff08;二&#xff09;探索梳理过程 &#xff08;三&#xff09;源码改造 &#xff08;四&#xff09;修改效果 1、JOB状态 2、Level5的dataFile总大小 3、数据延迟 &#xff08;五&…

研华I/O板卡 Win10+Qt+Cmake 开发环境搭建

文章目录 一.研华I/O板卡 Win10QtCmake 开发环境搭建 一.研华I/O板卡 Win10QtCmake 开发环境搭建 参考这个链接安装研华I/O板卡驱动程序系统环境变量添加研华板卡dll Qt新建一个c项目 cmakeList.txt中添加研华库文件 cmake_minimum_required(VERSION 3.5)project(advantechDA…

科技资讯|苹果发布新专利:可在车内定位苹果的智能设备

根据美国商标和专利局近期公示的清单&#xff0c;苹果公司获得了一项名为《车内定位移动设备的系统和方式》专利&#xff0c;概述了在车内狭窄空间内如何定位 iPhone 等移动设备。 Find My 服务现阶段没有使用 UWB 来追踪 iPhone 或者 iPad&#xff0c;而是依赖 GPS 等相关辅…

【Java并发】聊聊对象内存布局和syn锁升级过程

对象存储解析&#xff1a;一个空Object对象到底占据多少内存&#xff1f; 对象内存布局 Mark Word占用8字节&#xff0c;类型指针占用8个字节&#xff0c;对象头占用16个字节。 好了&#xff0c;我们来看一下一个Object对占用多少空间&#xff0c; 因为java默认是开启压缩…

Spring框架知识点汇总

01.Spring框架的基本理解 关键字&#xff1a;核心思想IOC/AOP&#xff0c;作用&#xff08;解耦&#xff0c;简化&#xff09;&#xff0c;简单描述框架组成&#xff1b; Spring框架是一款轻量级的开发框架&#xff0c;核心思想是IOC&#xff08;反转控制&#xff09;和AOP&a…

【C++】输入输出及格式控制

在各类算法竞赛和机试中&#xff0c;对测试数据和输出格式往往会有明确的规定&#xff0c;笔者结合个人刷题经历&#xff0c;得到了以下C语言输入输出控制的方法。 cin&#xff1a;从缓冲区中读取数据 cin>>从缓冲区中读取数据时&#xff0c;若缓冲区中第一个字符是空格…