docker持久化部署vue前端nodejs后端项目-- 项目结构

本章节主要来讲述项目的基本结构,,建议查看docker专栏结构,以便了解流程~

docker 专栏:点击此处
git:点击此处


文章目录

    • 前言
    • 期望
    • docker-compose 架构
    • docker-compose 文件
      • 0. 参数概览
      • 1. 源文件
      • 2. jenkins
      • 3. nginx
      • 4. mysql
      • 5. adminer
  • 总结

前言

docker持久化部署vue前端nodejs后端项目-- docker-compose部署nginx+jenkins+mysql+git。
做了一个项目,用nodejs写的后端,vue写的PC端以及移动端,数据库用mysql,现在要部署到服务器上。由于怕下次部署又要一堆操作,就弄了个docker,并且以此文章来做笔记以及分享。

期望

  • 服务器:换了服务器,只需要服务器安装好docker+docker-compose,并将此文件配置拷贝到服务器,编译一下,就可以有个项目框架,再对jenkins进行安装环境配置就可以了
    (jenkins的项目也同步到了jenkins/jobs中,所以项目不用重复配置)
  • 代码更新:以后有新版本的代码,可以通过jenkins打包,并且实时发布,对于web打包就是正常的build一下就可以,nodejs后端的话比较麻烦,要通过jenkins下载最新代码,运行脚本,将nodejs重新打包成镜像,并安装成新的容器。

docker持久化部署vue前端nodejs后端项目-- 项目结构_第1张图片

docker-compose 架构

│ .gitignore 上传git的过滤文件,部分配置是需要保留的,部分是生成的临时数据就不保留了
│ docker-compose.yml # 主要文件
│ docker.sh # 运行docker-compose

├─jenkins
│ │ config.xml 配置文件,不能直接挂载-v ,只能等容器加载好了手动覆盖,如下脚本
│ │ cp.sh # 将config.xml拷贝到容器的脚本
│ │
│ ├─jobs # 拷贝了工作目录
│ │
│ └─users# 同步过来的用户信息,主要是免了创建用户的那些步骤

└─nginx # nginx配置文件
│ nginx.conf

└─conf
front.conf
mobile.conf
pc.conf.back

docker-compose 文件

0. 参数概览

  • privileged:用来给容器root权限,不安全的
  • environment:设置容器中的环境变量
  • volumes :用来存储docker持久化的数据,启动tomcat容器后,读取的是主机目录中的文件包
  • network_mode: 设置容器的网络模式,下面是几种网络模式,有需要的可以自行查找资料
  1. host:容器环境不隔离,将使用主机的端口和ip,不能与ports 端口映射同时使用
  2. bridge:默认网卡,类似于 VMware 的 NAT 模式,如果需要访问容器内部的端口需要进行端口映射。
  3. overlay
  4. Macvlan
  5. none:禁止所有联网,没有网络驱动。

1. 源文件

version: '3.4'
services:
  nginx:
    image: nginx:1.23.3-alpine-slim
    container_name: nginx
    restart: always
    user: root
    privileged: true 
    ports:
      - 80:80
      - 443:443
      - 10081:10081
      - 10082:10082
    volumes:
      # window 环境
      - /C/docker-compose/nginx/conf/:/etc/nginx/conf.d/
      - /C/docker-compose/nginx/nginx.conf:/etc/nginx/nginx.conf       
      - /C/docker-compose/nginx/logs/:/var/log/nginx/  # 同上 
      # 本地测试用  
      # - /C/docker-compose/nginx/www/:/www
      # 这里是挂载jenkins的workspace目录下的目标文件...
      - /C/docker-compose/jenkins/www:/www

  jenkins:
    image: 'jenkins/jenkins:jdk11'
    # 自定义容器名
    container_name: jenkins
    restart: always
    # 授权
    user: root
    privileged: true 
    ports:
      - 8081:8080
      - 50001:50000
    volumes:
      # 下边4个都是配置文件
      - /C/docker-compose/jenkins/jobs:/var/jenkins_home/jobs
      - /C/docker-compose/jenkins/users:/var/jenkins_home/users
      # - /C/docker-compose/jenkins/config.xml:/var/jenkins_home/config.xml # 这个文件加载失败...
      # - /C/docker-compose/jenkins/jenkins_home:/var/jenkins_home
      # 这个是项目打包后cp到的地址,这边映射出来
      - /C/docker-compose/jenkins/www:/jenkins
      # 下面几个挂载是在linux下的,window 暂时没有找到对应的文件...
      # - /var/run/docker.sock:/var/run/docker.sock
      # - /usr/bin/docker:/usr/bin/docker                # 这是为了我们可以在容器内使用docker命令
      # - /usr/bin/docker-compose:/usr/local/bin/docker-compose

  mysql:  #mysql容器
    image: mysql 
    container_name: mysql
    restart: always
    # 授权
    user: root
    privileged: true 
    environment:  ##设置环境便变量
      TZ: Asia/Shanghai  ##设置时区
      MYSQL_ROOT_PASSWORD: 123456 #这里自行设置root用户的密码
    command:  ##设置容器运行时执行的命令
      --default-authentication-plugin=mysql_native_password
    volumes:
      - /C/docker-compose/mysql/datadir/:/var/lib/mysql
    ports:
      - 3306:3306  #宿主机和容器间的端口映射,可自行配置


  adminer:    ##指定服务名为adminer
    image: adminer    ##指定要运行的镜像为adminer adminer是一个mysql数据库的web工具
    container_name: adminer    ##指定容器名
    user: root
    privileged: true 
    restart: always    ##设置重启策略为always
    ports:    ##指定映射的端口(宿主机端口:容器内部端口)
      - 10080:8080
    depends_on:    ##设置容器的依赖关系,该adminer容器关联mysql容器
      - mysql      ##mysql这个镜像安装后,才会安装这个镜像

2. jenkins

  • /var/jenkins_home:将jenkins容器生成目录映射出来
  • /var/jenkins_home/jobs:将jenkins配置文件映射出来,git上传,后期换服务器也方便

3. nginx

nginx 配置的宗旨:一个server+port确定一个web项目…
别搞特殊,比如一个域名下,只用80端口,还想要多个项目,是很傻逼的一件事…

数据卷(挂载)

  • nginx/nginx.conf:讲本地配置挂载到容器中,实现初始化
  • nginx/conf/:文件夹,可扩展的配置也放进去了,比如PC跟Phone项目各可以有一个配置文件,其中映射的端口号也放在compose文件nginx service中的ports了
  • nginx/www/: 文件夹,主要是用于测试,后期可将其挂载到jenkins 生成的文件中
  • nginx/logs/:文件夹,主要看nginx生成的日志

4. mysql

  • 因为是mysql最新版,所以为了兼容密码,可以添加command指令,设置mysql_native_password
  • 数据库登录密码,可以在环境中初始化
MYSQL_ROOT_PASSWORD: 123456

5. adminer

用于登录远程登录数据库
其中,登录信息需要注意…

  • 系统选择:mysql
  • 服务器:需要的是compose 文件中mysql的service name~~~
  • 账号:root
  • 密码:在mysql service 可配置…

运行文件

# 记得先开打docker 服务...
# systemctl start docker
# 运行命令
docker-compose up -d
# 或者,运行脚本
./docker.sh

总结

本章节主要来讲述项目的基本结构,建议查看docker专栏结构,以便了解流程~

你可能感兴趣的:(Docker,jenkins,git,前端)