dockerfile介绍与使用案例

2023-09-20 11:18:02

1.概述

dockerfile 可以理解为一个制作镜像的脚本,但远没有脚本复杂。他根据某种格式自定义内容,
就可以快速创建出需求的镜像。
docker 容器启动的时候在最上层挂载了一个可写层,比如说我在容器里面创建一个文件,这个
文件是存放在可写层的,这时候容器要是销毁了,那么我们对容器的一些写入操作也就没了,
我这个文件也会随着容器销毁而销毁了,我们要是想要保存我们对容器的一些写入操作的话,
可以使用 commit 命令然后将容器制作成一个镜像,这样下次 run 起来该镜像的时候,我们之
前的写入操作就还存在了。
除了使用 commit 方式制作镜像,还有一种方式就是编写 Dockerfile 然后使用 build 命令来制
作镜像了。

2.Dockerfile 的规则

格式:
是注释
指令建议要大写,内容小写
docker 的实际运用 < 54
执行顺序:
docker 是按照 Dockerfile 指令顺序依次执行的,也就是说从上到下

3.指令

1)FROM:底层镜像(如系统)

这个 FROM 指令是 dockerfile 的第一个指令,然后指定了基础镜像,后面的所有指令都是运行
在该基础镜像环境上的 MAINTAINER 该指令是描述的维护者信息。
底层的系统镜像用的是什么,使用 from 指定,绝大部分情况都用的底层有个系统或者基础的环
境用的是什么,对 docker 不熟练使用 centos 镜像即可。

2)RUN:构建时容器内运行的命令。

RUN 指令用于在容器中执行命令。我们常用来安装基础软件。
镜像安装软件依赖包都可以放在 run 中。

3)COPY:复制 docker 目录中的文件到镜像中。

COPY 指令类似 ADD 指令,但是 ADD 指令范围更广些,ADD 能够自动解压文件,能够访问网
络资源,而 COPY 指令做不到。
非目录需要重新指定,放在目录中非常便利,属于好的一种习惯,值得推荐使用目录。

4)ADD:复制 docker 目录中的文件到镜像中。(过程可以解压)

ADD 指令是用来将宿主机某个文件或目录放到(复制)容器某个目录下面。
官方不推荐 ADD,高级复制功能,需求不精准,推荐使用 COPY。

5)EXPOSE:声明开放端口。

EXPOSE 指令用于暴露容器里的端口,我们在 3.5 里面演示过了,nginx 暴露的端口是 80,但
是启动容器的时候需要指定宿主机端口来映射你暴露的端口。需要暴露多个端口的话可以使用
多个 EXPOSE,也可以一个 EXPOSE 指令后面跟多个端口,端口之间用空格隔开。
声明不是变更,变更使用-p 构建容器时候使用。

6)ENV:设置环境变量。

ENV 指令是用于设置环境变量的 。
底层环境变量需要需提前设置。

7)CMD:容器启动时执行的命令,最多只能执行一条。

CMD 指令是你在容器启动的时候帮你运行的命令,而 RUN 这个指令是构建镜像的时候帮你运
行的命令。
容器启动时执行命令,最多执行一条。

8)WORKDIR:声明工作目录。类似 cd。

WORKDIR 是指下面的指令都在 WORKDIR 指定目录下面工作,这个与 linux 里面的 cd 差不
多。
切换目录使用 WORKDIR。
做容器轻量级最好,比较小就很好,使用一条命令就不要使用两天命令。

4.Dockerfile 步骤

1、创建 dockerfile 目录,名字可以自定义。在大目录里面创建各种小目录和文档,比较有层次。
2、在该目录中编辑 dockerfile。
3、用 COPY 或 ADD,需要把被 COPY 文件提前放到 dockerfile 目录中。
4、官方推荐用 COPY,如果需要过程中解压,用 ADD。
5、CMD 字段,需要用[“命令”,”选项 1”]这种格式书写。强制格式写法,必须使用[“命令”,”

选项 1”],类似于 python 的数组。

6、CMD 字段只能写一条命令,且这条命令尽量是前台执行的命令。如果是后台命令,这条命

令结束,docker 就会自动关闭。
区别:前台执行命令和后台执行命
1)后台命令:
当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以
使用&命令把作业放到后台执行。当在后台执行命令时,可以继续使用你的终端做其他事情。适
docker 的实际运用 < 56
合在后台运行的命令有 find、费时的打印作业、费时的排序及一些 shell 脚本。在后台运行作业
时要当心:需要用户交互的命令不要放在后台执行。
注意:经常操作的 shell 命令都属于后台命令。

5、示例

1)用 dockerfile 创建并启动一个 centos 的 apache 镜像。指定自定义内容。
FROM centos:7
RUN yum -y install httpd
EXPOSE 80
COPY index.html /usr/share/httpd/noindex/index.html
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
2)构建镜像
[root@docker ~] docker build -t apache :v1 .
3)验证
[root@docker ~] docker run -itd -p 345:80 apache:v1
[root@docker ~] docker ps

通过访问宿主机 ip 端口,查看 true,防火墙关闭

更多推荐

PostgreSQL快速入门 & 与MySQL语法比较

开篇本文可帮助具有MySQL基础的小伙伴对PostgreSQL做一个快速的入门,通过语法之间的差异对比,降低学习成本,同样都是数据库,正所谓触类旁通。模式的概念模式(Schema)表示数据库中的逻辑容器,用于组织和管理数据库对象,如表、视图、索引等。一个模式可以看作是一组相关对象的命名空间。模式不同于表,它更多地是对数

【Docker系列】Docker-核心概念/常用命令与项目部署实践

写在前面Docker是一种开源的容器化技术,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,从而实现快速部署和高效运行。Docker的核心概念包括镜像、容器、仓库等。本文将详细介绍Docker的基本概念、安装方法以及常用命令。一、Docker基本概念介绍3个基础概念:镜像(Image)容器(Conta

JVM——2.JVM的内存结构

这篇文章来讲一下JVM中的重点之一——JVM的内存结构目录1.概述2.程序计数器3.虚拟机栈3.1栈的介绍3.2栈的相关问题3.3栈内存溢出问题3.4线程运行诊断4.本地方法栈5.堆5.1堆的概述5.2堆内存溢出问题5.3堆内存诊断6.方法区6.1方法区的概述6.2方法区的内存溢出问题7.运行时常量池8.直接内存8.1

在 Swift 中使用 async let 并发运行后台任务

文章目录前言长期运行的任务阻塞了UI使用async/await在后台执行任务在后台执行多个任务使用"asynclet"下载多个文件结论前言Async/await语法是在Swift5.5引入的,在WWDC2021中的Meetasync/awaitinSwift对齐进行了介绍。它是编写异步代码的一种更可读的方式,比调度队列

基于yolov5的交通标志牌的目标检测研究设计——思路及概念

有需要项目的可以私信博主!!!!!一、选题的目的、意义及研究现状(1)选题的目的和意义随着人们对道路安全性的重视和城市交通量的不断增加,交通标志牌作为道路交通安全的重要组成部分之一,扮演着十分重要的角色。然而,交通标志牌的数量庞大、种类繁多,人工巡视的方式存在效率低、漏检率高等问题,对道路交通的安全性带来了一定的隐患。

Vue模板语法(下)

一.事件处理器什么是事件处理器建立一个HTML编写事件处理器测试结果二.表单的综合案例什么是表单综合案例建立一个HTML来编写表单案例测试结果三.局部组件什么是组件通信自定义组件测试结果组件通信-父传子测试结果组件通信-子传父测试结果一.事件处理器什么是事件处理器事件处理器是一种用于响应和处理用户交互事件的机制。在We

zookeeper最基础教程

文章目录一、简介1、工作机制2、特点3、数据结构4、应用场景5、选举机制二、软件安装1、单机版安装2、集群安装3、配置参数解读(zoo.cfg)4、ZK集群启动脚本三、命令行操作1、语法2、使用3、节点相关4、监听器原理5、节点删除与查看三、写数据流程一、简介1、工作机制官方地址:https://zookeeper.a

SpringMVC之JSON数据返回与异常处理机制---全方面讲解

一,JSON数据返回的理解在SpringMVC中,当需要将数据以JSON格式返回给客户端时,可以使用@ResponseBody注解或@RestController注解将Controller方法的返回值直接转化为JSON格式并返回。这使得开发者可以方便地将Java对象转换为JSON,并通过HTTP响应返回给客户端。Spr

TCP协议

文章目录TCP协议1.TCP协议段格式(1)2个核心问题(解包与分用)(2)TCP的可靠性2.确认应答(ACK)机制3.16位窗口大小4.6位标志位(1)ACK(2)SYN(3)FIN(4)PSH(5)RST(6)URG5.超时重传机制6.连接管理机制6.0TCP协议通讯流程6.1三次握手(1)前置问题(2)细节问题(

面试题三:请你谈一谈Vue中的filter功能的实现

Vue中过滤器(filter)的使用我们想一下有methods为什么要有filter的存在呢,因为filter的实现效率比methods要高的多。看一下官方定义:Vue.js允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和v-bind表达式(后者从2.1.0+开始支持)。过滤器应

Vue3 学习-组件通讯(二)

文章目录前言一、props通信二、自定义事件(emit)三、全局事件总线(EventBus)四、v-model五、userAttrs六、ref和$parent七、Provide与Inject八、pinia九、slot插槽总结前言本文主要记录Vue3的九种组件通信方式一、props通信子组件需要用defineProps方

热文推荐