Docker部署jeecgboot微服务使用记录
docker安装和基础命令
docker安装
docker安装详细步骤
Docker命令
#进入容器
sudo docker exec -it 775c7c9ee1e1 /bin/bash
# docker中 启动所有的容器命令
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
# docker中 关闭所有的容器命令
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
#docker中 删除所有的容器命令
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)
#docker中 删除所有的镜像
docker rmi $(docker images | awk '{print $3}' |tail -n +2)
docker stop jeecg-boot-nacos
docker stop jeecg-boot-gateway
docker stop jeecg-boot-system
docker rm jeecg-boot-nacos
docker rm jeecg-boot-gateway
docker rm jeecg-boot-system
#查看日志最新100行
docker logs --tail=100 jeecg-boot-system
idea连接docker开放2375端口:
docker开放2375端口问题,放开端口配置以后(适用于本地电脑版本,云服务用idea连接服务器上的docker)
vi /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd
修改为:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
执行命令
systemctl daemon-reload
systemctl restart docker
#修改完以后,还需要重启防火墙设置一下,才可以访问。未解决:第二次重启以后,需要开启防火墙才可以访问
//打开防火墙
systemctl start firewalld.service
//添加2375端口设置开放,永久
firewall-cmd --zone=public --add-port=2375/tcp --permanent
--permanent 永久有效
//开放端口后重启网络服务
systemctl restart firewalld
systemctl status firewalld
//关闭防火墙
systemctl stop firewalld.service
//查看已经开放的端口
firewall-cmd --list-ports
//设置firewall开机启动
systemctl enable firewalld
禁止firewall开机启动
systemctl disable firewalld
docker一个一个安装服务
docker建立network通信
docker network create jeecg-network
docker安装redis配置
#拉取最新的redis
docker pull redis
#运行redis
docker run --restart=always -p 6379:6379 --network jeecg-network --network-alias jeecg-boot-redis --name myredis -v $PWD/home/redis/myredis/data:/data -d redis redis-server --requirepass 123456 --appendonly yes
#持久化
--appendonly yes
#设置密码
–-requirepass 123456
docker启动mysql
#下载mysql
docker pull mysql:5.7
#运行,访问数据库
docker run -itd --name mysql-server -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --network jeecg-network --network-alias jeecg-boot-mysql --restart=always -v /home/data/mysql/data:/var/lib/mysql --privileged=true mysql:5.7
#简单说明
--network jeecg-network 使用一个网络(用来java项目连接数据库的)
--network-alias jeecg-boot-mysql 该容器网络的别名(在mysql的连接地址上用这个别名)
--restart=always 开机自动重启
-d 后台运行
--name=mysql-server 容器取一个名称
-v /home/data/mysql/data:/var/lib/mysql 数据库作持久化,把容器里面的数据库挂载到虚拟机的home/data/mysql/data文件里面,,但少了配置项conf.d报错
--privileged=true 给容器加上特定权限,不然/var/lib/mysql会报没有权限的错误
#暂时无用
-v mysql-data:/home/data/mysql
#保存mysql配置,容器启动时报没有conf.d这个文件
-v /home/data/mysql/conf:/etc/mysql/conf.d
jeecg修改环境配置
选择环境docker002,docker002.yaml里面配置有nacos需要访问的数据库连接
nacos文件下选择nacos, 自定义路由配置是nacos,所以在nacos上面创建了一个jeecg-docker002.yaml的配置文件,复制于jeecg-prod.yaml,修改里面的配置(比如需要访问的redis连接等)
nacos打包运行
nacos的dockerfile文件配置如下
# 使用jdk8作为基础镜像
FROM openjdk:8
COPY *.jar /jeecg-cloud-nacos-3.2.0.jar
# 作者说明
MAINTAINER 2399029275@qq.com
# 运行命令
RUN mkdir -p /jeecg-cloud-nacos
# 运行在一个文件里面
WORKDIR /jeecg-cloud-nacos
CMD ["--server.port=8848"]
# 暴露端口8848
EXPOSE 8848
# 配置容器完以后启动命令java -jar /jeecg-cloud-nacos-3.2.0.jar
ENTRYPOINT ["java","-jar","/jeecg-cloud-nacos-3.2.0.jar"]
把dockerfile文件和jar文件放到同一文件目录下执行命令
docker build -t jeecg-boot-nacos:0.0.1 .
生成镜像以后,运行镜像文件
docker run -d -P --name jeecg-boot-nacos -p 8848:8848 --network jeecg-network jeecg-boot-nacos:0.0.1
#说明
--network jeecg-network 申明网络以后,可以访问同网络下的mysql数据库
gateway运行和打包
dockerfile文件配置如下
# 使用jdk8作为基础镜像
FROM openjdk:8
COPY *.jar /jeecg-cloud-gateway-3.2.0.jar
# 作者说明
MAINTAINER 2399029275@qq.com
# 运行命令
RUN mkdir -p /jeecg-cloud-gateway
# 运行在一个文件里面
WORKDIR /jeecg-cloud-gateway
CMD ["--server.port=9999"]
# 暴露端口9999
EXPOSE 9999
# 配置容器完以后启动命令java -jar /jeecg-cloud-gateway-3.2.0.jar
ENTRYPOINT ["java","-jar","/jeecg-cloud-gateway-3.2.0.jar"]
生成镜像文件
docker build -t jeecg-boot-gateway:0.0.1 .
部署镜像文件
docker run -d --name jeecg-boot-gateway -p 9999:9999 --network jeecg-network jeecg-boot-gateway:0.0.1
即可在nacos的服务上,发现gateway已经被注册成功
jeecgboot-system程序按照以上步骤即可
docker一键安装各类服务
docker-compose使用
docker需要依次安装redis,jdk,nginx,mysql,软件jar包,有点麻烦,就诞生了docker-compose,一次性搞定docker里面的软件安装(注意docker-compose安装分为2个版本,一个win10系统及以上+hyper-v,一个是win10家庭版一下+virtualbox)
idea连接服务器上的docker 步骤和方法(用于连接虚拟机安装有dokcer或者云服务器上的docker)
myslq持久化配置
version: '2'
services:
jeecg-boot-mysql:
build:
context: ../db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: '%'
TZ: Asia/Shanghai
volumes:
- "/mydata/docker_mysql/data:/var/lib/mysql"
- "/mydata/docker_mysql/conf:/etc/mysql/conf.d"
restart: always
# 添加一下配置做好持久化
volumes:
- "/mydata/docker_mysql/data:/var/lib/mysql"
- "/mydata/docker_mysql/conf:/etc/mysql/conf.d"
挂载时候会出现权限Premission denied问题,一下是解决办法关闭SELinux即可
1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态
SELinux status: enabled
2、getenforce ##也可以用这个命令检查
关闭SELinux:
1、临时关闭(不用重启机器):
setenforce 0 ##设置SELinux 成为permissive模式
##setenforce 1 设置SELinux 成为enforcing模式
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可
gateway连接nacos失败
报错提示currentServerAddr: http://127.0.0.1:8848, err : Connection refused (Connection refused)
解决办法:
防火墙添加8848这个端口
系统配置的nacos发现地址为如下,以前是jeecg-boot-nacos,官网提示修改为127.0.0.1。我这里是修改为当前centos7系统的ip地址
<!--Nacos服务发现地址-->
<discovery.server-addr>192.168.5.62:8848</discovery.server-addr>
gateway连接redis失败
failed: No route to host: /192.168.5.62:6379
解决办法:防火墙开放6379这个端口
system连接mysql失败
The driver has not received any packets from the server
原因:等待mysql响应时间超时
show global variables like 'wait_timeout'
结果是2880,时间很短
解决办法:
#复制容器内的my.cnf到centos7系统的一个文件上
docker cp jeecg-boot-mysql:/etc/mysql/my.cnf /mydata/docker_mysql/conf
添加一个配置wait_timeout=86400
#把修改后的文件复制到容器里面
docker cp my.cnf jeecg-boot-mysql:/etc/mysql/my.cnf
#重启docker
systemctl restart docker
#在mysql执行语句
show global variables like 'wait_timeout'
结果是86400,修改成功
远程访问rabbitmq设置
jeecg-boot-rabbitmq:
# 安装rabbit 和 rabbit的管理端
image: rabbitmq:3-management
#image: rabbitmq:3
environment:
RABBITMQ_DEFAULT_USER: root
RABBITMQ_DEFAULT_PASS: root123456
ports:
- 5672:5672
- 15672:15672
restart: always
container_name: jeecg-boot-rabbitmq
hostname: jeecg-boot-rabbitmq
输入ip/15672即可访问rabbitmq,environment设置用户名和密码
发现nacos程序和有的程序占用cpu过高
docker stats以后发现nacos的内存使用率已经占满了,以前设置内存是300m,后来设置为500m,有近80m的空闲内存使用率以后,cpu的占用率就下来了,内存太小了会导致问题
发现一个java程序占用cpu过高(没解决)
用finalshell时,发现cpu使用过高,由于部署了多个java项目,输入下面指令docker stats,找到是哪个容器的cpu使用率高CENTOS7-JAVA模拟CPU占用高及排查( 转)
docker stats
#结果
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
192f6af33bf4 0.10% 8.363 MiB / 3.701 GiB 0.22% 44.3 kB / 4.98 kB 32 MB / 0 B 4
ca545479c841 0.37% 403.7 MiB / 3.701 GiB 10.65% 9.57 MB / 1.78 MB 315 MB / 29.8 MB 44
8c896f25399d 2.19% 243.5 MiB / 3.701 GiB 6.43% 1.48 MB / 2.07 MB 144 MB / 32.8 kB 59
9a6e1d0161b0 1.03% 465.1 MiB / 3.701 GiB 12.27% 3.43 MB / 2.8 MB 332 MB / 419 kB 173
c37390687244 82.64% 174.6 MiB / 3.701 GiB 4.61% 15.3 kB / 4.45 kB 0 B / 24.6 kB 15
#发现容器******的cpu使用率高
docker 分析cpu占用过高_打包爱的博客-CSDN博客_docker容器cpu过高
docker 容器里面安装jdk8,安装太慢了,不清楚为啥
发现Java程序把虚拟机内存占用完
情况如下
在启动的
java -jar app0.jar
改为
java -Xms128m -Xmx256m -Xmn256m -jar app0.jar
# -Xms128m初始化堆大小
# -Xmx256m最大堆大小
# -Xmn256m青年代大小
以后启动项目还是占用高,估计配置错误,暂时用一下办法过度
输入
docker stats
结果显示limit很多都为为3.7G
在dockerfile文件里面添加一个配置mem_limit: 300m,限定内存大小
jeecg-boot-demo:
depends_on:
- jeecg-boot-nacos
build:
context: ../jeecg-boot-module-demo
ports:
- 7002:7002
mem_limit: 300m
container_name: jeecg-boot-demo
hostname: jeecg-boot-demo
restart: on-failure
environment:
- TZ=Asia/Shanghai
重启项目,发现内存使用率就下来了,输入docker stats
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
429ec8fea4b2 4.60% 199.6 MiB / 200 MiB 99.78% 213 kB / 156 kB 911 MB / 785 MB 42
e63c462f4b0d 88.25% 186 MiB / 200 MiB 92.98% 86.5 kB / 42.5 kB 4.76 GB / 3.02 GB 214
e4865e5efda6 1.04% 337.1 MiB / 3.7 GiB 8.90% 2.21 MB / 3.67 MB 995 MB / 74.5 MB 51
63c38022daab 0.11% 4.32 MiB / 3.7 GiB 0.11% 1.4 MB / 567 kB 146 MB / 138 kB 4
bb639ca104b1 0.23% 60.26 MiB / 3.7 GiB 1.59% 367 kB / 1.06 MB 395 MB / 651 kB 30
de8222e6a6e7 0.00% 164 KiB / 300 MiB 0.05% 2.01 kB / 656 B 0 B / 0 B 2
35184542798f 211.47% 202.1 MiB / 300 MiB 67.36% 16.8 kB / 6.13 kB 0 B / 0 B 14
432cb50833c2 0.00% 164 KiB / 200 MiB 0.08% 698 B / 656 B 0 B / 0 B 2