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 <现有镜像名> <新镜像名>:给现有的镜像打标签

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

相关推荐
前端小白从0开始27 分钟前
Vue3项目实现WPS文件预览和内容回填功能
前端·javascript·vue.js·html5·wps·文档回填·文档在线预览
難釋懷1 小时前
Vue解决开发环境 Ajax 跨域问题
前端·vue.js·ajax
特立独行的猫a1 小时前
Nuxt.js 中的路由配置详解
开发语言·前端·javascript·路由·nuxt·nuxtjs
咸虾米1 小时前
在uniCloud云对象中定义dbJQL的便捷方法
前端·javascript
梨子同志1 小时前
JavaScript Proxy 和 Reflect
前端·javascript
汤圆炒橘子1 小时前
状态策略模式的优势分析
前端
90后的晨仔2 小时前
解析鸿蒙 ArkTS 中的 Union 类型与 TypeAliases类型
前端·harmonyos
IT_陈寒2 小时前
Element Plus 2.10.0 重磅发布!新增Splitter组件
前端·人工智能·后端
挑战者6668882 小时前
vue入门环境搭建及demo运行
前端·javascript·vue.js
贩卖纯净水.2 小时前
Webpack的基本使用 - babel
前端·webpack·node.js