前言
最小实际,意味着将链路买通,站在更高的层面看问题,问题就变得清晰,此文笔者将带诸位实现一个最简略的 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