使用Dockerfile定制化镜像和私有网盘案例

使用Dockerfile定制化镜像和私有网盘案例

在这里插入图片描述

镜像的分层结构是docker很重要的环节,如同搭积木一样。

也主要是为了节省资源。

理解docker build的工作原理

  • Docker在运行的时候分为Docker引擎,和客户端工具。docker的引擎提供一组API,被称为Docker Remote Api 而如果,docker命令这样的客户端工具,则是通过Api与Docker引擎交互完成的。

  • 当我们进行镜像构建的时候,并非所有的定制都是依靠RUN指令来完成,也会优势使用ADD 命令,COPY命令,而docker build 命令构建镜像,其实并非在本地构建而是在服务端上构建,也就是docker引擎中构建,

  • 会有一个问题,在客户端上,服务端框架中,如何获得本地文件


  • 这里就引入了上下文的概念,当构建时候,用户会指定构建镜像上下文,docker build 命令收到这个路径的指令,会将上下文的内容打包,给到Docker.

  • Docker引擎收到这个上下文后,展开就会获得构建镜像所需要的一切文件

  • 实际上Dockerfile的文件名并不是一定是Dockerfile ,和处于文件中,但是我们为了规范因此大家会默认使用Dockerfile为文件名,放置于构建镜像的目录中。

dockerfile的基础语法

我这里简单的介绍一下。

在这里插入图片描述

构建私有网盘镜像案例

案例的网址 [filebrowser/filebrowser: 📂 Web File Browser](https://github.com/filebrowser/filebrowser)大家可以玩玩

[root@docker-110 filebrowser-master]# docker build -t filebrower:v10 .

编写一个centos系统的镜像

# base image
FROM centos:7.8.2003# MAINTAINER
MAINTAINER xxx@zz.com# add epel
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak \&& curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo \&& sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo \&& curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo \&& yum clean all && yum makecache# Necessary packages
RUN yum install -y  wget gcc gcc-c++ glibc make autoconf openssl openssl-devel ntpdata crontabs# change timzone to Asia/Shanghai
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

构建nginx的镜像

# 编写nginx的镜像
# base image
FROM centos7.8:v1MAINTAINER zz@zz.comRUN useradd -M -s /sbin/nologin www
ADD nginx-1.19.2.tar.gz /usr/local/src# install Dependency package
RUN yum install openssl openssl-devel libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel libx
ml2 libxml2-dev libxslt-develWORKDIR /usr/local/src/nginx-1.19.2# make && make install
RUN ./configure --user=www --group=www --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module -
-with-http_realip_module    --with-http_addition_module    --with-http_xslt_module   --with-http_image_fi
lter_module    --with-http_geoip_module  --with-http_sub_module  --with-http_dav_module --with-http_flv_m
odule    --with-http_mp4_module --with-http_gunzip_module  --with-http_gzip_static_module  --with-http_au
th_request_module  --with-http_random_index_module   --with-http_secure_link_module   --with-http_degrada
tion_module   --with-http_stub_status_module && make && make install# configure
COPY nginx.conf /usr/local/nginx/conf/nginx.conf
COPY fastcgi_params /usr/local/nginx/conf/fastcgi_params
RUN mkdir /usr/local/nginx/conf/conf.d
COPY www.conf /usr/local/nginx/conf/conf.d/www.confEXPOSE 80CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

定制化mysql镜像

FROM centos:7.8:v1
MAINTAINER zz@zz.comCOPY mysql-community-common-5.7.31-1.el7.x86_64.rpm /root/mysql-community-common-5.7.31-1.el7.x86_64.rpm
COPY mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm /root/mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm
COPY mysql-community-client-5.7.31-1.el7.x86_64.rpm  /root/mysql-community-client-5.7.31-1.el7.x86_64.rpm
COPY mysql-community-libs-5.7.31-1.el7.x86_64.rpm  /root/mysql-community-libs-5.7.31-1.el7.x86_64.rpm
COPY mysql-community-server-5.7.31-1.el7.x86_64.rpm  /root/mysql-community-server-5.7.31-1.el7.x86_64.rpm
COPY postfix-2.10.1-9.el7.x86_64.rpm  /root/postfix-2.10.1-9.el7.x86_64.rpmWORKDIR /root
RUN yum remove mysql-libs -y
RUN yum -y install *.rpmADD initialization.sql /root/initialization.sql
ADD my.cnf /etc/my.cnf
ADD setup.sh /root/setup.shRUN yum clean all && rm -rf /root/*.rpm && chmod +x /root/setup.shEXPOSE 3306CMD ["/root/setup.sh"]

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

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

相关文章

分享一些实用的PHP函数(对比js/ts实现)

检查数组所有元素是否满足给定条件 如果提供的函数对数组的所有元素返回 true,则返回 true,否则返回 false。 思路 实现思路如下: 使用数组的filter方法对数组执行给定的函数,然后使用count方法获取执行后的结果,再和count方法…

HuggingFace下载的模型缓存到了C盘,如何安全迁移到其他盘

HuggingFace下载的模型缓存到了C盘,如何安全迁移到其他盘 ✅ 方法一:通过环境变量永久迁移缓存目录(**推荐**)步骤如下:1️⃣ 在 D 盘创建一个目录(比如):2️⃣ 设置环境变量&#x…

vue 开启 source-map 后构建速度会很慢

vue.config.js 的 configureWebpack.devtool 设置为 source-map 后,编译速度会变慢,严重影响开发进度。 改善方法: 一:改为 module-eval-source-map 改为 module-eval-source-map 在打包速度和源码信息还原程度都属于良好程度。…

三维空间数据格式全景图:OSGB | 3Dtiles | I3S | S3M

前言 当城市数字孪生遇上国产化替代,开发者该如何选型? ——深入解析四大主流格式的技术基因与落地场景 🔮 趋势预言: 2025年国土空间规划全面实景三维化 ▶ S3M市占率将突破60%Cesium开源生态持续领跑Web端 ▶ 3Dtiles仍是跨国项…

【服务器】服务器选型设计

一、服务器产品说明 1.1 基础服务器说明 1.1.1、服务器产品分类与核心指标​​ ​​1. 通用分类体系​​ ​​类型​​ ​​适用场景​​ ​​代表产品指标​​ 塔式服务器 中小企业应用 ≤2路CPU,32G内存,支持热插拔HDD 机架服务器 数据中心主…

【C++】noexcept的作用

【C】noexcept的作用 noexcept是C11引入的关键字,用于指定函数是否会抛出异常。它既是一个修饰符也是一个操作符,在现代C编程中扮演着重要角色。 一、noexcept的基本概念 noexcept主要有两种形式: 无条件形式​:void func() n…

Docker 到底是个什么?

Docker 技术全面解析:从安装到应用 一、引言 在当今的软件开发和运维领域,Docker 已经成为了一个不可或缺的工具。它以其轻量级、可移植性和高效性等特点,改变了开发者和运维人员的工作方式,使得应用的打包、分发、运行变得更加…

Python 可迭代的对象、迭代器 和生成器(Sentence类第3版:生成器函数)

Sentence类第3版:生成器函数 实现相同功能,但却符合 Python 习惯的方式是,用生成器函数代替 SentenceIterator 类。先看示例 14-5,然后详细说明生成器函数。 示例 14-5 sentence_gen.py:使用生成器函数实现 Sentence…

5G自协商

好的&#xff0c;下面是一个基于裸机 C 环境的自协商实现示例代码&#xff0c;支持 **最高 5G 并向下兼容**。这个代码框架假设你使用的是 IEEE 802.3 规范下的 **MDIO** 接口和常见的 **Marvell PHY**&#xff08;或类似支持 5G/2.5G 的PHY&#xff09;。 c #include <std…

sublime 4200 激活

目录 下载激活方式一&#xff1a;sublime 打开方式二&#xff1a;https://hexed.it 打开 下载 sublime官方下载 sublime_text_build_4200_x64.zip 激活 方式一&#xff1a;sublime 打开 1、复制 sublime_text.exe 为 sublime_text_activation.exe 2、直接使用 sublime_ 打开…

Ceph 和 MinIO

Ceph 和 MinIO 是两种主流的分布式存储系统&#xff0c;但它们的设计目标、架构和使用场景存在显著差异。以下是清晰的对比解析&#xff1a; &#x1f9e9; 核心定位对比 维度CephMinIO定位统一存储平台&#xff08;块/对象/文件&#xff09;纯对象存储&#xff08;S3兼容&…

cili3d笔记20 正交投影3d重建笔记1

正交视图转3d mostFrequentCluster.lines.forEach(line > {const [x1, y1, x2, y2] line;let xhat{x1,x2};let yhat{y1,y2};}); 没考虑到侧视图 const clusters clusterLines(inputlines, 5);const lines3d:[number,number,number,number,number,number][][]const { mostM…

【Docker基础】Docker容器生命周期管理:从创建到删除的完整指南

目录 1 容器生命周期概述 2 容器创建&#xff08;docker create&#xff09; 2.1 docker create命令详解 2.2 创建流程解析 2.3 创建与运行的区别 3 容器启动&#xff08;docker start&#xff09; 3.1 docker start命令详解 3.2 启动流程解析 3.3 启动与运行的区别 …

Docker、Docker composer与Docker desktop

文章目录 Docker、Docker composer与Docker desktop一、docker、docker composer、docker desktop1.1 Docker1.2 Docker Compose1.3 Docker Desktop1.4 三者之间的区别 二、docker desktop的安装和换源2.1 前期准备WSL2 2.1 Docker Desktop 安装下载 Docker Desktop安装 Docker…

H5录音、图文视频IndexDB储存最佳实践:用AI生成语音备忘录

引言 早在大学的时候&#xff0c;我就期望做一款属于自己的 APP&#xff0c;可惜那时不懂技术。现在有了技术&#xff0c;但却没有时间。好在 AI 的快速发展终于让我完成了这个愿望。于是&#xff0c;我用半天的时间&#xff0c;用 AI 生成了一个纯前端的 H5 程序&#xff1a;…

简述C++ nlohmann/json 库

目录 JSON概述 nlohmann/json 库的使用 创建json数组/对象 字符串解析&#xff08;parse反序列化&#xff09; 数据访问 序列化 文件读写 JSON概述 JSON(JavaScrip Object Notation)是一种轻量级、跨语言的数据交换格式。它基于 ECMAScript 子集&#xff0c;以独立于编程…

定制开发开源AI智能名片与S2B2C商城小程序的内容分发体系构建:基于“1+N“素材复用模型的创新实践

摘要&#xff1a;在数字内容爆炸式增长的当下&#xff0c;本文针对内容分发效率低下的行业痛点&#xff0c;提出基于"定制开发开源AI智能名片S2B2C商城小程序"的一体化解决方案。通过构建"1篇长文10条长视频20条短视频10个平台"的素材复用公式&#xff0c;…

c++26新功能—hive容器

一、容器的演进 科学进步的过程一般来说都是从先解决常用的、迫切的问题开始&#xff0c;然后再逐步解决一些少见不迫切的问题&#xff0c;直到最终解决到认知程度内的诸多问题。举一个网上的例子&#xff0c;以前说咱们无法生产水笔的尖头上的钢球&#xff0c;其实这对于国内…

Kafka 源码剖析:消息存储与协议实现(二)

四、协议实现机制探秘 4.1 生产者协议 4.1.1 消息发送流程 Producer 在向 Kafka 集群发送消息时&#xff0c;首先会根据分区策略选择目标分区 。常见的分区策略有轮询、按消息键的哈希值分区以及自定义分区策略 。如果生产者在发送消息时指定了分区号&#xff0c;那么消息就…

Vue.js 与 TypeScript:最佳实践

1. 引言 Vue.js 是一个渐进式、灵活的 JavaScript 框架&#xff0c;广泛用于构建用户界面和单页应用&#xff08;SPA&#xff09;。而 TypeScript 是 JavaScript 的一个超集&#xff0c;添加了静态类型和其他高级特性。将两者结合使用&#xff0c;可以帮助开发者构建更具可维护…