当前位置: 首页 > news >正文

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&#xf…...

软件工程-可行性研究

包含 技术可行性 使用现有技术能实现这个系统吗? 经济可行性 这个系统的经济效益能超过它的开发成本吗? 操作可行性 系统的操作方式在这个用户组织内行得通吗? 必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性 可行性…...

园区网设计与实战

想做一个自己学习的有关的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…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色&#xf…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

Web后端基础(基础知识)

BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...