Docker部署前端项目

打包前端

前端build

  1. 在根目录的package.json文件设置build方式
  1. 打包完成后会生成dist包,就是上面截图跟docker同级目录的包
  2. 在与dist包同级的目录新建docker文件夹,在文件夹下新建nginx.conf文件进行配置
nginx 复制代码
server {
  listen 80;
  listen [::]:80;
  # gzip config
  gzip on;
  gzip_min_length 1k;
  gzip_comp_level 9;
  gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
  gzip_vary on;
  gzip_disable "MSIE [1-6]\.";
  resolver $NAMESERVERS ipv6=off;
  root /usr/share/nginx/html;
  include /etc/nginx/mime.types;
  location / {
    index  index.html;
  }
  .....

}

:::success

  1. listen 80;listen [::]:80;:指定服务器监听80端口,既支持IPv4又支持IPv6连接。
  2. gzip on;:启用gzip压缩以压缩响应内容。
  3. gzip_min_length 1k;:指定压缩响应的最小长度。长度小于此值的响应将不会被压缩。
  4. gzip_comp_level 9;:设置压缩级别为9,这是最高的压缩级别。
  5. gzip_types ...;:指定应该使用gzip压缩的文件类型。
  6. gzip_vary on;:在响应中添加"Vary: Accept-Encoding"头,告诉缓存服务器响应的内容取决于请求中"Accept-Encoding"头的值。
  7. gzip_disable "MSIE [1-6].";:禁用特定版本的Internet Explorer的gzip压缩。
  8. resolver <math xmlns="http://www.w3.org/1998/Math/MathML"> N A M E S E R V E R S i p v 6 = o f f ; ∗ ∗ :定义用于解析域名的 D N S 服务器。 ∗ ∗ NAMESERVERS ipv6=off;**:定义用于解析域名的DNS服务器。** </math>NAMESERVERSipv6=off;∗∗:定义用于解析域名的DNS服务器。∗∗NAMESERVERS变量应该在Nginx配置的其他地方定义。
  9. root /usr/share/nginx/html; :设置用于提供文件的根目录。在这种情况下,它设置为 /usr/share/nginx/html
  10. include /etc/nginx/mime.types;:包含MIME类型文件,该文件将文件扩展名映射到MIME类型。
  11. location / { index index.html; } :定义了如何处理根URL("/")的请求。在这种情况下,它指定如果请求的URL是"/",Nginx应该从之前指定的根目录中提供名为index.html的文件。 :::
  1. dockerfile文件
nginx 复制代码
FROM nginx
ADD nginx.conf /etc/nginx/conf.d/default.conf
ADD docker-entrypoint.sh /docker-entrypoint.sh
COPY dist /usr/share/nginx/html
CMD ["sh","/docker-entrypoint.sh"]

:::success

这个Dockerfile的作用是构建一个基于Nginx的Docker镜像,并将一些配置文件和静态资源文件添加到镜像中,最后定义了容器启动时的默认命令。

  1. FROM nginx:从官方的Nginx镜像开始构建。
  2. ADD nginx.conf /etc/nginx/conf.d/default.conf :将主机上的 nginx.conf 文件添加到镜像中的 /etc/nginx/conf.d/default.conf 。这里假设 nginx.conf 文件是一个Nginx配置文件,用于配置Nginx服务器。
  3. ADD docker-entrypoint.sh /docker-entrypoint.sh :将主机上的 docker-entrypoint.sh 脚本添加到镜像中的 /docker-entrypoint.sh。这个脚本可能是用于容器启动时的一些初始化操作,比如启动Nginx服务器前的一些配置。
  4. COPY dist /usr/share/nginx/html :将主机上的 dist 目录中的内容复制到镜像中的 /usr/share/nginx/html 目录。这个目录通常用于存放Nginx服务器要提供的静态资源文件,比如HTML、CSS、JavaScript文件等。
  5. CMD ["sh","/docker-entrypoint.sh"] :定义容器启动时的默认命令。在这里,它会执行 /docker-entrypoint.sh 脚本,可能是用来启动Nginx服务器或者执行其他初始化操作的脚本。 :::

前端项目进行docker操作

:::info

  1. 第一步

yarn build // 打包

cp -rf dist ./docker/ // 将dist拷贝在docker目录下

  1. 第二步

cd docker // 进入docker文件夹

docker build -t your server IP . // 这个' . '一定不要忘记

docker push your server IP // 类似git push的操作 懂得都懂 :::

Docker部署

docker安装

:::success 参考官方:hub.docker.com/ :::

连接服务器

:::info 用SSH连接 your server :::

部署

:::info sudo docker compose down //停止服务

sudo docker pull your server // 拉取最新软件

sudo docker compose up //启动服务 :::

查看部署是否成功

:::info

  1. docker images //查看docker 镜像
  2. dockerps // 查看容器运行状态 :::

Docker常用命令

  1. 镜像相关命令
    • docker pull <镜像名>:从远程仓库拉取镜像。
    • docker images:列出本地所有的镜像。
    • docker rmi <镜像ID或名字>:删除指定的镜像。
  2. 容器相关命令
    • docker run <镜像名>:根据镜像创建并运行一个容器。
    • docker ps:列出当前正在运行的容器。
    • docker ps -a:列出所有容器,包括停止的。
    • docker start <容器ID或名字>:启动一个停止的容器。
    • docker stop <容器ID或名字>:停止一个运行中的容器。
    • docker restart <容器ID或名字>:重启一个容器。
    • docker rm <容器ID或名字>:删除指定的容器。
    • docker exec -it <容器ID或名字> <命令>:在运行中的容器中执行命令。
  3. 容器日志相关命令
    • docker logs <容器ID或名字>:查看容器的日志输出。
    • docker logs -f <容器ID或名字>:实时跟踪容器的日志输出。
  4. 容器网络相关命令
    • docker network ls:列出所有网络。
    • docker network inspect <网络名>:查看指定网络的详细信息。
    • docker network create <网络名>:创建一个新的网络。
  5. 其他常用命令
    • docker version:查看 Docker 版本信息。
    • docker info:查看 Docker 系统信息。
    • docker search <关键词>:搜索 Docker Hub 中的镜像。
    • docker commit <容器ID或名字> <新镜像名>:保存容器的修改为新的镜像。
    • docker tag <现有镜像名> <新镜像名>:给现有的镜像打标签

新手一枚,如果有描述不正确的地址请指出,多谢!

相关推荐
爱分享的程序员28 分钟前
前端面试专栏-算法篇:18. 查找算法(二分查找、哈希查找)
前端·javascript·node.js
翻滚吧键盘33 分钟前
vue 条件渲染(v-if v-else-if v-else v-show)
前端·javascript·vue.js
vim怎么退出35 分钟前
万字长文带你了解微前端架构
前端·微服务·前端框架
你这个年龄怎么睡得着的35 分钟前
为什么 JavaScript 中 'str' 不是对象,却能调用方法?
前端·javascript·面试
Java水解38 分钟前
前端常用单位em/px/rem/vh/vm到底有什么区别?
前端
CAD老兵41 分钟前
Vite 如何借助 esbuild 实现极速 Dev Server 体验,并支持无 source map 的源码调试
前端
南屿im42 分钟前
JavaScript 手写实现防抖与节流:优化高频事件处理的利器
前端·javascript
Spider_Man42 分钟前
从零开始构建React天气应用:API集成与UI设计全指南 🌤️
前端·react.js
浩浩测试一下1 小时前
渗透信息收集- Web应用漏洞与指纹信息收集以及情报收集
android·前端·安全·web安全·网络安全·安全架构
西陵1 小时前
Nx带来极致的前端开发体验——借助CDD&TDD开发提效
前端·javascript·架构