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

构建 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.需求分析 调查机构情况与熟悉业务活动&#xff0c;明确用户的需求&#xff0c;确定系统的边界&#xff0c;生成数据字典和用户需求规格说明书 2.概念结构设计 将从需求分析中得到的用户需求抽象为概念模型&#xff0c;设计E-R模型 3.逻辑结构设计 将E-R图转换为和DBMS相…...

改进YOLO系列 | CVPR 2021 | Involution:超越convolution和self-attention的神经网络算子

Involution&#xff1a;超越卷积和自注意力的新型神经网络算子&#xff08;中文综述&#xff09; 简介 Involuton是CVPR 2021上提出的新型神经网络算子&#xff0c;旨在超越卷积和自注意力&#xff0c;提供更高效、更具表达力的特征提取能力。 Involution原理 Involution的…...

落地速度与效果之争,通用VS垂直,我的观点和预测。

标题&#xff1a;AI大模型战场&#xff1a;通用VS垂直&#xff0c;谁将领跑落地新纪元&#xff1f; 摘要&#xff1a;随着人工智能技术的飞速发展&#xff0c;大模型的应用场景日益广泛。在这场竞赛中&#xff0c;通用大模型和垂直大模型各有优势&#xff0c;落地速度和可能性也…...

【Android面试八股文】在Android中,出现ClassNotFound的有可能的原因是什么?

在Android环境下类未找到的可能原因 在Android环境下,类未找到的可能原因包括但不限于以下几点: 类路径问题:Android应用使用的类通常存储在APK文件中。如果类所在的APK文件没有被正确加载,或者应用的类路径配置有误,就会导致类未找到的错误。 多DEX文件加载问题:在一些…...

模板引擎与 XSS 防御

在 View 层&#xff0c;可以解决 XSS 问题。在本书的“跨站脚本攻击”一章中&#xff0c;阐述了“输入检查” 与“输出编码”这两种方法在 XSS 防御效果上的差异。XSS 攻击是在用户的浏览器上执行的&#xff0c; 其形成过程则是在服务器端页面渲染时&#xff0c;注入了恶意的 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现在&#xff0c;你可以使用以下命令在 Ubuntu 中安装 Docker 以及 Docker Compose&#xff1a; sudo apt install docker.io docker-composeDocker 包被命名为 docker.io&#xff0c;因为在 Docker 出现之前就已经存在一个名为…...

HTML静态网页成品作业(HTML+CSS)—— 环保主题介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…...

深入了解RSA加密算法

目录 前言 一、什么是RSA&#xff1f; 二、RSA加密的基本概念 1.非对称加密 2.密钥生成 3.加密和解密 三、RSA加密的工作原理 四、RSA的应用场景 五、RSA加密解密的实现 六、RSA算法的局限性及改进措施 前言 在当今的数字化时代&#xff0c;信息的安全性成为了人们关注…...

github基础使用

前言 将用到的github指令记录下来&#xff0c;持续更新&#xff0c;方便随时查找学习。 一、github用到的指令 1、我们从github克隆下来的代码版本一般都是master主分支&#xff0c;我们要建立自己的分支进行修改&#xff1a; //git branch //查看目前的分支/* * master /…...

Docker使用心得

Docker使用心得 最近使用Docker比较频繁&#xff0c;特此想记录一下&#xff0c;方便后续查找。 Docker常用命令Docker如何配置使用GPU环境&#xff1f;如何使用Dockerfile构建镜像&#xff1f;如何使用docker compose 实例化容器&#xff1f; Docker如何配置使用GPU环境 参…...

QListWidget 插入 item,item显示自定义界面

代码示意&#xff1a; class ItemWidget_action_cfg_w(QWidget):... # 如下方法是在指定item下插入新的item def __do_add_item(self, item):# 获取当前item rowrow self.__list_w.indexFromItem(item).row()# 注意这里没有父类&#xff0c;解释见后面说明new_item QList…...

Python写一个ERP系统和agent智能体协同仓库和订单的案例

这是一个关于使用Python编写一个简单的ERP系统&#xff0c;并与Agent智能体协同完成仓库和订单管理的案例。在这个案例中&#xff0c;我们将使用Python的第三方库sqlite3进行数据库操作&#xff0c;以及discord库实现与Agent智能体的通信。 1. 首先&#xff0c;安装所需库&…...

【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错

文章目录 一、问题分析背景二、可能出错的原因三、错误代码示例四、正确解决方法与示例五、注意事项 已解决“‘ping’ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件”报错 一、问题分析背景 在Windows操作系统中&#xff0c;ping 命令是一个常用的网络诊断…...

Web前端学堂:深入探索前端开发的核心领域

Web前端学堂&#xff1a;深入探索前端开发的核心领域 在数字化时代的浪潮中&#xff0c;Web前端开发扮演着至关重要的角色。它不仅是连接用户与互联网世界的桥梁&#xff0c;更是创造丰富、互动网络体验的关键所在。本文将带领读者走进Web前端学堂&#xff0c;从四个方面、五个…...

Java数据结构与算法(0/1背包问题)

前言: 背包问题&#xff08;Knapsack Problem&#xff09;是组合优化问题中的一个经典问题&#xff0c;有多个变种。这里我们讨论的是 0/1 背包问题&#xff0c;这是最基本的一种形式。问题的描述如下&#xff1a; 给定 n 件物品&#xff0c;每件物品有一个重量 wi 和一个价值…...

LLVM 中 的 pass 及其管理机制

概述 LLVM 编译器框架的核心概念是任务调用和执行 编译器开发者将IR分解为不同的处理对象&#xff0c;并将其处理过程实现为单独的pass类型。在编译器初始化&#xff0c;pass被实例化&#xff0c;并被添加到pass管理中 pass 管理器(pass manager) 以流水线的方式将各个独立的…...

第 5 章 监控系统 | 入门案例 - 虚拟机监控

👉 本文目标:为 Linux 虚拟机/服务器安装 node_exporter,实现对虚拟机/服务器的监控。 👀 本文内容: 安装 Node Exporter,暴露 Linux 指标(比如 CPU、磁盘、IO 等)配置 Prometheus 抓取 Node Exporter 暴露的指标数据配置 Recording Rule,便于缓存/加速 Dashboard 频…...

教资认定报名照片要求小于190kb…

教资认定报名照片要求小于190kb…… 要求&#xff1a;文件小于190kb&#xff0c;宽度290-300&#xff0c;高度408-418 方法&#xff1a;vx搜随时照-教资认定 直接制作合规尺寸即可&#xff0c;还可以打印纸质版邮寄到家...

显示类控件——Calendar Widget

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、Calendar Widget介绍核心属性重要信号代码示例: 获取选中的日期 一、Calendar Widget 介绍 …...

system与excel族函数区别

1.system #include<stdlib.h> int system(const char *command); comand是命令的路径&#xff0c;一般我们用绝对路径 system函数会创建新的进程&#xff0c;新的进程执行完返回原来的进程&#xff0c;原来的进程则继续执行后面的代码段。 如我们创建一个sys.cpp文件…...

STM32存储左右互搏 模拟U盘桥接SPI总线FATS读写FLASH W25QXX

STM32存储左右互搏 模拟U盘桥接SPI总线FATS读写FLASH W25QXX STM32的USB接口可以模拟成为U盘&#xff0c;通过FATS文件系统对连接的存储单元进行U盘方式的读写。 这里介绍STM32CUBEIDE开发平台HAL库模拟U盘桥接SPI总线FATS读写W25Q各型号FLASH的例程。 FLASH是常用的一种非易失…...

jrt从量变到质变

又是一个加班的周末&#xff0c;上周把台式机代码和数据库环境弄好了&#xff0c;这周进行大数据测试&#xff0c;直接把标本、标本医嘱、报告、报告结果、药敏结果等数据插入到1亿的规模&#xff0c;跑了一天一夜插入了5000多万个标本&#xff0c;后面接着补剩下的到一亿。 演…...

NLP主流大模型如GPT3/chatGPT/T5/PaLM/LLaMA/GLM的原理和差异有哪些-详细解读

自然语言处理&#xff08;NLP&#xff09;领域的多个大型语言模型&#xff08;如GPT-3、ChatGPT、T5、PaLM、LLaMA和GLM&#xff09;在结构和功能上有显著差异。以下是对这些模型的原理和差异的深入分析&#xff1a; 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 定义&#xff1a; 一个连通的无圈的图称为树。 \qquad 只有一个顶点的树叫做平凡树。 \qquad 树中度为1的节点称为叶子结点。…...

泛型中<>和()中的类型

尖括号 < > 中的类型参数定义了一组可以被替换的类型占位符&#xff0c;而圆括号 (...) 内的类型使用则是这些类型参数的具体应用场景&#xff0c;展示了这些类型变量如何参与到函数的参数和返回值类型定义中去。这样设计既保证了代码的灵活性&#xff0c;又保持了类型安…...

spark mllib 特征学习笔记 (一)

PySpark MLlib 特征处理详解 PySpark MLlib 提供了丰富的特征处理工具&#xff0c;帮助我们进行特征提取、转换和选择。以下是 PySpark MLlib 中常用的特征处理类及其简要介绍。 1. Binarizer Binarizer 是将连续特征二值化的转换器。 from pyspark.ml.feature import Bina…...

SQLite 日期 时间

SQLite 日期 & 时间 SQLite 是一种轻量级的数据库管理系统&#xff0c;广泛用于各种应用程序中。它支持标准的 SQL 语法&#xff0c;包括对日期和时间的处理。在 SQLite 中&#xff0c;日期和时间可以通过几种不同的方式来存储和操作。 日期和时间数据类型 SQLite 使用 …...

做企业官网需要多少钱/seo营销技巧培训班

小练习&#xff0c;小练习哈&#xff0c;直接上代码&#xff0c;上课上的太无聊了&#xff0c;来玩一玩vue来了~ <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"…...

男装商城网站建设/惠州seo计费管理

题目 有个数列&#xff0c;你要维护它&#xff0c;支持区间赋值、区间加一、区间询问出现次数大于等于p∗(r−l1)p*(r-l1)p∗(r−l1)的数有哪些。&#xff08;题目的那个除以100100100就省掉了哈&#xff09; 思考历程 总感觉这题不好直接用数据结构来搞。 然后就想到了分块&…...

苏州企业如何建网站/广告推广 精准引流

为什么80%的码农都做不了架构师&#xff1f;>>> 本文将介绍如何配置jenkins&#xff0c;使其可以支持基于角色的项目权限管理。 由于jenkins默认的权限管理体系不支持用户组或角色的配置&#xff0c;因此需要安装第三发插件来支持角色的配置&#xff0c;本文将使用…...

手机网站开发注意的问题/竞价是什么工作

项目在debug环境下运行没有问题&#xff0c;在混淆打包之后却发现了闪退&#xff0c;无奈只能打开Log日志打印毛病~ 程序打印空指针异常&#xff0c;定位到空指针异常的地方~ 问题直指javaBean&#xff0c;于是我检查了我参考网上关于fastjson混淆的方法如下图 感觉没毛病啊…...

青岛做网站建设的公司/新东方教育培训机构

目录 一、基础概念 1、装饰器 1、装饰器本质就是函数 2、实现装饰器知识储备 1、函数即变量 2、高阶函数 3、嵌套函数 例子 1、将一个函数名作为实参传递给另外一个函数 2、返回值为函数名 3、函数嵌套函数 4、完整装饰器例子 5、装饰器高级版本 2、列表生成器 3、生成器 4、斐…...

做亚马逊网站需要租办公室吗/网站排名查询工具有哪些

点击下面链接查看 方法1&#xff08;和2结合&#xff09; 方法二 终极解决方案&#xff0c;最后也是用这个方案给搞好的&#xff1a;点击查看...