DockerFile详细学习

news2025/2/7 8:15:45

目录

1.DockerFile介绍

2.DockerFile常用指令

3.指令详细讲解

4.实例

构建Node-Exporter

构建Alertmanager

构建Mariadb


1.DockerFile介绍

什么是 Dockerfile?

Dockerfile 是一个文本文件,包含了构建 Docker 镜像的所有指令。

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。通过定义一系列命令和参数,Dockerfile 指导 Docker 构建一个自定义的镜像。

2.DockerFile常用指令

FROM

指定基础镜像,用于后续的指令构建

RUN

在构建镜像中执行的命令

CMD

指定创建容器时的默认命令(可以被覆盖)

ENTRYPOINT

设置容器创建时的主要命令(不可以被覆盖)

EXPOSE

声明容器运行时监听的特定网络端口

ENV

在容器内设置环境变量

ADD

将文件或目录远程URL复制到镜像内

COPY

将文件或目录复制到镜像中

VOLUME

为容器创建挂载点或声明卷

WORKDIR

设置后续指令的工作目录

USER

指定后续指令的用户上下文

ARG

定义在构建过程中传递给构建器的变量

3.指令详细讲解

FROM

说明: 指定基础镜像,Docker镜像的构建是从这个基础镜像开始的。它是 Dockerfile 中必须的第一条指令。比如,FROM ubuntu:20.04 指定了使用 Ubuntu 20.04 作为基础镜像。

RUN

说明: 在镜像构建过程中执行命令。常用于安装软件包、配置文件、环境等。比如,RUN apt-get update 会在镜像构建时更新软件包列表。

CMD

说明: 设置容器启动时的默认命令。CMD 只是一个默认值,可以通过 docker run 时指定其他命令来覆盖。如果 CMD 没有指定,容器将无法运行。比如,CMD ["echo", "Hello World"]。

ENTRYPOINT

说明: 设置容器启动时的主命令。与 CMD 不同,ENTRYPOINT 设置的命令不可被覆盖。通常与 CMD 一起使用来指定默认参数。比如,ENTRYPOINT ["python3"] 设置容器启动时执行 python3。

EXPOSE

说明: 声明容器在运行时监听的端口。EXPOSE 不会实际开放端口,而是作为一种文档和提醒用途,用来告知其他开发者容器监听了哪些端口。比如,EXPOSE 8080 声明容器在运行时监听端口 8080。

ENV

说明: 设置环境变量。环境变量可以在容器内使用,常用于配置文件或程序。比如,ENV APP_ENV=production 设置了一个名为 APP_ENV 的环境变量。

ADD

说明: 将文件、目录或远程URL复制到镜像中。除了复制本地文件,还可以解压归档文件,甚至从 URL 下载文件。比如,ADD ./app /usr/src/app 会将本地的 app 目录复制到镜像中的 /usr/src/app。

COPY

说明: 与 ADD 类似,用于将本地文件或目录复制到镜像中。但不同的是,COPY 不会解压归档文件,也不支持从 URL 下载文件。比如,COPY ./app /usr/src/app。

VOLUME

说明: 在容器中创建挂载点,并声明挂载卷。这个指令帮助你在容器和宿主系统或其他容器之间共享数据。比如,VOLUME ["/data"] 创建了一个挂载点,容器的 /data 目录可以作为挂载卷使用。

WORKDIR

说明: 设置后续指令的工作目录。所有后续指令都会在这个目录下执行。如果目录不存在,WORKDIR 会创建它。比如,WORKDIR /app 设置当前工作目录为 /app。

USER

说明: 设置后续指令的用户上下文。可以用来指定某个用户来执行后续的命令或运行容器。比如,USER appuser 指定容器在执行后续指令时使用 appuser 用户。

ARG

说明: 定义在构建过程中传递给构建器的变量。这些变量只能在构建阶段使用,不能在容器运行时使用。可以在 docker build 时通过 --build-arg 传递值。比如,ARG VERSION=1.0 定义了一个变量 VERSION,可以在构建时使用。

4.实例

构建Node-Exporter

编写Dockerfile文件构建exporter镜像,要求基于centos完成Node-Exporter服务的安装与配置,并设置服务开机自启。(需要的包在Technology_packageV1.0.iso中Monitor.tar.gz)

(1)基础镜像:centos:centos7.9.2009;

(2)使用二进制包node_exporter-0.18.1.linux-amd64.tar.gz安装node-exporter服务;

(3)声明端口:9100;

(4)设置服务开机自启。

请使用docker build命令进行构建镜像monitor-exporter:v1.0并使用 docker run 命令运行该容器。

DockerFile:

#基础镜像
FROM centos:centos7.9.2009
#添加文件并自动解压
ADD node_exporter-0.18.1.linux-amd64.tar.gz /opt/
#将启动命令放在/usr/local/bin下
RUN mv /opt/node_exporter-0.18.1.linux-amd64/node_exporter /usr/local/bin
#声明端口
EXPOSE 9100
#容器启动命令
CMD ["node_exporter"] 

构建镜像:

[root@docker dockerfile]# docker build -t monitor-exporter:v1.0 -f Dockerfile .

指令最后一个 . 是上下文路径,上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

验证开机自启生效:

[root@docker dockerfile]# docker run -d --name exporter-test monitor-exporter:v1.0 && sleep 5 && docker exec exporter-test ps -aux && docker rm -f exporter-test

36d5abb13c32b8fcfd05e19fb1ffe697fa847ac1d1e0d735f80d7f79a0bc588b

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root          1  0.3  0.1 114828  8228 ?        Ssl  11:29   0:00 node_exporter

root         10  0.0  0.0  51732  1700 ?        Rs   11:29   0:00 ps -aux

exporter-test

构建Alertmanager

编写Dockerfile文件构建alert镜像,要求基于centos完成Alertmanager服务的安装与配置,并设置服务开机自启。(需要的包在Technology_packageV1.0.iso中Monitor.tar.gz)

(1)基础镜像:centos:centos7.9.2009

(2)使用提供的二进制包alertmanager-0.19.0.linux-amd64.tar.gz安装Alertmanager服务;

(3)声明端口:9093、9094;

(4)设置服务开机自启。

请使用docker build命令进行构建镜像monitor-alert:v1.0并使用 docker run 命令运行该容器。

DockerFile:

#基础镜像
FROM centos:centos7.9.2009
#工作目录
WORKDIR /usr/local/bin
#将文件复制并解压
COPY alertmanager-0.19.0.linux-amd64.tar.gz . 
RUN tar -xzf alertmanager-0.19.0.linux-amd64.tar.gz && rm -f alertmanager-0.19.0.linux-amd64.tar.gz
#切换了工作木录
WORKDIR /usr/local/bin/alertmanager-0.19.0.linux-amd64
#声明端口
EXPOSE 9093 9094
#容器启动命令
CMD ["./alertmanager"]

构建镜像并查看是否启动:

[root@docker dockerfile]# docker build -t monitor-alert:v1.0 -f Dockerfile .
[root@docker dockerfile]# docker run -d --name alert-test monitor-alert:v1.0 && sleep 5 && docker exec alert-test ps -aux && docker rm -f alert-test
fa503911026354e3b97910fe53039359d945d4d5fc7e8180de0717e2eef4d586
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  1.2  0.2 123152 21024 ?        Ssl  11:46   0:00 ./alertmanager
root         15  0.0  0.0  51732  1704 ?        Rs   11:46   0:00 ps -aux
alert-test

构建Mariadb

编写 Dockerfile-mariadb 文件构建 blog-mysql:v1.0 镜像,要求基于 centos完成MariaDB 服务的安装与配置,并设置服务开机自启。

1)基础镜像:centos:7.9.2009;

2)安装 MariaDB 服务并设置 root 用户的密码为 root;

3)创建数据库 djangoblog 并将 sqlfile.sql 导入该数据库;

4)声明端口:3306;并设置开机自启动。

DockerFile:

FROM centos:centos7.9.2009
#yum源操作
RUN rm -rf /etc/yum.repos.d/*
COPY yum/ /root/yum
COPY yum.repo /etc/yum.repos.d/
# 安装 MariaDB
RUN yum -y install mariadb mariadb-server && yum clean all
# 复制 SQL 文件
COPY sqlfile.sql /root/sqlfile.sql
# 初始化 MariaDB
RUN mysql_install_db --user=root && \
    mysqld_safe --user=root & \
    sleep 8 && \
    mysqladmin -u root password 'root' && \
    mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; FLUSH PRIVILEGES;" && \
    mysql -uroot -proot -e "CREATE DATABASE djangoblog; USE djangoblog; SOURCE /root/sqlfile.sql;"
# 开放 3306 端口
EXPOSE 3306
# 启动 MariaDB
CMD ["mysqld_safe", "--user=root"]

检查是否可用:

[root@docker dockerfile]# docker run -d --name mariadb-test blog-mysql:v1.0 && sleep 15  && docker exec mariadb-test mysql -uroot -proot -e "use djangoblog;show tables" && docker ps | grep mariadb-test && docker rm -f mariadb-test
bc4e13d1a7555f3a15e5dad5b99390593f594c6fd6dcc16b70d4aa0bf8196e1e
Tables_in_djangoblog
accounts_bloguser
accounts_bloguser_groups
accounts_bloguser_user_permissions
auth_group
auth_group_permissions
auth_permission
blog_article
blog_article_tags
blog_blogsettings
blog_category
blog_links
blog_sidebar
blog_tag
comments_comment
django_admin_log
django_content_type
django_migrations
django_session
django_site
oauth_oauthconfig
oauth_oauthuser
owntracks_owntracklog
servermanager_commands
servermanager_emailsendlog
bc4e13d1a755   blog-mysql:v1.0   "mysqld_safe --user=…"   16 seconds ago   Up 15 seconds   3306/tcp   mariadb-test
mariadb-test

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

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

相关文章

寒假2.5

题解 web:[网鼎杯 2020 朱雀组]phpweb 打开网址,一直在刷新,并有一段警告 翻译一下 查看源码 每隔五秒钟将会提交一次form1,index.php用post方式提交了两个参数func和p,func的值为date,p的值为Y-m-d h:i:s a 执行fu…

中国销冠,比亚迪1月销量超30万台,出口量飙升83%

近日,比亚迪公布的 1 月销量数据成为了汽车行业热议的焦点,比亚迪凭借 300538 辆的销量成绩,进一步巩固了其在新能源汽车市场的统治力,再次稳坐中国品牌汽车市场销冠宝座。 在 1 月的销售数据中,比亚迪王朝丨海洋系列无…

大数据sql查询速度慢有哪些原因

1.索引问题 可能缺少索引,也有可能是索引不生效 2.连接数配置:连接数过少/连接池比较小 连接数过 3.sql本身有问题,响应比较慢,比如多表 4.缓存池大小 可能是缓存问题(命中率>99%) 5.加了锁 6. redis&a…

2 fastAPI请求参数

1. 路径参数 (Path Parameters) 路径参数是 URL 路径的一部分,通常用于标识资源的唯一性。路径参数在 FastAPI 中通过在路由装饰器中使用大括号 {} 来定义。 获取路径参数的方式 from fastapi import FastAPIapp FastAPI()app.get("/items/{item_id}"…

为何实现大语言模型的高效推理以及充分释放 AI 芯片的计算能力对于企业级落地应用来说,被认为具备显著的研究价值与重要意义?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ AI 芯片:为人工智能而生的 “大脑” AI 芯片,又称人工智能加速器或计算卡,是专为加速人工智能应用,特别是深度学习任务设计的专用集成电路(A…

C++11详解(二) -- 引用折叠和完美转发

文章目录 2. 右值引用和移动语义2.6 类型分类(实践中没什么用)2.7 引用折叠2.8 完美转发2.9 引用折叠和完美转发的实例 2. 右值引用和移动语义 2.6 类型分类(实践中没什么用) C11以后,进一步对类型进行了划分&#x…

AI 编程工具—Cursor 进阶篇 文章改写生成整理爬取

AI 编程工具—Cursor 进阶篇 文章改写生成整理爬取 其实对做自媒体的人而言,整理素材其实是一件非常耗时的事情,今天我们来看一下如何使用Cursor来帮我们解决这些问题,首先我们要建一个单独的项目,因为这个项目不涉及任何代码操作,只是文字相关的事情,还有就是这个项目需…

Yageo国巨的RC系列0402封装1%电阻库来了

工作使用Cadence多年,很多时候麻烦的就是整理BOM,因为设计原理图的时候图省事,可能只修改value值和封装。 但是厂家,规格型号,物料描述等属性需要在最后的时候一行一行的修改,繁琐又容易出错,过…

nginx伪静态配置解释和Nginx 常见的配置

文章目录 禁止访问 runtime 和 application 目录rewrite 对 URL 进行重写或重定向301重定向root 静态资源路径处理alias 路径映射try_files 伪静态规则Nginx 配置有许多其他常见的场景和使用方式 1. **基本的反向代理配置**2. **负载均衡配置**3. **限制访问(IP 限…

AI安全最佳实践:AI云原生开发安全评估矩阵(下)

上篇小李哥带大家一起了解了什么是AI应用云原生开发安全评估矩阵,并且介绍了利用该矩阵如何确定我们云上AI应用的安全评估范围,接下来我们将继续本系列的下篇,基于该安全评估矩阵设计和实施我们系统应具备的安全控制。 优先考虑的安全控制 …

Windows DeepSeek API调用基础教程-Python

DeepSeek API 调用🚀 在最近DeepSeek大火之后,在各个媒体上都能看到对这个大模型的报道,这个使用MoE的架构的大模型,在使用体验上,确实让我眼前一亮,我自己平时也是已经在用着GPT-o1,对比下来发…

达梦数据库从单主模式转换为主备模式

目录标题 达梦数据库单主转主备配置笔记前期准备服务器环境数据库安装磁盘空间 流程流程图说明 详细步骤1. 检查主库归档模式2. 配置主库配置文件dm.ini 文件dmmal.ini 文件dmarch.ini 文件 3. 备份主库数据库4. 备库配置新建备库数据库配置备库配置文件dm.ini 文件复制主库的 …

SpringUI Web高端动态交互元件库

Axure Web高端动态交互元件库是一个专为Web设计与开发领域设计的高质量资源集合,旨在加速原型设计和开发流程。以下是关于这个元件库的详细介绍: 一、概述 Axure Web高端动态交互元件库是一个集成了多种预制、高质量交互组件的工具集合。这些组件经过精…

ES冷热数据分离配置

冷热数据是根据索引创建时间来进行迁移的。一旦迁移到冷数据节点,则无法再恢复成热数据,因为热数据节点中该索引已经没有分片存在了。 基于Docker搭建ES集群,并设置冷热数据节点 配置冷热数据迁移策略 PUT https://192.168.x.xx:19200/_ilm/policy/my…

七大排序思想

目录 七大排序的时间复杂度和稳定性 排序 插入排序 简单插入排序 希尔排序 选择排序 简单选择排序 堆排序 交换排序 冒泡排序 快速排序 快排的递归实现 hoare版本的快排 挖坑法的快排 双指针法的快排 快排的非递归 归并排序 归并的递归实现 归并的非递归实现…

制作PE启动盘(内含Win11 iso镜像)

前言 本文用于记录制作PE启动盘过程,学习记录用,如有不对请指出,谢谢! 参考视频: 1. 微PE下载:https://www.bilibili.com/video/BV1vT4y1n7JX/?spm_id_from333.788.top_right_bar_window_history.conte…

css字体样式与文本样式详解

目录 一、CSS字体样式 1. 字体类型(font-family) 2. 字体大小(font-size) 3. 字体粗细(font-weight) 4. 字体风格(font-style) 5. 字体颜色(color) 6. …

游戏引擎学习第89天

回顾 由于一直没有渲染器,终于决定开始动手做一个渲染器,虽然开始时并不确定该如何进行,但一旦开始做,发现这其实是正确的决定。因此,接下来可能会花一到两周的时间来编写渲染器,甚至可能更长时间&#xf…

Linux学习笔记16---高精度延时实验

延时函数是很常用的 API 函数,在前面的实验中我们使用循环来实现延时函数,但是使用循环来实现的延时函数不准确,误差会很大。虽然使用到延时函数的地方精度要求都不会很严格( 要求严格的话就使用硬件定时器了 ) ,但是延时函数肯定…

杨氏数组中查找某一数值是否存在

判断数据是否存在于杨氏矩阵中 (小米真题) 题目:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。 要求:时间复杂度小于O(N) …