什么?!前端工程师还不会 Docker?2

简介: 什么?!前端工程师还不会 Docker?2

5. 部署 Node.js 应用

掌握了前端项目的本地部署后,Node 应用如何部署?

5.1 准备后端服务源码

node.js 安装就略过了。

直接用命令行开干:

mkdir my-express-app-docker-1
cd $_
npm init -y
npm i express
touch server.js
ls
nano server.js

server.js 内容如下:

'use strict';
const express = require('express');
// Constants
const PORT = 8080;
const HOST = '0.0.0.0';
// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});
app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});

在 package.json 文件中添加启动脚本:


21.jpg


运行 npm run start 后,使用 curl 查看回应,一切正常:


22.jpg


5.2 添加 .dockerignore 和 Dockfile

express 包用到了 node,本地的 node_modules 不需要拷贝进 docker,所以要用到一个很像 .gitignore 的文件 —— .dockerignore,用来忽略相应文件,.dockerignore 文件内容如下:

node_modules
npm-debug.log

在项目根目录下新建文件 Dockerfile,内容如下:

# 使用更轻量的 node18
FROM node:18-alpine
# 创建工作目录 /app
WORKDIR /app
# 把安装依赖所需的 package.json AND package-lock.json 复制到 /app
COPY package*.json ./
# 安装依赖
RUN npm install
# 如果是生产环境使用 ci
# RUN npm ci --omit=dev
# 打包源码到 /app
COPY . .
# 暴露端口 8080
EXPOSE 8080
# 启动容器后,执行 node server.js
CMD ["node", "server.js"]

5.3 构建镜像 + 启动容器

这一步和前端部署章节是一样的。

构建镜像:

docker build -t express-app .

构建了一个叫做 express-app 的 image,如果不加冒号和 tag 号,那么构建出的镜像默认就是 latest 版本。

启动容器:

docker run -d --name my-express-app -p 3002:8080 express-app

用 express-app 启动一个叫做 my-express-app 的 express 应用容器。

通过 curl 指令来查看网页连接情况:

curl -i localhost:3002


23.jpg


连接正常!

如果想停掉这个运行的服务就执行 docker stop my-express-app ,如果想再次启动就执行 docker start my-express-app

Node 应用的部署也搞定了!

至于自动化部署,按照前端自动化部署脚本照猫画虎即可,这里不多赘述了~


16.jpg


5.4 进入容器

如果想要进入容器看看,那么执行:

# docker exec -it <container> <command>
# 因为使用 apline 版本的镜像,所以不能用 bash,这里用 sh 或者 ash 代替
docker exec -it my-express-app ash

输入 whoami 可以看到当前用户是 root


17.jpg


如果没有在 Dockerfile 中设置权限,那么默认都会使用 root,这是一个潜在的问题,一般生产环境不会直接使用 root 去部署服务,关于这一点先挖个坑。

输入 exit 回车即可退出容器操作。


6. 镜像推送

现在我们前后端的镜像都有了(vite-web 和 express-app),推送到仓库去,然后测试工程师就可以从测试环境、生产环境拉取代码进行测试了。一般来说,公司都会搭建自己的 docker 镜像仓库,这里以 docker hub 为例(注册略):

6.1 docker 登录

第一步、登录 docker hub:

docker login


18.jpg


6.2 tag 标签设置

第二步、给镜像打上标签:

# docker tag <image> <username>/<image>
docker tag vite-web:v1 ericknight/vite-web
docker tag express-app ericknight/express-app

注意:username必须是你的用户名,不能乱填。

6.3 推送到镜像仓库

最后推动到仓库:

docker push ericknight/vite-web:latest
docker push ericknight/express-app:latest


19.jpg


之后,在 docker hub 上就能看到刚刚推送的镜像了:


20.jpg


7. 总结

到这里,基本上就可以掌握 docker 的基础使用以及如何在本地部署项目了,基本流程掌握好就可以:

  • Dockerfile
  • docker build 或 docker pull
  • docker run
  • docker push

当然还有其他的 docker 指令,大家可以自己琢磨琢磨。另外,其实部署的内容还有很多很多。比如如何通个网将前后端、数据库联合起来、如何做数据持久化、如何做 CI / CD、如何部署到云服务器,甚至是放弃 docker,使用 serverless 部署,暂且挖个坑……



目录
相关文章
|
前端开发 JavaScript Java
Docker打包前端vue代码推送镜像到远程仓库
Docker打包前端vue代码推送镜像到远程仓库 Docker打包前端vue代码推送镜像到远程仓库 业务场景:📝1.将前端代码www包解压后放在本地临时目录,然后创建一个dockerfile📜 2.登陆自己远程仓库📒3.构建镜像🔖4.给镜像打tag📖5.推送镜像到远程仓库🖊️最后总结 业务场景: 需要将本地前端代码推送到远程镜像仓库 📝1.将前端代码www包解压后放在本地临时目录,然后创建一个dockerfile
192 1
|
8月前
|
前端开发 jenkins 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
199 1
|
8月前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
720 0
|
3月前
|
JavaScript 前端开发 Docker
拿下奇怪的前端报错(二):nvm不可用报错`GLIBC_2.27‘‘GLIBCXX_3.4.20‘not Found?+ 使用docker构建多个前端项目实践
本文介绍了在多版本Node.js环境中使用nvm进行版本管理和遇到的问题,以及通过Docker化构建流程来解决兼容性问题的方法。文中详细描述了构建Docker镜像、启动临时容器复制构建产物的具体步骤,有效解决了不同项目对Node.js版本的不同需求。
141 0
|
6月前
|
前端开发 Docker 容器
前端 CSS 经典:mac docker 效果
前端 CSS 经典:mac docker 效果
67 0
|
8月前
|
前端开发 应用服务中间件 nginx
前端破圈使用Docker Nginx容器部署项目🏴‍☠️
前端破圈使用Docker Nginx容器部署项目🏴‍☠️
247 0
|
8月前
|
前端开发 Devops Shell
前端破圈用Docker开发项目🏴‍☠️
前端破圈用Docker开发项目🏴‍☠️
130 0
|
8月前
|
前端开发 Java 网络安全
解决docker中运行的jar包连不上前端程序
解决docker中运行的jar包连不上前端程序
|
8月前
|
前端开发 应用服务中间件 nginx
Docker 安装 Nginx 部署前端项目
Docker 安装 Nginx 部署前端项目
843 1
|
8月前
|
前端开发 JavaScript 应用服务中间件
WEB前端有必要学会docker吗?0基础-45分钟带你学会(包含视频笔记案例源代码)
WEB前端有必要学会docker吗?0基础-45分钟带你学会(包含视频笔记案例源代码)
74 0