docker镜像fauria/vsftpd dockerfile解析(ENV命令,**占位符**)dockerfile命令、dockerfile指令

news2024/11/16 21:23:29

文章目录

    • fauria/vsftpd
      • dockerfile原始文件
      • dockerfile解析

在这里插入图片描述

fauria/vsftpd

fauria/vsftpd是一个由Docker Hub用户"fauria"创建的Docker镜像。这个镜像是基于CentOS 7构建的,包含了vsftpd(Very Secure FTP Daemon)服务,并支持被动模式和虚拟用户。通过使用这个镜像,用户可以快速地部署一个vsftpd服务器,并根据需要进行配置和定制。

但是注意,由于使用的基础镜像为centos7,这个镜像不支持arm架构。

dockerhub链接:
https://hub.docker.com/r/fauria/vsftpd/dockerfile

dockerfile原始文件

FROM centos:7

ARG USER_ID=14
ARG GROUP_ID=50

MAINTAINER Fer Uria <fauria@gmail.com>
LABEL Description="vsftpd Docker image based on Centos 7. Supports passive mode and virtual users." \
	License="Apache License 2.0" \
	Usage="docker run -d -p [HOST PORT NUMBER]:21 -v [HOST FTP HOME]:/home/vsftpd fauria/vsftpd" \
	Version="1.0"

RUN yum -y update && yum clean all
RUN yum install -y \
	vsftpd \
	db4-utils \
	db4 \
	iproute && yum clean all

RUN usermod -u ${USER_ID} ftp
RUN groupmod -g ${GROUP_ID} ftp

ENV FTP_USER **String**
ENV FTP_PASS **Random**
ENV PASV_ADDRESS **IPv4**
ENV PASV_ADDR_RESOLVE NO
ENV PASV_ENABLE YES
ENV PASV_MIN_PORT 21100
ENV PASV_MAX_PORT 21110
ENV XFERLOG_STD_FORMAT NO
ENV LOG_STDOUT **Boolean**
ENV FILE_OPEN_MODE 0666
ENV LOCAL_UMASK 077
ENV REVERSE_LOOKUP_ENABLE YES
ENV PASV_PROMISCUOUS NO
ENV PORT_PROMISCUOUS NO

COPY vsftpd.conf /etc/vsftpd/
COPY vsftpd_virtual /etc/pam.d/
COPY run-vsftpd.sh /usr/sbin/

RUN chmod +x /usr/sbin/run-vsftpd.sh
RUN mkdir -p /home/vsftpd/
RUN chown -R ftp:ftp /home/vsftpd/

VOLUME /home/vsftpd
VOLUME /var/log/vsftpd

EXPOSE 20 21

CMD ["/usr/sbin/run-vsftpd.sh"]

dockerfile解析

这是用于构建一个基于CentOS 7的vsftpd镜像的Dockerfile文件,下面将对它解释:

  1. FROM centos:7:指定基础镜像为CentOS 7。
  2. ARG USER_ID=14ARG GROUP_ID=50:定义了两个构建参数,用于指定vsftpd用户和组的ID。
  3. MAINTAINER Fer Uria <fauria@gmail.com>:指定镜像的维护者信息。
  4. LABEL:定义了一些标签,包括描述、许可证、用法和版本等信息。
  5. RUN yum -y update && yum clean all:更新系统并清理yum缓存。

(清理yum缓存的目的是为了减少镜像的大小,并且可以避免在构建镜像时下载重复的软件包。当使用yum install命令安装软件包时,yum会将下载的软件包存储在缓存目录中,以便在以后的安装中重复使用。然而,在构建Docker镜像时,这些缓存文件并不需要包含在镜像中,因为它们只会增加镜像的大小,而不会对镜像的功能产生影响。
通过在Dockerfile中添加yum clean all命令,可以清理yum缓存,删除已下载的软件包和元数据文件。这样可以减小镜像的体积,并且在构建镜像时不会包含不必要的缓存文件。这对于减少镜像的大小和加快构建过程都是有益的。)

  1. RUN yum install -y \ vsftpd \ db4-utils \ db4 \ iproute && yum clean all:安装vsftpd、db4-utils、db4和iproute等软件包,并清理yum缓存。

db4-utilsdb4iproute是在Dockerfile中安装的软件包,它们的作用如下:

  • db4-utils:这是Berkeley DB的实用工具包,它提供了一些用于管理和操作Berkeley DB数据库的命令行工具,如db_dumpdb_load等。在vsftpd中,可能会使用Berkeley DB来存储虚拟用户的认证信息。

  • db4:这是Berkeley DB的运行时库,它提供了对Berkeley DB数据库的访问功能。在vsftpd中,可能会使用Berkeley DB库来读取和验证虚拟用户的认证信息。

  • iproute:这是一个网络工具包,它提供了一些用于配置和管理网络接口、路由表、流量控制等的命令行工具,如ip命令。在vsftpd中,可能会使用ip命令来配置网络接口和路由,以支持被动模式的数据传输。

  1. RUN usermod -u ${USER_ID} ftp:修改ftp用户的ID为构建参数中指定的值。
  2. RUN groupmod -g ${GROUP_ID} ftp:修改ftp组的ID为构建参数中指定的值。

执行RUN usermod -u ${USER_ID} ftpRUN groupmod -g ${GROUP_ID} ftp的目的是修改vsftpd服务所使用的ftp用户和组的ID。
在Docker容器中,每个用户和组都有一个唯一的ID。默认情况下,CentOS 7中的ftp用户和组的ID是14和50。然而,为了避免与宿主机或其他容器中的用户和组冲突,我们可以通过构建参数来指定新的ID。
通过执行usermodgroupmod命令,我们可以修改ftp用户和组的ID为构建参数中指定的值。这样可以确保在容器中运行vsftpd服务时,使用的用户和组的ID是唯一的,并且不会与其他用户和组发生冲突。
这样做的好处是,可以更好地隔离容器中的用户和组,避免潜在的安全问题和冲突。同时,也可以更灵活地根据需要定制用户和组的ID,以适应不同的环境和需求。

  1. ENV:设置一系列环境变量,包括FTP用户、密码、被动模式的地址和端口等。

在Dockerfile中,ENV FTP_USER **String**中的String是一个占位符,表示需要替换为实际的字符串值。
ENV指令用于设置环境变量,其中FTP_USER是环境变量的名称,**String**是环境变量的值。在这里,**String**表示需要替换为实际的字符串值。
例如,如果要将FTP_USER设置为myuser,则可以将ENV FTP_USER **String**替换为ENV FTP_USER myuser
在构建Docker镜像时,可以通过在命令行中使用--build-arg参数来传递实际的字符串值,例如:

docker build --build-arg FTP_USER=myuser .

这样,在构建过程中,Docker将使用传递的值来替换**String**,并将FTP_USER设置为myuser
除此之外,还可以在运行容器时通过命令行参数来传递环境变量的值。
在运行容器时,可以使用-e--env参数来设置环境变量。例如,要将FTP_USER设置为myuser,可以使用以下命令:

docker run -e FTP_USER=myuser <image_name>

这样,在运行容器时,Docker将使用传递的值来设置FTP_USER环境变量。
同时,还可以使用--env-file参数来从文件中读取环境变量的值。例如,如果有一个名为env.txt的文件,其中包含了FTP_USER=myuser这一行,可以使用以下命令:

docker run --env-file env.txt <image_name>

这样,Docker将从env.txt文件中读取环境变量的值,并将其设置为容器中的环境变量。
无论是通过命令行参数还是通过文件来传递环境变量的值,都可以在运行容器时动态地设置环境变量,以适应不同的需求和配置。

  1. COPY:将本地文件复制到镜像中的指定位置。
  2. RUN chmod +x /usr/sbin/run-vsftpd.sh:给run-vsftpd.sh脚本添加可执行权限。
  3. RUN mkdir -p /home/vsftpd/:创建vsftpd的主目录。
  4. RUN chown -R ftp:ftp /home/vsftpd/:将vsftpd的主目录的所有权赋予ftp用户和组。
  5. VOLUME:定义了两个数据卷,分别用于存储vsftpd的主目录和日志文件。
  6. EXPOSE:声明容器将监听的端口号。

VOLUMEEXPOSE指令在Dockerfile中只是用来提供一些元数据信息,而不会自动进行挂载和端口映射。
VOLUME指令用于声明容器中的挂载点,以便其他人在构建和运行容器时知道哪些目录或文件是可以挂载的。但是,它并不会自动在容器中创建挂载点或将主机上的目录或文件与容器中的挂载点进行关联。要实际进行挂载,需要在运行容器时使用-v参数来指定挂载点。
同样地,EXPOSE指令用于声明容器将监听的端口,以便其他人在构建和运行容器时知道哪些端口是可以连接的。但是,它并不会自动将容器的端口映射到主机上的端口。要实际进行端口映射,需要在运行容器时使用-p参数来指定端口映射规则。
因此,VOLUMEEXPOSE指令在Dockerfile中只是提供一些元数据信息,实际的挂载和端口映射需要在运行容器时通过命令行参数来完成。

  1. CMD:指定容器启动时要执行的命令。

这个Dockerfile的作用是构建一个包含vsftpd服务的镜像,并设置了一些默认配置和环境变量。

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

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

相关文章

NASA网站曝严重漏洞,或将沦为黑客钓鱼网站?

美国国家航空航天局&#xff08;NASA&#xff09;天体生物学专用网站存在一个严重的安全漏洞&#xff0c;可能通过伪装带有NASA名称的危险URL来诱骗用户访问恶意网站。 太空旅行无疑是危险的。然而&#xff0c;在访问NASA网站的时候也有可能如此。Cybernews研究团队发现了一个N…

Scala之泛型详解

泛型用于指定类或方法可以接受任意类型参数&#xff0c;参数在实际使用时才被确定&#xff0c;泛型可以有效地增强程序的适用性&#xff0c;使用泛型可以使得类或方法具有更强的通用性。泛型的典型应用场景是集合及集合中的方法参数&#xff0c;可以说同 Java 一样&#xff0c;…

基于粒子群算法的无约束优化问题求解

基于粒子群算法的无约束优化问题求解 1 引言2 粒子群算法2.1 粒子群优化原理2.2 粒子群算法寻优策略与参数控制粒子群算法流程 3 粒子群算法求解无约束优化问题3.1 粒子群算法求解Sphere函数&#xff08;单峰测试函数&#xff09;3.2 Schwefels Problem 2.26&#xff08;多峰测…

chatgpt赋能python:Win7怎么安装Python?

Win7怎么安装Python&#xff1f; 如果你正在使用Windows 7操作系统&#xff0c;想要安装Python&#xff0c;那么你来对了地方。Python是一种利用广泛的编程语言&#xff0c;可用于开发Web应用程序、数据分析和科学计算、机器学习等各种领域。 在此篇文章中&#xff0c;我们会…

MATLAB matlab人脸识别源码+使用说明+操作说明内容清晰适合新手

程序运行界面&#xff1a; 部分代码&#xff1a; function varargout facerecg(varargin) % FACERECG MATLAB code for facerecg.fig % FACERECG, by itself, creates a new FACERECG or raises the existing % singleton*. % % H FACERECG returns the hand…

Revit中如何导入、导出明细表?

Revit中明细表的作用非常大&#xff0c;项目中的数据归类整理及统计都离不开它&#xff0c;今天给大家分享一下如何在Revit中进行明细表标准的导出及导入&#xff0c;减少在实际项目中的重复性工作。 1、首先在Revit中新建一个项目文件&#xff0c;在平面视图中随便画几条管道…

用git下载gitee上的项目资源

目录 用git下载gitee上的项目资源 用git 的clone 命令 然后到gitee上复制相关的下载地址&#xff1a; 粘贴到clone后面即可&#xff08;注意地址与clone之间有空格&#xff01;&#xff01;&#xff01;&#xff09; 运行结果&#xff1a; 用git下载gitee上的项目资源 用git…

学习vue2笔记

学习vue2笔记 文章目录 学习vue2笔记脚手架文件结构关于不同版本的Vuevue.config.js配置文件ref属性props配置项mixin(混入)插件scoped样式总结TodoList案例webStorage组件的自定义事件全局事件总线&#xff08;GlobalEventBus&#xff09;消息订阅与发布&#xff08;pubsub&am…

LeetCoda 打卡day53--动态规划之最长子序列

一个人的朝圣 — LeetCode打卡第52天 知识总结 Leetcode 1143. 最长公共子序列题目说明代码说明 Leetcode 53. 最大子数组和题目说明代码说明 Leetcode 1035. 不相交的线题目说明代码说明 知识总结 今天几道最长子序列的题目, 都可以用一个固定的模版完成. 理解其中递推公式的…

字典序最小回文串

字典序最小回文串 题目解读 给你一个由 小写英文字母 组成的字符串 s &#xff0c;你可以对其执行一些操作。在一步操作中&#xff0c;你可以用其他小写英文字母 替换 s 中的一个字符。 请你执行 尽可能少的操作 &#xff0c;使 s 变成一个 回文串 。如果执行 最少 操作次数…

DAY38——动态规划

步骤&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 题目一. 斐波那契数列 1. 确定dp数组以及下标的含义 dp[i]的定义为&#xff1a;第i个数的斐波那契数值是dp[i] 2. 确定递推公式 状态…

FFmpegFrameGrabber视频抽帧工具类

Bytedeco 通过视频链接进行关键帧抽取图片&#xff0c;利用FFmpegFrameGrabber对视频流进行抽帧处理。 一、引入POM依赖 <dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.4.1</version><…

TCP 拥塞状态机演进

下面是 TCP 拥塞状态机&#xff1a; 但它只是冰山一角&#xff0c;这只是 loss-based 状态机&#xff0c;实现一个完全的 delay-based cc 就对不上这个状态机。 该状态机来自 RFC5681&#xff0c;源自 RFC2581&#xff0c;RFC2001&#xff0c;大概在 1990 年代&#xff0c;l…

10分钟内创意爆发,这些头脑风暴技巧让你IDEA满满

当初道叔刚入广告行业&#xff0c;与同事经历了一次困扰的头脑风暴&#xff0c;老板让他们想出一个大集团公司年会的主题口号。我们7-8个团队成员耗费了一个下午的时间&#xff0c;提出了几十个提议&#xff0c;但最终硬是没有一个能满足需求。许多人可能也有过道叔这样的经历。…

Js保留树型数据指定层级

自定义一个树型的数据 const tree [{value: 1, label: "1",children: [{value: 11, label: "1-1",children: [{value: 111, label: "1-1-1"}]}]}, {value: 2, label: "2"}]保留指定层级的方法 function keepNodesAtLevel(data, level…

vue源码阅读之Watcher类

我们上次分析vue源码讲的是收集依赖&#xff0c;数据变化之后我们把依赖收集到dep类中&#xff0c;通过这个管理器进行管理。 里面有一个subs数组&#xff0c;用来存放依赖&#xff0c;并且定义了几个实例方法用来依赖进行添加&#xff0c;删除&#xff0c;通过操作。 比如ad…

mysql基础5——mysql主从

文章目录 一、基本了解二、主从原理三、主从复制3.1 从无到有3.1.1 服务器初始化3.1.2 配置主库3.1.3 配置从库3.1.4 效果验证 3.2 从有到无3.2.1 主库全备&#xff0c;并同步到从库3.2.2 配置主库3.2.3 配置从库3.2.4 效果验证 四、数据库运维4.1 几个参数4.2 查看进程列表 一…

【案例实战】高并发业务的多级缓存架构一致性解决方案

我们在高并发的项目中基本上都离不开缓存&#xff0c;那么既然引入缓存&#xff0c;那就会有一个缓存与数据库数据一致性的问题。 首先&#xff0c;我们先来看看高并发项目里面Redis常见的三种缓存读写模式。 Cache Aside 读写分离模式&#xff0c;是最常见的Redis缓存模式&a…

树莓派教程2023

摘要&#xff1a;本教程只适用于最新版树莓派64位系统&#xff08;debian11&#xff09; 树莓派官网&#xff08;之前是org&#xff09;&#xff1a; https://www.raspberrypi.com/ 一.烧录系统 1.官网下载官方烧写器 https://downloads.raspberrypi.org/imager/imager_late…

部署Redis到云服务器

购买某服务商的云服务器 在云服务器中设置TCP端口号 配置云服务器的开放端口 通过telneat测试端口是否可用 配置redis服务器 需要配置一下自己云服务器的ip 保护模式关闭、允许其他远端连接 设置和云服务器开放一致的端口号 打开此项设置redis的连接密码&#xff0c;更加…