本文將經過docker-compose
來部署前端Vue項目到Nginx中,和運行後端SpringBoot項目html
總體項目配置結構,這裏在不影響原來項目的結構,所以將全部配置文件都提出來存放到docker文件夾內了,但注意docker-compose
文件須放到項目總的根目錄下哦!
前端
api-Dockerfile
# 指定基礎鏡像 FROM maven:3.5.4-jdk-8 # 維護者信息 MAINTAINER zhengqing "960869719@qq.com" RUN echo "-------------------- api環境配置 --------------------" # 暴露9101端口 EXPOSE 9101 # 設置環境編碼UTF-8 ENV LANG C.UTF-8 # 運行 - 配置容器,使其可執行化 #ENTRYPOINT ["java", "-jar", "app.jar","--spring.profiles.active=dev"]
web-Dockerfile
、nginx.conf
、.dockerignore
web-Dockerfile
: 安裝依賴,打包生成運行訪問所需資源文件,而後存放到nginx下的html目錄中運行# node鏡像 FROM node:latest as build-stage # 維護者信息 MAINTAINER zhengqing "960869719@qq.com" RUN echo "-------------------- web環境配置 --------------------" # 指定接下來的工做路徑爲/app - 相似於cd命令 WORKDIR /app # 拷貝前端項目到app目錄下 COPY ./code-web . # 設置淘寶npm鏡像 RUN npm install -g cnpm --registry=https://registry.npm.taobao.org # 安裝依賴 RUN cnpm install # 打包 - 目的:丟到nginx下跑 RUN cnpm run build:prod # 前端項目運行命令 #CMD ["npm","run","start"] # ======================== 上:npm打包 下:nginx運行 ======================== # nginx鏡像 FROM nginx:1.15.3-alpine as production-stage # 維護者信息 MAINTAINER zhengqing "960869719@qq.com" # 移除nginx容器的default.conf文件、nginx配置文件 RUN rm /etc/nginx/conf.d/default.conf RUN rm /etc/nginx/nginx.conf # 把主機的nginx.conf文件複製到nginx容器的/etc/nginx文件夾下 COPY ./docker/web/nginx.conf /etc/nginx/ # 拷貝前端vue項目打包後生成的文件到nginx下運行 COPY --from=build-stage /app/dist /usr/share/nginx/html # 暴露8101端口 EXPOSE 8101 # 注:CMD不一樣於RUN,CMD用於指定在容器啓動時所要執行的命令,而RUN用於指定鏡像構建時所要執行的命令。 # RUN指令建立的中間鏡像會被緩存,並會在下次構建中使用。若是不想使用這些緩存鏡像,能夠在構建時指定--no-cache參數,如:docker build --no-cache # 使用daemon off的方式將nginx運行在前臺保證鏡像不至於退出 CMD ["nginx", "-g", "daemon off;"]
nginx.conf
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; # include /etc/nginx/conf.d/*.conf; server { listen 8101; charset utf-8; server_name www.zhengqing520.com;# 服務器地址或綁定域名 # start --------------------------------------------------------------------------------------------- location / { root /usr/share/nginx/html; try_files $uri $uri/ /index.html; } # end --------------------------------------------------------------------------------------------- error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } }
.dockerignore
做用:在傳遞給docker引擎時忽略掉沒必要要的文件或文件夾。/code-web/node_modules
docker-compose.yml
做用:編排容器執行順序,相對於一個一個docker run方式運行項目更方便version: '3' services: api: # 後端springboot容器 container_name: xiao-xiao-su-api # 容器名爲'xiao-xiao-su-api' restart: always # 重啓策略: 容器退出時老是重啓容器 build: context: ./ # 指定設定上下文根目錄,而後以該目錄爲準指定Dockerfile dockerfile: ./docker/api-Dockerfile working_dir: /app # 設置工做目錄爲容器內的app文件夾 environment: TZ: Asia/Shanghai volumes: # 掛載文件 - ./code-api:/app # 將主機的code-api文件夾(java代碼)映射到容器內的app文件夾 - ./logs/:/app/log # 映射容器產生的日誌到主機的logs文件夾 ports: # 映射端口 - "9101:9101" command: mvn clean spring-boot:run -Dspring-boot.run.profiles=dev '-Dmaven.test.skip=true' # 容器建立後執行命令運行springboot項目 web: # 前端node容器(運行nginx中的Vue項目) container_name: xiao-xiao-su-web # 容器名爲'xiao-xiao-su-web' restart: always # 重啓策略: 容器退出時老是重啓容器 build: context: ./ # 指定設定上下文根目錄,而後以該目錄爲準指定Dockerfile dockerfile: docker/web/web-Dockerfile environment: TZ: Asia/Shanghai ports: - "8101:8101" # 映射端口 depends_on: # 依賴於api容器,被依賴容器啓動後此web容器纔可啓動 - api
將項目丟到服務器上,進入項目根目錄依次執行以下命令便可vue
# 1. 構建鏡像 docker-compose build # 2. 運行服務 docker-compose up -d
npm
拉取項目所需依賴node_modules
-> 打包生成dist
文件夾 -> 拷貝到nginx
中運行mvn install -Dmaven.test.skip=true
-> cd target
-> java -jar ***.jar
運行docker-compose
編排一下執行順序,①後端api容器 ②前端web容器docker-compose build
構建鏡像 -> docker-compose up -d
啓動應用服務關於Dockerfile
的命令理解,這裏貼一張網上看見比較有意思的圖吧
java