docker持久化部署vue前端nodejs后端项目-- 02. 项目对应的docker-compose结构

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

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


系列文章

章节
1docker以及docker-compose在window以及linux的安装
2项目对应的docker-compose结构
3怎么将docker-compose项目部署到服务器上
4配置服务器JENKINS环境

额外篇

章节
1Sentry 是一个开源的错误监控和日志聚合平台-- 通过docker-compose 安装Sentry

前言

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重新打包成镜像,并安装成新的容器。

在这里插入图片描述

GIT 项目目录结构

主要参考脚本文件:docker.bat (window) 和 docker.sh(linux)就可以了。(docker.sh 可以用git 的bash运行就可以了)
自己的项目就删除jenkins/jobs,修改nginx配置就可以了

在这里插入图片描述

docker.sh 脚本

# 删除之前生成的映射文件
rm ./app -rf
# 停止 Docker Compose 中的所有容器,并删除相关的数据卷,包括项目的数据和缓存
docker-compose down -v
# 加载docker-compose
docker-compose up -d
# 休眠
sleep 10s
# 关闭docker-compose 拷贝配置文件
docker-compose down
# 将nginx配置文件拷贝到目标目录
rm ./app/nginx/nginx.conf -rf
cp ./config/nginx/nginx.conf ./app/nginx/nginx.conf -f
cp ./config/nginx/conf/ ./app/nginx/conf/ -rf
# 将jenkins配置文件拷贝到目标目录
cp ./config/jenkins/* ./app/jenkins/ -r
# 重新加载docker-compose
docker-compose up -d
# 拷贝配置文件 可自行注释,前后对比再考虑是否需要执行该指令 
# 其中jenkins 要与你的docker-compose.yml 文件的jenkins容器名保持一致~
docker cp ./config/jenkins/config.xml jenkins:/var/jenkins_home/

git结构

# tree /f
D:.
├─jenkins+nginx
│  │  .gitignore
│  │  docker-compose.yml
│  │  docker-compose1.yml
│  │  docker.sh
│  │  README.md
│  │
│  └─config
│      ├─jenkins
│      │  │  config.xml
│      │  │  cp.sh
│      │  │
│      │  └─jobs
│      │      └─mutual-likes
│      │          │  config.xml
│      │          │
│      │          └─jobs
│      │              ├─back-end-of-mutual-likes
│      │              │      config.xml
│      │              │      nextBuildNumber
│      │              │
│      │              ├─front-end-of-mutual-likes
│      │              │      config.xml
│      │              │      nextBuildNumber
│      │              │
│      │              └─mobile-end-of-mutual-likes
│      │                      config.xml
│      │                      nextBuildNumber
│      │
│      └─nginx
│          │  nginx.conf
│          │
│          └─conf
│                  front.conf
│                  mobile.conf
│                  pc.conf.back
│
├─nodejs
│      .dockerignore
│      Dockerfile
│      package-lock.json
│      package.json
│      server.js
│
└─sentry
        auto.bat
        docker-compose.yml
        README.MD

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
    networks:
      - nginx_network
    volumes:
      # window 环境
      - ./app/nginx/conf/:/etc/nginx/conf.d/
      - ./app/nginx/nginx.conf:/etc/nginx/nginx.conf       
      - ./app/nginx/logs/:/var/log/nginx/  # 同上 
      # 本地测试用  
      # - /C/docker-compose/nginx/www/:/www
      # 这里是挂载jenkins的workspace目录下的目标文件...
      - ./app/jenkins/www:/www

  jenkins:
    image: 'jenkins/jenkins:jdk11'
    # 自定义容器名
    container_name: jenkins
    restart: always
    # 授权
    user: root
    privileged: true 
    ports:
      - 8081:8080
      - 50001:50000
    volumes:
      # 下边4个都是配置文件
      - ./app/jenkins/jobs:/var/jenkins_home/jobs
      # 这个是项目打包后cp到的地址,这边映射出来
      - ./app/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: mysql456852 #这里自行设置root用户的密码
    command:  ##设置容器运行时执行的命令
      --default-authentication-plugin=mysql_native_password
    volumes:
      - ./app/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:    ##指定映射的端口(宿主机端口:容器内部端口)
      - 8088:8080
    depends_on:    ##设置容器的依赖关系,该adminer容器关联mysql容器
      - mysql      ##mysql这个镜像安装后,才会安装这个镜像

# 需要桥接上,主要是nginx做反向代理给nodejs容器,nodejs 由jenkins打包并加入到该网络
# nginx 的配置也需要添加上这个服务
networks:
  nginx_network:
    driver: bridge

2. jenkins

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

3. nginx

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

数据卷(挂载)

  • nginx/nginx.conf:讲本地配置挂载到容器中,实现初始化 (这里挂在的话会有问题,但是docker.sh 已经做了处理了~)
  • 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专栏结构,以便了解流程~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Penk是个码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值