实战:dockerfile 最小实践——koa 为例
wptr33 2025-05-22 14:11 4 浏览
前言
最小实践,意味着将链路打通,站在更高的层面看问题,问题就变得清晰,此文笔者将带诸位实现一个最简单的 koa 服务,并将其部署至服务器上。
先决知识:对docker 有一定的了解
实现思路
第一步:先启动一个 koa 应用,
第二步:再生成一个 dockerfile ,并编写它
第三步:基于 dockerfile 生成镜像(docker build)
第四步:基于此镜像生成(run)一个容器,检查在本机上是否跑的通
第五步:如果通,就导出此镜像
第六步:xshell 连接服务器上(假设服务器上已安装 docker),导入此镜像,通过此镜像生成一容器
这就是最小实现
这里还有一种实现方式:
在第五步时,把它发布到远端仓库,第六步,从远端拉取到镜像,但缺点是,你的镜像要公开(只有一个私有名额)
第一步:先启动一个 koa 应用
新建一个 dockerfile_koa_demo 文件,npm init -y 生成 package.json。下载 koa 包,新建 app.js
mkdir dockerfile_koa_demo
cd dockerfile_koa_demo
npm init -y
npm i koa --save
touch app.js
再编写 app.js
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx) => {
ctx.body = 'hello, docker';
});
app.listen(3010, () => {
console.log('3010端口已启动');
});
修改 package.json 的 script
...
"scripts": {
"start": "nodemon app.js"
},
...
启动脚本
npm run start
看到如下图所示:
浏览器访问正常
第二步:写个 Dockerfile 文件
新建一个 Dockerfile 文件
touch Dockerfile
编写 Dockerfile
# base image
# FROM
FROM node
# 复制文件到容器
ADD . /home/www
# 进入工作目录
WORKDIR /home/www
# 安装项目依赖包
RUN npm install --registry=https://registry.npm.taobao.org
# 暴露 端口
EXPOSE 3010
# 开始命令
CMD ["node", "./app.js"]
第二步写完了
第三步:基于 dockerfile 生成镜像
为了加快构建速度,我们先生成 .dockerignore ,并往里写上 node_modules
touch .dockerignore
在 .dockerignore 里写入 node_modules ,意思是说当你 docker build 的时候忽略 node_modules 文件,加快构建速度
通过命令行生成镜像,命名 johan/koa_server:v1.0.0
docker build . -t johan/koa_server:v1.0.0
# -t 就是给镜像起名
效果如下图所示:
查看镜像是否有了
docker images
第四步:基于此镜像生成一容器
命令行生成一容器
docker run -d --name koa_server_container -p 3010:3010 johan/koa_server:v1.0.0
# -d 后台运行
# --name 给容器起名字
# -p 本机端口隐射镜像中的端口
查看镜像是否生成
docker ps -a
在浏览器中输入http://localhost:3010/ ,bingo
第五步:导出此镜像
docker save johan/koa_server:v1.0.0 > koa_server.tar
第六步:在服务器上跑通
这里我们假设服务器上已经安装了 docker 以及 lrzsz 包(本文具体不展开)
通过 xshell 连接服务器,通过命令 rz 上传 tar 包
rz
解开此压缩包(导入)
docker load < koa_server.tar
基于此容器生成容器
docker run -d --name koa_server_container -p 3010:3010 johan/koa_server:v1.0.0
并查看跑通的容器
docker ps -a
在浏览器中输入域名,bingo
以上就是一个 dockerfile 的最小实现,是不是很简单。当然,你可以在第五步时将镜像上传至docker hub,第六步从 dockerfile 拉取镜像,再生成容器。如下
另一种方法第五步:上传镜像
命令行登录 dockerhub(首先要先注册)
docker login
给镜像命名
docker tag johan/koa_server:v1.0.0 johanbo/koa_server:v1.0.0
将镜像上传至 docker hub
docker push johanbo/koa_server:v1.0.0
另一种方法第六步:拉取镜像
登录服务器,并拉取镜像
docker pull johanbo/koa_server:v1.0.0
注意:这里需要打标签,否则会默认拉取 latest
启动容器
docker run -d --name koa_server_container -p 3010:3010 johan/koa_server:v1.0.0
在浏览器中输入域名,bingo
注意:服务器开发端口需要去云服务商那里开发相应端口(安全组配置规则)
后续
你可以在 dockerfile 里配置你所需的环境变量,镜像生成的容器是个 "mini 服务器",怎么倒腾都行,和整个服务器没有关系,所以你的应用不受环境影响。
在这里说一个痛点:即使你解决了环境问题,但是 CICD 也是个问题,如何更快捷地集成呢?接下来的一节我会介绍下,docker 与 jenkins 的结合,通过 docker 生成 jenkins,jenkins 赋能 CICD
相关推荐
- 针对 MySQL 数据库的 HikariCP 数据库连接池 配置详解
-
HikariCP是当前性能最优异的数据库连接池之一,尤其适用于高并发场景。以下是针对MySQL数据库的HikariCP配置详解,包含常用参数及其优化建议。HikariCP是当前性能最优异的...
- MySQL 数据同步神器 - Canal 入门篇
-
前言想必做过商品服务都是将商品相关的信息和价格保存在数据库中,例如...
- MySQL之慢查询日志分析
-
一、慢查询设置与测试1、慢查询介绍MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阈值的语句。...
- 「MySQL学习」MySQL的变量
-
MySQL的变量分为四种:局部变量、用户变量、会话变量和全局变量,其中局部变量只存在于函数和存储过程,这里不多了解。其中会话变量和全局变量在MySQL中统称为系统变量用户...
- MySQL日志篇
-
今天我们介绍一下MySQL中特别重要的一项内容——日志!MySQL中日志有很多,我们前文提到的redolog、undolog、以及今天要提到的binlog。...
- MySQL--视图
-
介绍视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所...
- MySQL中like会不会走索引?
-
先说结论:like"%关键字":不会;like"%关键字%":不会like"关键字%":会说明:...
- MySQL正则 rlike(regexp)
-
在MySQL中,like、rlike和regexp都不区分大小写,如果需要区分,可以在WHERE后添加关键字段binary1.LIKE可以使用以下两个通配符:%...
- 开源文档预览项目 kkFileView (9.9k star) ,快速入门
-
kkFileView是一款文件文档在线预览解决方案,采用流行的SpringBoot框架构建,易于上手和部署。该项目基本支持主流办公文档的在线预览,包括但不限于doc、docx、xls、xls...
- 帮你打造一个私有化的在线个人文档系统
-
前言最近开发的过程中总是需要找寻一些资料,但是某些资料或者是某段可用的代码,已经忘记放在了哪个文档中了,看着电脑上搜索出来的几百个txt文件,我陷入了一阵无力感中,于是我想能不能搞个在线文档,就像“语...
- Container 命令ctr、crictl 命令使用说明
-
一、ctr命令使用Container命令ctr,crictl的用法版本:ctrcontainerd.io1.4.3containerd相比于docker,多了...
- Docker常用命令(2)
-
目录Docker重启策略配置容器环境变量...
- 快速搭建自己的镜像仓库
-
搭建docker镜像仓库1.准备找一台机器为镜像仓库的主机.创建好存放镜像数据文件的目录.例如...
- 整合 kkfile 实现文件预览
-
一、简介...
- 隐私计算FATE-核心概念与单机部署
-
一、说明Fate是一个工业级联邦学习框架,所谓联邦学习指的就是可以联合多方的数据,共同构建一个模型;...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
git 执行pull错误如何撤销 git pull fail
-
面试官:git pull是哪两个指令的组合?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git pull 之后本地代码被覆盖 解决方案
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)