DockerFile详细学习
目录
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-test36d5abb13c32b8fcfd05e19fb1ffe697fa847ac1d1e0d735f80d7f79a0bc588bUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.3 0.1 114828 8228 ? Ssl 11:29 0:00 node_exporterroot 10 0.0 0.0 51732 1700 ? Rs 11:29 0:00 ps -auxexporter-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
相关文章:
DockerFile详细学习
目录 1.DockerFile介绍 2.DockerFile常用指令 3.指令详细讲解 4.实例 构建Node-Exporter 构建Alertmanager 构建Mariadb 1.DockerFile介绍 什么是 Dockerfile? Dockerfile 是一个文本文件,包含了构建 Docker 镜像的所有指令。 Dockerfile 是一…...
Windows Docker笔记-简介摘录
Docker是一个开源的容器化平台,可以帮助开发人员将应用程序与其依赖项打包在一个独立的容器中,然后在任何安装的Docker的环境中快速、可靠地运行。 几个基本概念和优势: 1. 容器 容器是一个轻量级、独立的运行环境,包含了应用程…...
TeamSpeak开黑频道加入 —— 点歌机器人 (细致讲解100%学会)
文章目录 前言:搭建Ubuntu云服务器选择服务器:打开防火墙(前置工作):下载Xshell 连接: 创建机器人工作路径创建新用户teamspeak:升级新用户teamspeak的访问权限:切换为teamspeak用户并为机器人创建文件夹: 下载机器人本体安装依赖库:下载TS3…...
2025简约的打赏系统PHP网站源码
源码介绍 2025简约的打赏系统PHP网站源码 源码上传服务器,访问域名/install.php安装 支持自定义金额打赏 集成支付宝当面付 后台管理系统 订单记录查询 效果预览 源码获取 2025简约的打赏系统PHP网站源码...
网络安全 | 零信任架构:重构安全防线的未来趋势
网络安全 | 零信任架构:重构安全防线的未来趋势 一、前言二、零信任架构的核心概念与原理2.1 核心概念2.2 原理 三、零信任架构的关键技术组件3.1 身份管理与认证系统3.2 授权与访问控制系统3.3 网络与安全监测系统3.4 加密与数据保护技术 四、零信任架构与传统安全…...
JavaScript系列(62)--实时通信系统实现详解
JavaScript实时通信系统实现详解 🔄 今天,让我们深入探讨JavaScript的实时通信系统实现。实时通信是现代Web应用中不可或缺的一部分,它能够提供即时的数据交互和更好的用户体验。 WebSocket通信基础 🌟 💡 小知识&am…...
【蓝桥杯嵌入式】2_LED
1、电路图 74HC573是八位锁存器,当控制端LE脚为高电平时,芯片“导通”,LE为低电平时芯片“截止”即将输出状态“锁存”,led此时不会改变状态,所以可通过led对应的八个引脚的电平来控制led的状态,原理图分析…...
代码随想录day06
242.有效的字母异位词 刚学哈希表想着使用unordered_set来实现,结果无法通过,原因是对字母异位词理解有问题,字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。对字母出现的次数有要求&am…...
Spring @PropertySource:让你的应用配置更加模块化和可维护
PropertySource注解在Spring中的作用,就像是给Spring应用配了一个“外部配置箱”。 想象一下,你在开发一个Spring应用时,有很多配置信息需要设置,比如数据库的连接信息、应用的某些功能开关等。如果这些信息都硬编码在代码中&…...
【Java】MyBatis动态SQL
在MyBatis中使用动态SQL语句。 动态SQL是指根据参数数据动态组织SQL的技术。 生活中的案例: 在京东上买东西时,用户搜索商品,可以选择筛选条件,比如品牌,价格,材质等,也可以不使用筛选条件。这时…...
旅行社项目展示微信小程序功能模块和开发流程
旅行社当前旅游线路的程序(微信小程序),旨在帮助旅行社更高效地管理线下活动预订,同时为客户提供便捷的报名和查看功能。适用于短途游、团队建设等活动,支持在线预订、缴费及订单管理,可根据用户需求定制更多个性化服务,为公司提升品牌知名度与客户体验。通过简洁明了的…...
litemall,又一个小商场系统
litemall Spring Boot后端 Vue管理员前端 微信小程序用户前端 Vue用户移动端 代码地址:litemall: 又一个小商城。 litemall Spring Boot后端 Vue管理员前端 微信小程序用户前端 Vue用户移动端...
WGCLOUD监控系统部署教程
官网地址:下载WGCLOUD安装包 - WGCLOUD官网 第一步、环境配置 #安装jdk 1、安装 EPEL 仓库: sudo yum install -y epel-release 2、安装 OpenJDK 11: sudo yum install java-11-openjdk-devel 3、如果成功,你可以通过运行 java …...
Python大数据可视化:基于Python的王者荣耀战队的数据分析系统设计与实现_flask+hadoop+spider
开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 比赛信息管理 看板展示 系统管理 摘要 本文使用Python与…...
(苍穹外卖)项目结构
苍穹外卖项目结构 后端工程基于 maven 进行项目构建,并且进行分模块开发。 1). 用 IDEA 打开初始工程,了解项目的整体结构: 对工程的每个模块作用说明: 序号名称说明1sky-take-outmaven父工程,统一管理依赖版本&…...
ASP.NET Core筛选器Filter
目录 什么是Filter? Exception Filter 实现 注意 ActionFilter 注意 案例:自动启用事务的筛选器 事务的使用 TransactionScopeFilter的使用 什么是Filter? 切面编程机制,在ASP.NET Core特定的位置执行我们自定义的代码。…...
ChatGPT怎么回事?
纯属发现,调侃一下~ 这段时间deepseek不是特别火吗,尤其是它的推理功能,突发奇想,想用deepseek回答一些问题,回答一个问题之后就回复服务器繁忙(估计还在被攻击吧~_~) 然后就转向了GPT…...
软件工程-可行性研究
包含 技术可行性 使用现有技术能实现这个系统吗? 经济可行性 这个系统的经济效益能超过它的开发成本吗? 操作可行性 系统的操作方式在这个用户组织内行得通吗? 必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性 可行性…...
园区网设计与实战
想做一个自己学习的有关的csdn账号,努力奋斗......会更新我计算机网络实验课程的所有内容,还有其他的学习知识^_^,为自己巩固一下所学知识。 我是一个萌新小白,有误地方请大家指正,谢谢^_^ 文章目录 前言 这个实验主…...
spy-debugger + Charles 调试移动端/内嵌小程序H5
简介说明: PC端可以用F12进行console等进行调试,但移动端App中使用webview就无法进行实时调试,针对这种情况 1. 安装 全局安装 spy-debugger sudo npm install spy-debugger -g // window不用加sudo2. spy-debugger 证书 其实spy-debugg…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
