关于docker:使用Docker部署项目

4次阅读

共计 4359 个字符,预计需要花费 11 分钟才能阅读完成。

1. 我的项目简介

动物试验管理系统面向生物科技相干人员提供了一系列动物试验相干性能。

2. 我的项目架构

3. 部署平台

Win10->VMware->CentOS7->Docker

4. 具体部署

前端局部:dist.zip
后端局部:animal.jar、animal.properties

4.1.Mysql

docker run --name=mysql -d --privileged=true -p 13307:3306 -v /share/mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="123456" mysql:5.7.39

mysql 的数据不是放在容器中,而是通过关联、映射而放在了 Docker 外 CentOS 中
查看 Mysql 容器是否启动, 应用 Navicat 测试是否建设连贯
如果连贯胜利, 建设数据库 animal_experiment, 建设表, 向表中插入数据
如果连贯失败, 依据提醒进行排错(没有应用容器的内部 IP、端口号; 明码谬误; 防火墙)

4.2.Redis

docker run --privileged=true -p 16379:6379 --name=redis -v /share/redis/data:/data -d redis redis-server --requirepass 123456

Redis 的数据不是放在容器中,而是通过关联、映射而放在了 Docker 外 CentOS 中
查看 Redis 容器是否启动, 在 docker 外 CentOS 中应用 redis-cli 测试是否建设连贯, 测试是否可能应用配置的明码进行认证

4.3.RabbitMQ

docker run -d -p 5672:5672 -p 15672:15672 --name=mq1 rabbitmq:rabbitmq:3.9.22
docker exec mq1 rabbitmq-plugins enable rabbitmq_management
docker exec mq1 rabbitmqctl add_user admin 123456
docker exec mq1 rabbitmqctl set_user_tags admin administrator
docker exec mq1 rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

查看 Mysql 容器是否启动, 测试是否应用 Chrome 拜访 RabbitMQ 的内部 IP、端口, 在登陆界面应用账号 guest、明码 guest 登录,查看 adminstartor 中是否存在 admin 及明码、主机

4.4.Minio

docker run -itd -p 19000:9000 -p 19090:19090 \
  --name minio1 \
  -e "MINIO_ACCESS_KEY=minioadmin" \
  -e "MINIO_SECRET_KEY=minioadmin" \
  -v /share/data:/data \
  -v /share/config:/root/.minio \
  minio/minio server /data \
  --console-address ":19090"

查看 Mysql 容器是否启动,Minio 的数据不是放在容器中,而是通过关联、映射而放在了 Docker 外 CentOS 中
测试是否在浏览器中应用内部 IP、端口号拜访 Minio, 在登陆页面是否应用账号 minioadmin、明码 minioadmin

4.5.Tomcat(animal.jar)

4.5.1 编辑配置文件

查看并记录容器 mysql、redis、rabbitmq、minio 的外部 IP、地址。
编辑 animal.properties

spring.application.name=Leiren-AnimalExperiment
server.port=8188
ispring.profiles.active=test

#拜访排除门路(不必动)access.token.exclude.path.patterns=/,/error,/actuator/**,/login,/getTransEncryptKey,/validateCode/**,/swagger-ui.html,/verifyCode/**,/register,/isRegistered/**,/file/download/**

#ws-extends-starter 配置
ws.extends.always-force-close=false
ws.extends.enable-api-doc=true

#redis config redis 配置
spring.session.store-type=redis
spring.redis.host=172.17.0.5
spring.redis.port=6379
spring.redis.password=123456
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=-1
spring.redis.timeout=3000

#mysql config mysql 配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://172.17.0.2:3306/animal_experiment?useSSL=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL
spring.datasource.username=root
spring.datasource.password=123456
#spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
#解决事务中懒加载 session 敞开问题
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

#动物试验管理系统的用户默认明码
default-password=123456

#rabbitmq 配置信息
spring.rabbitmq.host=172.17.0.4
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=/
spring.rabbitmq.listener.simple.retry.enabled=true

##### minio 配置 

minio.server.endpoint=172.17.0.6
minio.server.port=9000
minio.server.secure=false
minio.server.access-key=minioadmin
minio.server.secret-key=minioadmin

##### 我的项目须要用到的 bucket 创立对应的 bucket

minio.server.must-buckets=system,ethics,experiment,room-cage,animal

4.5.2 创立、启动容器

docker run -dit --name=animal \
-p 18188:8188 \
-v /opt/animalExperiment:/opt \
kdvolder/jdk8 \
java -jar -Dspring.config.location=/opt/animal.properties /opt/animal.jar

查看容器 animal 是否启动, 日志是否没有 ERROR

4.6.Nginx

4.6.1 编辑配置文件

查看并记录容器 animal 的 IP
创立一个 animal_experiment.conf

server {
    listen       8009;
    location /{
        root   /var/www/dist; #对应 dist 的绝对路径
        index  index.html index.htm;
    }
    location ^~ /api/{rewrite /api/(.*) /$1 break; #去掉门路中的 /api 不然无法访问到服务器
        proxy_pass http://172.17.0.7:8188;
    }
}

批改 nginx.conf 文件中 user 应用 root,linux 做什么都要和权限打交道,tomcat 的部署都是用的是 root,所以这里就要批改权限.

关上 dist 目录中 static/js/app.6cc84a26.js 文件,全局查找 ws://172.172.172.102 替换为你的 后端的服务器的 IP 地址(有两处):
sed -e “s|ws://172.172.172.102|ws://192.17.0.7|g” -i.bak app.6cc84a26.js

4.6.2 创立、启动容器

docker run  -p 18880:80 -p 18889:8009 --name mynginx \
-v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /etc/nginx/conf.d:/etc/nginx/conf.d \
-v /var/www:/var/www \
-d  nginx

Nginx 通过关联、映射理论应用 Docker 外 CentOS 中的配置文件、前端局部

查看容器 nginx 是否启动, 测试是否应用内部 IP、端口号在浏览器中拜访 nginx, 登陆页面是否有验证码, 输出账号 admin、明码 123456、验证码之后点击登录是否登陆胜利

5. 总结

本次部署具备肯定的先后顺序:
依据我的项目架构中的各个服务之间关系(Nginx 拜访 Tomcat(animal.jar),Tomcat 拜访 Mysql、Nginx、Redis、Minio), 先测试 Mysql、Nginx、Redis、Minio 是否失常, 再测试 Tomcat 是否失常, 最初测试 Nginx 是否失常。

本次 docker 部署我的项目应用的是默认网络模式,容器重启可能会产生 IP 扭转的状况, 在调试过程常常须要更改配置文件的中各个服务的 IP, 带来很大的不便, 前期思考应用动态 IP

正文完
 0