构建 deno/fresh 的 docker 镜像
众所周知, 最近 docker 镜像的使用又出现了新的困难. 但是不怕, 窝们可以使用曲线救国的方法: 自己制作容器镜像 !
下面以 deno/fresh 举栗, 部署一个简单的应用.
目录
- 1 创建 deno/fresh 项目
- 2 构建 docker 镜像
- 3 部署和测试
- 4 总结与展望
1 创建 deno/fresh 项目
执行命令:
deno run -A -r https://fresh.deno.dev
初始化 git 仓库并提交:
> cd test-2406
> git init .
已初始化空的 Git 仓库于 /home/s2/test-2406/.git/
> git add .
> git commit -m " test fresh "
[main(根提交) 2e2084b] test fresh21 files changed, 339 insertions(+)create mode 100644 .gitignorecreate mode 100644 .vscode/extensions.jsoncreate mode 100644 .vscode/settings.jsoncreate mode 100644 .vscode/tailwind.jsoncreate mode 100644 README.mdcreate mode 100644 components/Button.tsxcreate mode 100644 deno.jsoncreate mode 100755 dev.tscreate mode 100644 fresh.config.tscreate mode 100644 fresh.gen.tscreate mode 100644 islands/Counter.tsxcreate mode 100644 main.tscreate mode 100644 routes/_404.tsxcreate mode 100644 routes/_app.tsxcreate mode 100644 routes/api/joke.tscreate mode 100644 routes/greet/[name].tsxcreate mode 100644 routes/index.tsxcreate mode 100644 static/favicon.icocreate mode 100644 static/logo.svgcreate mode 100644 static/styles.csscreate mode 100644 tailwind.config.ts
> git status
位于分支 main
无文件要提交,干净的工作区
2 构建 docker 镜像
创建文件 Dockerfile
:
FROM quay.io/jitesoft/alpine:latestARG GIT_REVISION
ENV DENO_DEPLOYMENT_ID=${GIT_REVISION}RUN sed -i 's/ftp.halifax.rwth-aachen.de/mirrors.sjtug.sjtu.edu.cn/g' /etc/apk/repositories
RUN apk update && apk upgrade && apk add curl zstd deno icu-data-full && apk cache cleanWORKDIR /appCOPY . .
RUN deno cache main.ts && deno task buildEXPOSE 8000CMD ["/usr/bin/deno", "run", "-A", "/app/main.ts"]
执行命令:
docker build --build-arg GIT_REVISION=$(git rev-parse HEAD) -t my-app .
构建成功:
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-app latest 83173f90cca5 About a minute ago 227MB
quay.io/jitesoft/alpine latest c7ecb923af0e 37 hours ago 7.82MB
将构建成功的容器镜像导出为压缩包:
> docker save my-app | zstd > my-app.tar.zst
> ls -lh my-app.tar.zst
-rw-r--r-- 1 s2 s2 77M 6月13日 10:01 my-app.tar.zst
3 部署和测试
将压缩包文件 my-app.tar.zst
复制到要部署的机器, 导入容器镜像:
> docker load < my-app.tar.zst
31e29b5ab918: Loading layer [==================================================>] 3.072kB/3.072kB
c83c49512daf: Loading layer [==================================================>] 145.6MB/145.6MB
ff9964444958: Loading layer [==================================================>] 1.536kB/1.536kB
6389ca351a5d: Loading layer [==================================================>] 171kB/171kB
2ca6496c9f8b: Loading layer [==================================================>] 83.91MB/83.91MB
Loaded image: my-app:latest
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-app latest 83173f90cca5 2 minutes ago 227MB
运行容器:
> docker run -it -p 8000:8000 my-app
Using snapshot found at /app/_fresh🍋 Fresh ready Local: http://localhost:8000/
浏览器打开页面:
4 总结与展望
容器是一种很好的技术, 开发, 测试, 部署运行都很方便快速.
窝们应该掌握容器镜像的构建方法, 做到更灵活的运行容器, 从而在复杂多变的网络环境中稳定持久运行.
参考资料:
- https://deno.com/
- https://fresh.deno.dev/
- https://quay.io/repository/jitesoft/alpine
- https://www.alpinelinux.org/
- https://docs.alpinelinux.org/user-handbook/0.1a/Working/apk.html
- https://mirror.sjtu.edu.cn/docs/alpine
本文使用 CC-BY-SA 4.0 许可发布.
相关文章:
构建 deno/fresh 的 docker 镜像
众所周知, 最近 docker 镜像的使用又出现了新的困难. 但是不怕, 窝们可以使用曲线救国的方法: 自己制作容器镜像 ! 下面以 deno/fresh 举栗, 部署一个简单的应用. 目录 1 创建 deno/fresh 项目2 构建 docker 镜像3 部署和测试4 总结与展望 1 创建 deno/fresh 项目 执行命令…...
数据库 | 数据库设计的步骤
1.需求分析 调查机构情况与熟悉业务活动,明确用户的需求,确定系统的边界,生成数据字典和用户需求规格说明书 2.概念结构设计 将从需求分析中得到的用户需求抽象为概念模型,设计E-R模型 3.逻辑结构设计 将E-R图转换为和DBMS相…...
改进YOLO系列 | CVPR 2021 | Involution:超越convolution和self-attention的神经网络算子
Involution:超越卷积和自注意力的新型神经网络算子(中文综述) 简介 Involuton是CVPR 2021上提出的新型神经网络算子,旨在超越卷积和自注意力,提供更高效、更具表达力的特征提取能力。 Involution原理 Involution的…...
落地速度与效果之争,通用VS垂直,我的观点和预测。
标题:AI大模型战场:通用VS垂直,谁将领跑落地新纪元? 摘要:随着人工智能技术的飞速发展,大模型的应用场景日益广泛。在这场竞赛中,通用大模型和垂直大模型各有优势,落地速度和可能性也…...
【Android面试八股文】在Android中,出现ClassNotFound的有可能的原因是什么?
在Android环境下类未找到的可能原因 在Android环境下,类未找到的可能原因包括但不限于以下几点: 类路径问题:Android应用使用的类通常存储在APK文件中。如果类所在的APK文件没有被正确加载,或者应用的类路径配置有误,就会导致类未找到的错误。 多DEX文件加载问题:在一些…...
模板引擎与 XSS 防御
在 View 层,可以解决 XSS 问题。在本书的“跨站脚本攻击”一章中,阐述了“输入检查” 与“输出编码”这两种方法在 XSS 防御效果上的差异。XSS 攻击是在用户的浏览器上执行的, 其形成过程则是在服务器端页面渲染时,注入了恶意的 H…...
vue3轮播图怎么做
先看效果 实现代码 <n-carouseleffect"card"dot-type"line"draggable:autoplay"!isHovered":current-index"currentIndex"prev-slide-style"transform: translateX(-150%) translateZ(-450px);opacity:1"next-slide-st…...
ubuntu中安装docker并换源
使用 Ubuntu 的仓库安装 Docker sudo apt update现在,你可以使用以下命令在 Ubuntu 中安装 Docker 以及 Docker Compose: sudo apt install docker.io docker-composeDocker 包被命名为 docker.io,因为在 Docker 出现之前就已经存在一个名为…...
HTML静态网页成品作业(HTML+CSS)—— 环保主题介绍网页(5个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…...
深入了解RSA加密算法
目录 前言 一、什么是RSA? 二、RSA加密的基本概念 1.非对称加密 2.密钥生成 3.加密和解密 三、RSA加密的工作原理 四、RSA的应用场景 五、RSA加密解密的实现 六、RSA算法的局限性及改进措施 前言 在当今的数字化时代,信息的安全性成为了人们关注…...
github基础使用
前言 将用到的github指令记录下来,持续更新,方便随时查找学习。 一、github用到的指令 1、我们从github克隆下来的代码版本一般都是master主分支,我们要建立自己的分支进行修改: //git branch //查看目前的分支/* * master /…...
Docker使用心得
Docker使用心得 最近使用Docker比较频繁,特此想记录一下,方便后续查找。 Docker常用命令Docker如何配置使用GPU环境?如何使用Dockerfile构建镜像?如何使用docker compose 实例化容器? Docker如何配置使用GPU环境 参…...
QListWidget 插入 item,item显示自定义界面
代码示意: class ItemWidget_action_cfg_w(QWidget):... # 如下方法是在指定item下插入新的item def __do_add_item(self, item):# 获取当前item rowrow self.__list_w.indexFromItem(item).row()# 注意这里没有父类,解释见后面说明new_item QList…...
Python写一个ERP系统和agent智能体协同仓库和订单的案例
这是一个关于使用Python编写一个简单的ERP系统,并与Agent智能体协同完成仓库和订单管理的案例。在这个案例中,我们将使用Python的第三方库sqlite3进行数据库操作,以及discord库实现与Agent智能体的通信。 1. 首先,安装所需库&…...
【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错
文章目录 一、问题分析背景二、可能出错的原因三、错误代码示例四、正确解决方法与示例五、注意事项 已解决“‘ping’ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错 一、问题分析背景 在Windows操作系统中,ping 命令是一个常用的网络诊断…...
Web前端学堂:深入探索前端开发的核心领域
Web前端学堂:深入探索前端开发的核心领域 在数字化时代的浪潮中,Web前端开发扮演着至关重要的角色。它不仅是连接用户与互联网世界的桥梁,更是创造丰富、互动网络体验的关键所在。本文将带领读者走进Web前端学堂,从四个方面、五个…...
Java数据结构与算法(0/1背包问题)
前言: 背包问题(Knapsack Problem)是组合优化问题中的一个经典问题,有多个变种。这里我们讨论的是 0/1 背包问题,这是最基本的一种形式。问题的描述如下: 给定 n 件物品,每件物品有一个重量 wi 和一个价值…...
LLVM 中 的 pass 及其管理机制
概述 LLVM 编译器框架的核心概念是任务调用和执行 编译器开发者将IR分解为不同的处理对象,并将其处理过程实现为单独的pass类型。在编译器初始化,pass被实例化,并被添加到pass管理中 pass 管理器(pass manager) 以流水线的方式将各个独立的…...
第 5 章 监控系统 | 入门案例 - 虚拟机监控
👉 本文目标:为 Linux 虚拟机/服务器安装 node_exporter,实现对虚拟机/服务器的监控。 👀 本文内容: 安装 Node Exporter,暴露 Linux 指标(比如 CPU、磁盘、IO 等)配置 Prometheus 抓取 Node Exporter 暴露的指标数据配置 Recording Rule,便于缓存/加速 Dashboard 频…...
教资认定报名照片要求小于190kb…
教资认定报名照片要求小于190kb…… 要求:文件小于190kb,宽度290-300,高度408-418 方法:vx搜随时照-教资认定 直接制作合规尺寸即可,还可以打印纸质版邮寄到家...
显示类控件——Calendar Widget
🐌博主主页:🐌倔强的大蜗牛🐌 📚专栏分类:QT ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、Calendar Widget介绍核心属性重要信号代码示例: 获取选中的日期 一、Calendar Widget 介绍 …...
system与excel族函数区别
1.system #include<stdlib.h> int system(const char *command); comand是命令的路径,一般我们用绝对路径 system函数会创建新的进程,新的进程执行完返回原来的进程,原来的进程则继续执行后面的代码段。 如我们创建一个sys.cpp文件…...
STM32存储左右互搏 模拟U盘桥接SPI总线FATS读写FLASH W25QXX
STM32存储左右互搏 模拟U盘桥接SPI总线FATS读写FLASH W25QXX STM32的USB接口可以模拟成为U盘,通过FATS文件系统对连接的存储单元进行U盘方式的读写。 这里介绍STM32CUBEIDE开发平台HAL库模拟U盘桥接SPI总线FATS读写W25Q各型号FLASH的例程。 FLASH是常用的一种非易失…...
jrt从量变到质变
又是一个加班的周末,上周把台式机代码和数据库环境弄好了,这周进行大数据测试,直接把标本、标本医嘱、报告、报告结果、药敏结果等数据插入到1亿的规模,跑了一天一夜插入了5000多万个标本,后面接着补剩下的到一亿。 演…...
NLP主流大模型如GPT3/chatGPT/T5/PaLM/LLaMA/GLM的原理和差异有哪些-详细解读
自然语言处理(NLP)领域的多个大型语言模型(如GPT-3、ChatGPT、T5、PaLM、LLaMA和GLM)在结构和功能上有显著差异。以下是对这些模型的原理和差异的深入分析: GPT-3 (Generative Pre-trained Transformer 3) 虽然GPT-4…...
从MySQL到NoSQL:分析传统关系型数据库与NoSQL数据库的协同
引言 数据库是一个系统,用来管理和存储数据的地方。数据在数据库中以一种结构化的方式组织,这样能更容易地查询和处理数据。 关系型数据库是基于关系模型的数据库,它将数据存储在不同的表中,每个表都有各自的独一无二的主键。表与表之间通过共享的数据项相互关联。像MySQ…...
三、树和割集
文章目录 1、树1.1 树的定义1.2 树的性质1.3 极小连通图1.4 树的中心1.5 生成树1.5.1 最小生成树 2、 割点和桥THE END 1、树 1.1 树的定义 \qquad 定义: 一个连通的无圈的图称为树。 \qquad 只有一个顶点的树叫做平凡树。 \qquad 树中度为1的节点称为叶子结点。…...
泛型中<>和()中的类型
尖括号 < > 中的类型参数定义了一组可以被替换的类型占位符,而圆括号 (...) 内的类型使用则是这些类型参数的具体应用场景,展示了这些类型变量如何参与到函数的参数和返回值类型定义中去。这样设计既保证了代码的灵活性,又保持了类型安…...
spark mllib 特征学习笔记 (一)
PySpark MLlib 特征处理详解 PySpark MLlib 提供了丰富的特征处理工具,帮助我们进行特征提取、转换和选择。以下是 PySpark MLlib 中常用的特征处理类及其简要介绍。 1. Binarizer Binarizer 是将连续特征二值化的转换器。 from pyspark.ml.feature import Bina…...
SQLite 日期 时间
SQLite 日期 & 时间 SQLite 是一种轻量级的数据库管理系统,广泛用于各种应用程序中。它支持标准的 SQL 语法,包括对日期和时间的处理。在 SQLite 中,日期和时间可以通过几种不同的方式来存储和操作。 日期和时间数据类型 SQLite 使用 …...
做企业官网需要多少钱/seo营销技巧培训班
小练习,小练习哈,直接上代码,上课上的太无聊了,来玩一玩vue来了~ <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"…...
男装商城网站建设/惠州seo计费管理
题目 有个数列,你要维护它,支持区间赋值、区间加一、区间询问出现次数大于等于p∗(r−l1)p*(r-l1)p∗(r−l1)的数有哪些。(题目的那个除以100100100就省掉了哈) 思考历程 总感觉这题不好直接用数据结构来搞。 然后就想到了分块&…...
苏州企业如何建网站/广告推广 精准引流
为什么80%的码农都做不了架构师?>>> 本文将介绍如何配置jenkins,使其可以支持基于角色的项目权限管理。 由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用…...
手机网站开发注意的问题/竞价是什么工作
项目在debug环境下运行没有问题,在混淆打包之后却发现了闪退,无奈只能打开Log日志打印毛病~ 程序打印空指针异常,定位到空指针异常的地方~ 问题直指javaBean,于是我检查了我参考网上关于fastjson混淆的方法如下图 感觉没毛病啊…...
青岛做网站建设的公司/新东方教育培训机构
目录 一、基础概念 1、装饰器 1、装饰器本质就是函数 2、实现装饰器知识储备 1、函数即变量 2、高阶函数 3、嵌套函数 例子 1、将一个函数名作为实参传递给另外一个函数 2、返回值为函数名 3、函数嵌套函数 4、完整装饰器例子 5、装饰器高级版本 2、列表生成器 3、生成器 4、斐…...
做亚马逊网站需要租办公室吗/网站排名查询工具有哪些
点击下面链接查看 方法1(和2结合) 方法二 终极解决方案,最后也是用这个方案给搞好的:点击查看...