docker学习笔记(四)--DockerFile

news2024/12/28 3:29:03

文章目录

  • 一、什么是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.coloradmin.cn/o/2255387.html

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

相关文章

创造未来:The Sandbox 创作者训练营如何赋能全球创造者

创作者训练营让创造者有能力打造下一代数字体验。通过促进合作和提供尖端工具&#xff0c;The Sandbox 计划确保今天的元宇宙是由一个个创造者共同打造。 2024 年 5 月&#xff0c;The Sandbox 推出了「创作者训练营」系列&#xff0c;旨在重新定义数字创作。「创作者训练营」系…

基于Pyhton的人脸识别(Python 3.12+face_recognition库)

使用Python进行人脸编码和比较 简介 在这个教程中&#xff0c;我们将学习如何使用Python和face_recognition库来加载图像、提取人脸编码&#xff0c;并比较两个人脸是否相似。face_recognition库是一个强大的工具&#xff0c;它基于dlib的深度学习模型&#xff0c;可以轻松实…

抽象工厂模式的理解和实践

在软件开发中&#xff0c;设计模式是解决常见问题的最佳实践。抽象工厂模式是一种创建型设计模式&#xff0c;提供了一种创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们的具体类。本文将详细解释抽象工厂模式的概念、结构、优点、缺点&#xff0c;并通过Java代…

Hadoop生态圈框架部署 伪集群版(五)- HBase伪分布式部署

文章目录 前言一、Hbase伪分布式部署&#xff08;手动部署&#xff09;1. 下载Hbase2. 上传安装包3. 解压HBase安装包4. 配置HBase配置文件4.1 修改hbase-env.sh配置文件4.2 修改hbase-site.xml配置文件4.3 修改regionservers配置文件4.4 删除hbase中slf4j-reload4j-1.7.33.jar…

【css】基础(二)

本专栏内容为&#xff1a;前端专栏 记录学习前端&#xff0c;分为若干个子专栏&#xff0c;html js css vue等 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;css专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &a…

链式设计模式

链式设计模式——装饰器模式和职责链模式 装饰模式 定义&#xff1a; 指在不改变现有对象结构的情况下&#xff0c;动态地给该对象增加一些职责&#xff08;即增加其额外功能&#xff09;的模式。 结构 装饰&#xff08;Decorator&#xff09;模式中的角色&#xff1a; 抽…

电子电气架构 --- E/E(电子电气架构)的重新定义

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所谓鸡汤&#xff0c;要么蛊惑你认命&#xff0c;要么怂恿你拼命&#xff0c;但都是回避问题的根源&…

app-1 App 逆向环境准备(mumu模拟器+magisk+LSPosed+算法助手+抓包(socksDroid+charles)+Frida环境搭建

一、前言 本篇是基于 mumu模拟器 进行环境配置记录。&#xff08;真机的后面博客记录&#xff09; 二、mumu模拟器magiskLSPosed算法助手 2.1、mumu模拟器 选择 mumu 模拟器&#xff0c;下载地址&#xff1a;https://mumu.163.com 安装完成后打开&#xff0c;找到设置中心进…

【服务器问题】xshell 登录远程服务器卡住( 而 vscode 直接登录不上)

打开 xshell ssh 登录远程服务器&#xff1a;卡在下面这里&#xff0c;迟迟不继续 当 SSH 连接卡在 Connection established. 之后&#xff0c;但没有显示远程终端提示符时&#xff0c;这通常意味着连接已经成功建立&#xff0c;说明不是网络连接和服务器连接问题&#xff0c;…

Python Selenium 各浏览器驱动下载与配置使用(详细流程)

1、安装 pip install selenium 2、浏览器驱动下载 Chrome(google)浏览器驱动 下载地址&#xff1a;http://chromedriver.storage.googleapis.com/index.html 或 https://sites.google.com/a/chromium.org/chromedriver/home . 下载地址&#xff1a;http://chromedriver.stor…

Redis的认识

目录 1. Redis的特性2. Redis的使用场景2.1 Redis可以做什么&#xff1f;2.2 Redis不可以做什么 3. Redis的安装和启动4. Redis的基本全局命令4.1 GET和SET命令4.2 KEYS指令4.3 EXISTS指令4.4 DEL指令4.5 EXPIRE指令4.6 TTL指令4.7 TYPE指令 5. 数据类型和内部编码6. 单线程架构…

IntelliJ+SpringBoot项目实战(28)--整合Beetl模板框架

在前面的文章里介绍过freemarker&#xff0c;thymeleaf模板引擎&#xff0c;本文介绍另一个性能超高的模板引擎---Beetl&#xff0c;据说此模板引擎的性能远超Freemarker。官网的说法是&#xff0c;Beetl 远超过主流java模板引擎性能(引擎性能5-6倍于FreeMarker&#xff0c;2倍…

全面解析DApp开发中的智能合约设计

在DApp的开发过程中&#xff0c;智能合约的设计起到了至关重要的作用。智能合约是运行在区块链上的程序&#xff0c;负责处理和执行DApp中的逻辑、交易和数据存储。下面我们将深入探讨智能合约的设计原则、挑战和优化方法&#xff0c;帮助开发者掌握如何设计高效、安全的智能合…

利用Grounding DINO进行自动标注——目标检测任务——YOLO格式

关于Grounding DINO的环境搭建可以参考我的以前的博客&#xff0c;链接如下所示 如何在Linux上离线部署Grounding DINO-CSDN博客 这个博客主要来介绍如何利用Grounding DINO这个项目去进行目标检测的自动化标注。并且给出了相关的代码已经实验验证。 1.数据集准备 2. 开始实…

1.使用docker 部署redis Cluster模式 集群3主3从

1.使用docker 部署redis Cluster模式 集群3主3从 1.1 先安装docker 启动docker服务&#xff0c;拉取redis镜像 3主3从我们要在docker启动6个容器docker run --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-…

开发类似的同款小程序系统制作流程

很多老板想要开发一款和别人家类似的同款小程序系统&#xff0c;但是不知道该怎么开发制作&#xff0c;本文就为大家详细介绍一下开发类似的同款小程序的流程为大家做参考。 一、前期准备找到对标小程序&#xff1a;首先&#xff0c;需要找到你想要模仿的同款小程序&#xff0…

Jenkins凭据管理及使用详解

简介:Jenkins凭据管理是指对Jenkins中存储的敏感信息进行管理的功能,这些信息通常用于认证和授权,以确保Jenkins能够安全地与其他系统和服务进行交互。以下是关于Jenkins凭据管理添加及作用的详细介绍: 一、Jenkins凭据管理的添加 进入凭据管理页面: 登录Jenkins后,点击…

车载VR可视化解决方案

车载VR可视化解决方案是通过融合跟踪用户头部运动的特殊预测算法与惯性测量数据而开发的。该系统将大范围虚拟现实跟踪技术与IMU传感器相结合&#xff0c;为VR和AR应用打造了一套全面的运动跟踪与渲染流程&#xff0c;极大地方便了虚拟现实头显制造商定制可视化流程。 该车载VR…

鸿蒙实现数据管理

目录&#xff1a; 1、鸿蒙实现数据管理的三种方式2、用户首选项3、键值型数据管理3.1、获取KVManager实例&#xff0c;用于管理数据库对象3.2、创建并获取键值数据库3.3、调用put()方法向键值数据库中插入数据3.4、调用get()方法获取指定键的值3.5、调用delete()方法删除指定键…

【环境搭建】WordPress本地部署搭建及历史版本插件安装(windows系统)

&#x1f3d8;️个人主页&#xff1a; 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞&#x1f44d;收藏&#x1f497;支持一下哦 【环境搭建】WordPress本地部署搭建及历史版本插件安装&#xff08;windows系统&#xff09; WordPress搭建环境部署&#xff08;…