docker学习笔记(四)--DockerFile

文章目录

  • 一、什么是Dockerfile
  • 二、docker build命令
  • 三、dockerfile指令
    • 3.1 FROM
    • 3.2 ENV
    • 3.3 WORKDIR
    • 3.4 RUN
    • 3.5 CMD
    • 3.6 ENTRYPOINT
    • 3.7 EXPOSE
    • 3.8 ARG
    • 3.9 ADD
    • 3.10 COPY
    • 3.11 VOLUME
  • 四、dockerfile示例

一、什么是Dockerfile

Dockerfile 是用于构建 Docker 镜像的脚本文件,由一系列指令构成。通过docker build命令构建镜像时,Dockerfile中的指令会由上到下依次执行,每条指令都将会构建出一个镜像,这就是镜像的分层。因此,指令越多,层次就越多,创建的镜像就越多,效率就越低。所以在定义Dockerfile时,能在一个指令完成的动作就不要分为两条。比如下面这个构建指令。

FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

上述命令执行之后会创建3层镜像,可简化为以下格式

FROM centos
RUN yum -y install wget \&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \&& tar -xvf redis.tar.gz

如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。

二、docker build命令

在 Dockerfile 文件的存放目录下,执行构建动作。以下示例,通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。docker build -t nginx:v3 .其中.是上下文路径。上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
在这里插入图片描述

三、dockerfile指令

dockerfile指令说明示例
FROM指定基础镜像,用于后续的指令构建,必须是第一条指令FROM ubuntu:20.04
RUN用于执行后面跟着的命令行命令。有俩种格式①RUN <命令行命令> ,其中命令行命令等同于,在终端操作的 shell 命令。②RUN [“可执行文件”, “参数1”, “参数2”] ,比如RUN [“./test.php”, “dev”, “offline”] 等价于 RUN ./test.php dev offline
COPY拷贝本地文件到镜像的指定目录COPY [–chown=:] <源路径1>… <目标路径>COPY hom* /mydir/
VOLUME定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。VOLUME <路径>

3.1 FROM

格式:FROM <镜像>[:<版本>]
说明:指定新镜像的基础镜像。每个 Dockerfile 都必须以 FROM 指令开始。
例子:FROM ubuntu:18.04

3.2 ENV

格式:ENV <键>=<值>
说明:设置环境变量。
例子:ENV MYAPP_COLOR=red

3.3 WORKDIR

格式:WORKDIR <路径>
说明:设置容器内的工作目录,如果目录不存在,则会创建。
例子:WORKDIR /app

3.4 RUN

格式:RUN <命令> 或 RUN [“可执行文件”, “参数1”, “参数2”]
说明:在镜像中执行命令,并创建一个新的层,用于缓存结果。
例子:RUN apt-get update && apt-get install -y curl

3.5 CMD

格式:CMD [“可执行文件”, “参数1”, “参数2”] 或 CMD 命令 参数1 参数2
说明:提供容器启动时默认执行的命令。如果 Docker 命令行中提供了其他命令,则会覆盖 CMD。
例子:CMD [“python”, “app.py”]

3.6 ENTRYPOINT

格式:ENTRYPOINT [“可执行文件”, “参数1”, “参数2”] 或 ENTRYPOINT 命令 参数1 参数2
说明:设置容器启动时执行的命令,可以被 Docker 命令行中指定的其他命令覆盖。
例子:ENTRYPOINT [“/bin/bash”]

3.7 EXPOSE

格式:EXPOSE <端口> [<端口>…]
说明:声明容器运行时监听的端口,不会实际上发布端口,需要在 docker run 时使用 -p 参数来发布。
例子:EXPOSE 80 443

3.8 ARG

【语法】ARG < varname >[=]
【解析】定义一个变量,该变量将会使用于镜像构建运行时。若要定义多个变量,则需要定
义多个ARG指令。

3.9 ADD

格式:ADD <宿主机源文件路径> <存放容器目标路径>
说明:将文件、目录、远程文件URL添加到容器中。如果 <宿主机源文件路径> 是 tar 压缩文件,会自动解压。
例子:ADD app.tar.gz /app

3.10 COPY

【说明】功能与ADD指令相同,只不过src不能是URL。若src为压缩文件,复制到容器后
不会自动解压。

3.11 VOLUME

格式:VOLUME [“dir1”, “dir2”, …]
说明:创建一个可以从本地主机或其他容器挂载的挂载点。
例子:VOLUME /var/www/html

四、dockerfile示例

# 使用官方MySQL镜像
FROM mysql:5.7# 设置root用户的密码
ENV MYSQL_ROOT_PASSWORD=123456# 设置字符集
ENV LANG=C.UTF-8# 挂载mysql数据文件
VOLUME /var/lib/mysql# 挂载mysql日志文件
VOLUME /var/log/mysql# 挂载mysql配置文件
VOLUME /etc/mysql

在当前root用户的家目录,创建如上的dockerfile文件,执行命令docker build -t mysqlself .该命令会在当前目录下查找Dockerfile文件,并构建名为mysqlself的Docker镜像。
在这里插入图片描述
使用命令docker run -itd --name mysql --network=blognetwork --ip=172.16.0.3 -p 3306:3306 mysqlself运行刚才的镜像生成名为mysql的容器。用Navicat工具连接刚才创建的容器,并创建一个名为blogsite的数据库,进入容器使用命令show databases;可以看见刚才创建的数据库。
在这里插入图片描述

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

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

相关文章

撰写技术文档的关键步骤和核心要点

编写项目的技术文档是一个重要且细致的任务&#xff0c;它不仅有助于项目的当前开发团队理解系统的结构和工作原理&#xff0c;还为未来的维护和扩展提供了宝贵的参考资料。以下是撰写技术文档时应遵循的几个关键步骤和组成部分&#xff1a; 1. 概述 项目简介&#xff1a;简要…

Ant-Design-Vue 全屏下拉日期框无法显示,能显示后小屏又位置错乱

问题1&#xff1a;在全屏后 日期选择器的下拉框无法显示。 解决&#xff1a;在Ant-Design-Vue的文档中&#xff0c;很多含下拉框的组件都有一个属性 getPopupContainer可以用来指定弹出层的挂载节点。 在该组件上加上 getPopupContainer 属性,给挂载到最外层盒子上。 <temp…

【前端学习路线】(超详细版本)

先附上学习路线图&#xff1a;前端学习路线 第一阶段&#xff1a;前端入门&#xff08;htmlcss&#xff09; 前端最基本的知识&#xff0c;需要先将这些内容融汇贯通&#xff0c;学习后面内容才会不吃力。学习完可以做几个静态页练习一下。 推荐视频学习链接&#xff1a; 黑马程…

Vue生成类似于打卡页面

数据表格 <el-table :data"tableData" border height"calc(100vh - 240px)" :cell-style"cellFun"><el-table-column label"姓名" show-overflow-tooltip prop"name" align"center"/><el-table-co…

JVM学习《垃圾回收算法和垃圾回收器》

目录 1.垃圾回收算法 1.1 标记-清除算法 1.2 复制算法 1.3 标记-整理算法 1.4 分代收集算法 2.垃圾回收器 2.1 熟悉一下垃圾回收的一些名词 2.2 垃圾回收器有哪些&#xff1f; 2.3 Serial收集器 2.4 Parallel Scavenge收集器 2.5 ParNew收集器 2.6 CMS收集器 1.垃圾…

波特图方法

在电路设计中&#xff0c;波特图为最常用的稳定性余量判断方法&#xff0c;波特图的根源是如何来的&#xff0c;却鲜有人知。 本章节串联了奈奎斯特和波特图的渊源&#xff0c;给出了其对应关系和波特图相应的稳定性余量。 理论贯通&#xff0c;不在于精确绘…

【Java】2、集合框架 JCF

目录 CollectionListArrayList扩容机制System.arraycopy() 和 Arrays.copyOf()方法 LinkedList Set MapHashMap *重点&#xff1a; 底层机制&#xff08;源码&#xff09;应用场景 好处&#xff1a; 数组&#xff08;长度不可改&#xff0c;同一类型&#xff0c;增删不便&#…

P5461 赦免战俘

P5461 赦免战俘 #include <iostream> using namespace std; #include <algorithm> #include <vector> #include <cmath> void pardon(auto & matrix,int x,int y,int size){if(size 1) return;int half size / 2;for(int i x;i < x half;i …

GoTrackIt应用指南:共享单车时空轨迹可视化

GoTrackIt平台集成了对 Kepler.gl 可视化工具的部分功能进行了封装&#xff0c;通过引入 KeplerVis 类&#xff0c;显著简化了地理空间数据分析与展示的过程。利用这一类&#xff0c;开发者和数据分析师能够在网页端快速实现复杂地理数据的动态可视化&#xff0c;而无需深入掌握…

LeetCode 力扣 热题 100道(十五)搜索插入位置(C++)

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 代码如下所示&#xff1a; class Solution { public:int searchIns…

JS中递归函数的理解及展开运算符在递归种的运用理解

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>递归函数</title> </head> <body> <script>const list ["你好", "吃饭了吗",["好",[[&qu…

vue中.sync修饰符的用法

一、什么是.sync修饰符 在Vue.js中&#xff0c;.sync 修饰符用于创建一个双向绑定的 prop。它使子组件能够更新父组件的 prop 值&#xff0c;实现父子组件之间的双向数据同步。具体来说&#xff0c;.sync 修饰符主要有以下几个功能&#xff1a; 简化双向绑定&#xff1a; 使用…

element Plus中 el-table表头宽度自适应,不换行

在工作中&#xff0c;使用el-table表格进行开发后&#xff0c;遇到了小屏幕显示器上显示表头文字会出现换行展示&#xff0c;比较影响美观&#xff0c;因此需要让表头的宽度变为不换行&#xff0c;且由内容自动撑开。 以下是作为工作记录&#xff0c;用于demo演示教程 先贴个…

rockit 学习、开发笔记(五)(VDEC)

前言 后面由于业务需求有rockit编解码的功能开发&#xff0c;这里我是第一次接触编解码&#xff0c;所以后续有些概念表述可能不太清楚&#xff0c;请各位多多包涵。 先来说一下解码模块的使用&#xff0c;rockit中的解码模块是VDEC&#xff0c;如果想要开发rockit的vdec可能…

unicloud微信小程序云端一体项目DEMO

最近应客户需求&#xff0c;做了一个产品展示的云开发小程序&#xff0c;从了解云开发到应用到实际项目的产品demo&#xff0c;希望大家能从中获取到对自己有用的东西。 说下心得体会吧&#xff0c;一般小项目用这种云开发确实会减少很多开发成本&#xff0c;人力成本&#xf…

图的创建和基础操作(数据结构实验作业)

上面是我的实验作业要求&#xff1a;&#xff08;看不到的同学&#xff0c;移步&#xff1a;https://gitee.com/young-lion/picture-bed/raw/master/202412051939715.png&#xff09; 下面的代码使用的是go语言&#xff1a; package mainimport ("fmt" )// 访问标记…

flex布局容易忽略的角色作用

目录 清除浮动 作用于行内元素 flex-basis宽度 案例一&#xff1a; 案例二&#xff1a; 案例三&#xff1a; flex-grow设置权重 案例一&#xff1a; 案例二&#xff1a; 简写flex-grow:1 0 auto; flex作为一维布局,行和列的使用&#xff0c;忽略的小角色&#xff0c;大…

javascript-svg-在圆环上拖动并选中区域

目录 问题描述解决思路代码结构 问题描述 假设我某个页面上使用了<svg>&#xff0c;其中包括一个<circle>。我希望实现的是&#xff1a;在circle上点击某个位置后&#xff0c;拖动&#xff0c;出现圆弧状阴影。实现效果为&#xff1a; 解决思路 要实现这个效果…

Android 使用 Canvas 和 Paint 实现圆形图片

学习笔记 效果展示: 全部代码: public class YuanActivity extends AppCompatActivity {private ActivityYuanBinding binding;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 通过 DataBinding 获取布局文件binding …

python怎么将字母大写

Python中有三种将字母转换为大写的方法&#xff1a;upper()、capitalize()、title()。 下面通过实例给大家介绍具体用法&#xff1a; str "www.php.com" print(str.upper()) # 把所有字符中的小写字母转换成大写字母 print(str.lower()) # 把所有字…