方式一:通过两个容器部署
前端部署:
-
修改前端访问端口 ip 为服务器 ip,打包前端:npm run build:prod
-
创建文件夹,放置前端部署需要的文件,并将打包的前端 dist 文件放到此文件
-
编写 default.conf 配置文件,配置 nginx:
server{ listen 80; server_name 62.234.35.76; #修改为自己服务器 ip location / { root /usr/share/nginx/html; index index.html; } location /prod-api/ { proxy_pass http://62.234.35.76:8383/; } }
-
编写 Dockerfile 文件:
#基于父类镜像 nginx FROM nginx #作者 MAINTAINER lijiaxu #将前端的内容复制到 nginx 目录下 COPY dist /usr/share/nginx/html/ #用本地的 nginx 配置文件覆盖镜像的 nginx 配置 COPY default.conf /etc/nginx/conf.d #开放端口 EXPOSE 80
-
将 dockerfile 文件打包成镜像文件:
docker build -f Dockerfile -t community-front:1 . #注意 . 不要忘掉
-
运行该镜像:
docker run -p 83:80 community-front:1
后端部署:
-
修改后端端口 ip,打包项目:
-
创建文件夹部署需要的文件,将打包好的 jar 包放入此文件夹
-
编写 Dockerfile 文件:
# 基础镜像使用java FROM java:8 # 作者 MAINTAINER zhangjinxiu # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为springbootb.jar ADD jar包文件名 community.jar # 运行jar包 RUN bash -c 'touch /community.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/community.jar"] #暴露8080端口 EXPOSE 8383
-
将 dockerfile 打包成镜像文件:
docker build -f Dockerfile -t community-java:1 . #注意 . 不要忘记
-
运行该镜像文件:
docker run -p 8383:8383 community-java:1
-
还需启动 mysql 和 redis:
-
访问服务即可:
第二种方式:通过 compose 编排容器自动部署
-
删除所有容器以及镜像:
docker stop $(docker ps -q) & docker rm $(docker ps -aq) ===> 停止所有容器,并删除所有容器 docker rmi $(docker images -q) ===> 删除所有镜像
-
创建文件夹,放置需要部署的文件:
- 将前端打包后的 dist 文件夹放入该文件下
-
修改后端配置文件,打包后上传至服务器:
-
编写启动后台的 Dockerfile 文件:
#基础镜像 FROM kdvolder/jdk8:latest #作者 MAINTAINER lijiaxu # 在主机 /var/lib/docker 目录下创建一个临时文件,并链接到容器的 /tmp VOLUME /tmp #将 jar 包添加至容器并更名为 community.jar ADD SpringBootCommunity-1.0-SNAPSHOT.jar community.jar #运行的 jar 包 RUN bash -c 'touch /community.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/community.jar"] #暴露 8383 端口 EXPOSE 8383
-
在文件夹中创建 db 文件夹,里面放置项目用到的 SQL 文件
-
编写 mysql-dockerfile:
FROM mysql:5.7 MAINTAINER lijiaxu #docker-entrypoint-initdb.d/ 目录下所有 .sh .sql .sql.gz 文件将在数据库初始化时被执行或导入 #这意味着community-linux.sql 中的 SQL 命令将在数据库容器首次启动时被执行,从而初始化数据库 ADD ./db/community-linux.sql /docker-entrypoint-initdb.d/
-
编写 nginx.conf 文件:
worker_processes 1; events{ worker_connections 1024; } http{ include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server{ listen 80; server_name localhost; location / { root /usr/share/nginx/html; try_files $uri $uri/ /index.html last; index index.html; } location /prod-api/ { proxy_pass http://服务器地址:8383/; } } }
-
编写 docker-compose.yml 文件:
version: '3.0' services: mysql: image: mysql:5.7 container_name: mysql build: context: ./ dockerfile: mysql-dockerfile restart: always command: --default-authentication-plugin=mysql_native_password #解决外部无法访问问题 ports: - "3308:3306" environment: MYSQL_ROOT_PASSWORD: 'root' MYSQL_DATABASE: 'community' MYSQL_PASSWORD: 'root' networks: - community redis: image: redis:7.0 container_name: redis restart: always ports: - "6379:6379" networks: - community nginx: container_name: nginx build: context: ./ dockerfile: nginx-dockerfile # restart: always # volumes: # - ./nginx.conf:/etc/nginx/nginx.conf # - ./dist:/usr/share/nginx/html/ ports: - "83:80" depends_on: - my-community networks: - community my-community: build: context: ./ dockerfile: Dockerfile ports: - "8383:8383" # volumes: # - /CommunityFace/upload/face:/app/data/face/ # - /CommunityFace/upload/excel/:/app/data/excel/ depends_on: - redis - mysql restart: always networks: - community networks: #定义服务的桥 community: driver: bridge
-
运行容器:
docker-compose up #前台运行 docker-compose up -d #后台运行
-
查看容器:
-
如果容器发生错误:
-
如:不显示端口映射,可以查看详细信息
docker-compose logs nginx(容器名)
-
-
页面测试,访问端口:83