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
#docker文件拷贝
docker cp 容器id:容器文件位置  需要拷贝到的宿主位置

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需要访问的数据库连接

Docker部署jeecgboot微服务使用记录_第1张图片

nacos文件下选择nacos, 自定义路由配置是nacos,所以在nacos上面创建了一个jeecg-docker002.yaml的配置文件,复制于jeecg-prod.yaml,修改里面的配置(比如需要访问的redis连接等)

Docker部署jeecgboot微服务使用记录_第2张图片

nacos打包运行

nacos的dockerfile文件配置如下

# 使用jdk8作为基础镜像
FROM openjdk:8

COPY *.jar /jeecg-cloud-nacos-3.2.0.jar
# 作者说明
MAINTAINER [email protected]
# 运行命令
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 [email protected]
# 运行命令
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地址


192.168.5.62:8848

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程序把虚拟机内存占用完

情况如下

Docker部署jeecgboot微服务使用记录_第3张图片

 在启动的

java -jar app0.jar

改为

java -Xms128m -Xmx256m -Xmn256m -jar app0.jar
# -Xms128m初始化堆大小
# -Xmx256m最大堆大小
# -Xmn256m青年代大小

以后启动项目还是占用高,估计配置错误,暂时用一下办法过度

输入

docker stats

 结果显示limit很多都为为3.7G

Docker部署jeecgboot微服务使用记录_第4张图片

 在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

你可能感兴趣的:(linux,docker,微服务,容器,java)