docker测试环境部署踩坑系列(编写中)

测试环境部署踩坑系列

数据库创建

在安装好pgsql之后,使用 escloud_database_init.sh初始化数据库

liunx环境执行

sh ./escloud_database_init.sh en 172.16.6.181 5432 postgres password

参数1: 脚本语言(cn中文/en英文)

参数2: 数据库host

参数3: 数据库端口

参数4: 数据库用户名

参数5: 数据库密码

此脚本会对参数的数据库进行库和表的建立(注意:会覆盖以往的数据库数据),建立如下数据库

  • CLOUD_CONFIG: 云综能平台依赖的数据库脚本,matterhorn服务(modelservice,dbcloud,notice等)依赖数据库
  • CLOUD_AUTH: auth-service权限服务依赖的数据
  • txlcn:txlcn分布式事务依赖的数据库
  • model_pool:model-management-service模型升级管理服务依赖的数据库
  • CLOUD_HISTORY:模型服务依赖数据,模型类型为 timeseries的表将建立在此数据库

云综能数据库环境建立如上

异常1:shell脚本无法连接数据库

FATAL: no pg_hba.conf entry for host

PostgreSQ数据库为了安全,它不会监听除本地以外的所有连接请求,当用户通过JDBC访问是,会报一些如下的异常:

org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host

要解决这个问题,只需要在PostgreSQL数据库的安装目录下找到/data/pg_hba.conf,找到“# IPv4 local connections:”

IPv4 local connections:

#host all all 127.0.0.1/32 md5
host all all 172.16.6.40/32 trust

然后 pgsql\bin 下 使用 pg_ctl restart -D F:\pgsql\data(数据库data路径)

docker服务部署

docker和docker-compose软件部署

在安装好centos之后,

修改 /etc/selinux 下config文件SELINUX=disabled 重启服务器(不设置docker-compose 启动会 permission denied )

使用 escloud_docker_service_init.sh初始化docker 服务

将文件上传到服务器 /home/setup,escloud_docker_service_init.sh 要在 /home/setup目录下

要在escloud_docker_service_init.sh 目录中的config文件中上传一些自定义配置

  • docker-compose.yml #docker 容器设置,定义本服务器部署的服务
  • daemon.json # docker配置,配置私库地址 和 网桥配置,【可以看下文ip冲突中的使用】
  • env #

脚本首先进行 文件夹创建和文件复制

创建服务所需的目录

/etc/CET/Common 建库脚本
/etc/CET/docker docker-compose.yml和docker 前端容器映射的文件,nginx 文件
/etc/CET/images 上传的镜像压缩包
/etc/CET/peccore peccore
/etc/CET/template 文件导入导出template
/etc/CET/upload 平台文件上传文件夹 (头像 icon 合同文件等等)

/home/cet/model 模型服务建库初始化脚本

/home/cet/model/upload 模型升级文件目录

/home/cet/mysql nacos 和 mysql依赖的数据库

/home/docker_soft docker软件目录

/etc/docker 文件夹下 daemon.json , key.json (docker配置文件)

linux(Centos7)指令大全

查看系统及内核版本

[root@yzn docker]# uname
Linux
[root@yzn docker]# uname -srm
Linux 3.10.0-1127.el7.x86_64 x86_64
[root@edge images]# hostnamectl
   Static hostname: edge
         Icon name: computer-desktop
           Chassis: desktop
        Machine ID: 18696d7290cc4a6d86e7ce4dae03cce6
           Boot ID: edc3f0d0359f476b800395ee33e744f0
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-862.el7.x86_64
      Architecture: x86-64

查看端口占用

查看 4119端口服务启动了没,kill端口
[root@edge images]$ netstat -nap | grep 4119
tcp        0      0 0.0.0.0:4119            0.0.0.0:*               LISTEN      25551/ConfigServer. 
[root@edge images]taskkill /pid 25551 -t -f

设置可执行文件

chmod +x /usr/local/bin/cluster_entrypoint.sh

查看可执行文件目录

[root@yzn docker]# which docker
/usr/bin/docker

查看本地ip网卡信息

[root@yzn docker]# ifconfig
br-d3f5bc92e248: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.19.0.1  netmask 255.255.255.0  broadcast 172.19.0.255
        inet6 fe80::42:5aff:fec4:c3fe  prefixlen 64  scopeid 0x20<link>
        ether 02:42:5a:c4:c3:fe  txqueuelen 0  (Ethernet)
        RX packets 2077896  bytes 331879635 (316.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1579205  bytes 1507196771 (1.4 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.100.1  netmask 255.255.255.0  broadcast 192.168.100.255
        ether 02:42:76:bc:ca:ca  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

压缩和解压

[root@edge setup]# tar -czvf db.tar ./db-script/     #压缩db-script文件夹为 db.tar
[root@edge setup]# tar -tzvf db.tar                  #显示压缩包内部文件
[root@edge setup]# cd db-script-bak/
[root@edge db-script-bak]# tar -xzvf ../db.tar       #解压 db.tar

重启docker

sudo systemctl daemon-reload        #daemon.json修改之后,加载配置文件
sudo systemctl start docker         #启动docker
sudo systemctl enable docker        #开机自启docker
sudo systemctl restart docker       #重启docker

docker 打包和加载镜像

# dockerfile 目录执行此命令
docker build -t 191.0.0.158/escloud/escloud-resource-service:v2.0.02 .
docker save 191.0.0.158/escloud/escloud-resource-service:v2.0.02 > escloud-resource-service.v2.0.02.tar
docker load --input escloud-resource-service.v2.0.02.tar

docker pull & push

docker pull 172.16.7.3/matterhorn/model-service:v2.0.8
docker tag 172.16.7.3/matterhorn/model-service:v2.0.8 172.17.6.38/matterhorn/model-service:v2.0.8  #镜像改名
docker login -u dev -p Dev12345 172.17.6.38    #登录私库
docker push 172.17.6.38/matterhorn/model-service:v2.0.8

防火墙设置

systemctl status firewalld # 防火墙状态
systemctl stop firewalld   # 防火墙暂时关闭
systemctl disable firewalld # 防火墙永久关闭
systemctl enable firewalld  # 防火墙重启

防火墙墙对外暴露端口

方式一 修改/etc/firewalld/zones/ 下的 public.xml文件

/etc/firewalld/zones/public.xml
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <port protocol="tcp" port="5432"/><!--pgsql-->
  <port protocol="tcp" port="4111"/>
  <port protocol="tcp" port="4113"/>
  <port protocol="tcp" port="4115"/>
  <port protocol="tcp" port="4116"/>
  <port protocol="tcp" port="4118"/><!--deviceservice-->
  <port protocol="tcp" port="4119"/><!--configservice-->
  <port protocol="tcp" port="4500"/>
  <port protocol="tcp" port="9999"/>
  <port protocol="tcp" port="8848"/><!--nacos-->
  <port protocol="tcp" port="8070"/><!--txlcn-->
  <port protocol="tcp" port="12006"/><!--auth-service-->
  <port protocol="tcp" port="18080"/><!--dbcloud-service-->
  <port protocol="tcp" port="5090"/><!--platform-service-->
</zone>

方式二 命令行操作

firewall-cmd --zone=public --add-port=3000/tcp --permanent # 开放 3000端口
firewall-cmd --zone=public --add-port=80-90/tcp --permanent # 开放 80 到 90间的多个端口

检查防火墙设置是否成功

firewall-cmd --list-ports  #查看防火墙开放的端口信息
4111/tcp 4113/tcp 4115/tcp 4116/tcp 4118/tcp 4500/tcp 5432/tcp 9999/tcp 8428/tcp 8430/tcp 8080/tcp 4119/tcp 8000/tcp 6000/tcp 15672/tcp 9998/tcp 4120/tcp 4117/tcp 9273/tcp 8070/tcp 4002/tcp


firewall-cmd --list-all  #查看防火墙所有信息
# 返回结果如下
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh dhcpv6-client
  ports: 4111/tcp 4113/tcp 4115/tcp 4116/tcp 4118/tcp 4500/tcp 5432/tcp 9999/tcp 8428/tcp 8430/tcp 8080/tcp 4119/tcp 8000/tcp 6000/tcp 15672/tcp 9998/tcp 4120/tcp 4117/tcp 9273/tcp 8070/tcp 4002/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

docker-compose 构建镜像服务

docker-compose up -d

docker 镜像操作

[root@edge db-script-bak]# docker images
REPOSITORY                                       TAG                 IMAGE ID            CREATED             SIZE
172.17.6.38/ibcloud/energy-efficiency-service    v0.0.5              89366ea27e4a        5 hours ago         211MB
172.17.6.38/enerecosys-cloud/main-web            v0.0.117            62b4d8dc0f2c        6 hours ago         161MB
[root@edge db-script-bak]# docker rmi  e0a   #镜像id 只需要id前几位就可以定位镜像
Untagged: 191.0.0.158/escloud/escloud-resource-service:v1.2.06
Deleted: sha256:e0a490aca313ad3a47f443ab9cd354e1549109f4cc88d4b8a3f1ee8215a18bae
Deleted: sha256:b1d6032d3a8081c7feb6ce3b4aa4a71d06365eedbf61b9b6cc665c98b0d5b103

docker 容器操作

[root@edge db-script-bak]# docker ps
CONTAINER ID        IMAGE                                                        COMMAND                  CREATED             STATUS              PORTS                                                                                                      NAMES
54a0c0ae483c        172.17.6.38/ibcloud/energy-efficiency-service:v0.0.5         "sh -c 'java $JAVA_O…"   4 hours ago 
[root@edge docker]# docker ps -a #查看所有容器
[root@edge docker]# docker-compose ps  # docker-compose 构建的容器
            Name                          Command               State                                         Ports                                       
----------------------------------------------------------------------------------------------------------------------------------------------------------
battery-service                sh -c java $JAVA_OPTS -Dja ...   Up      0.0.0.0:8042->8042/tcp  
[root@edge docker]# docker logs -f 54a0c0ae4 --tail 200  #查看容器日志
[root@edge docker]# docker inspect 54a0c0ae4             #查看容器运行环境变量
[root@edge docker]# docker exec -it 54a0c0ae4 sh          #进入容器内部,输入 exit 退出
[root@edge docker]# docker start 54a0c0ae4            #启动容器
[root@edge docker]# docker stop 54a0c0ae4             #停止容器
[root@edge docker]# docker restart 54a0c0ae4          #重启容器

子码掩网

子网掩码是用来判断任意两台计算机的ip地址是否属于同一子网络的根据。最为简单的理解就是两台计算机各自的ip地址与子网掩码进行and运算后,得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。

docker net 网络

docker network ls  //查看docker 网络列表
docker network rm docker_nacos-net //删除docker网络,只有这个指令 能将docker创建的网卡彻底删除
docker network inspect docker_nacos-net //查看docker-net 设置

登录报时间戳差别太大

测试服务器没有外网,可能导致时间戳不准确,可以联网更新时间,也可以手动设置。注意 时间戳与时区无关,所有时区都拥有相同的时间戳

timedatectl #查看服务器时间信息

[root@yzn ~]# timedatectl
      Local time: 二 2022-03-08 17:57:02 PST  # 本地时间
  Universal time: 三 2022-03-09 01:57:02 UTC  #
        RTC time: 三 2022-03-09 01:57:02      #硬件时间

timedatectl set-time “2022-03-08 17:53:15”

hwclock --systohc # 将硬件时间和本地时间设置为同一个值

查看容器内部的时间

[root@yzn ~]# docker exec -it 93c43 sh
/ # date
Wed Mar  9 02:06:55 UTC 2022
#UTC时间 是国际标准时间,比北京时间慢8小时
[root@yzn ~]# docker exec -it 89fdd sh
# date
Tue Mar  8 18:07:51 PST 2022
#PST时间 是太平洋标准时间,

#CST时间

切换用户

部署踩坑

docker ip冲突解决

docker启动时桥接网络,会占用172.17.x.x等ip,导致部分内网服务ip ping不通,此时要修改 docker配置文件daemon.json

docker 自身占 docker0网卡
docker-compose文件里面的 nacos-net 配置会产生一个 br-xxx的网卡

ifconfig

br-5ffc8302bb77: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:98:82:9a:91  txqueuelen 0  (Ethernet)
        RX packets 37661423  bytes 3665781535 (3.4 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9842642  bytes 1809093631 (1.6 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.100.1  netmask 255.255.255.0  broadcast 192.168.100.255
        ether 02:42:fe:88:2f:99  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker 启动配置文件 daemon.json

如果要修改两网卡对应的ip
daemon.json 配置

{
    "registry-mirrors":[
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ],
    "insecure-registries":[
        "172.16.6.243:5000",
        "191.0.0.158",
        "172.17.6.38"
    ],//私库ip
    "bip":"192.168.100.1/24",  # docker0
    "default-address-pools":[  # docker-nacos-net
        {
            "base":"172.19.0.1/16",
            "size":24
        }
    ]
}

bip 修改 docker0 ip
default-address-pools 定义br-***网卡对应的可用ip池

修改daemon.json重启之后,docker0的ip会立刻改变,但是br-*** 的ip不会变,且通过停用和删除网卡也不生效

此时需要
docker network ls // 查看docker网络列表
NETWORK ID NAME DRIVER SCOPE
633fd38f53f4 bridge bridge local
d3f5bc92e248 docker_nacos-net bridge local
eb221043e2f7 host host local
e916b12924b8 none null local

docker network inspect bridge // bridge 或者 633fd38f53f4 都可以,可以通过IPAM的config确实是谁占用了ip

“IPAM”: {
“Driver”: “default”,
“Options”: null,
“Config”: [
{
“Subnet”: “192.168.100.1/24”,
“Gateway”: “192.168.100.1”
}
]
},

docker network rm docker_nacos-net // name h和 networkid 都可以,删除docker已经建立的ip

重启docker,default-address-pools 的配置才会生效,docker新建 br-*** 网卡,ip占用解除

docker-compose up -d 报permission denied 错误

docker-compose up -d

ERROR: for docker_service-monitor_1  Cannot start service service-monitor: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused \"write /proc/self/attr/keycreate: permission denied\"": unknown
Creating docker_basic-web-h5_1      ... error
ERROR: for node-exporter  Cannot start service node-exporter: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused \"write /proc/self/attr/keycreate: permission denied\"": unknown
Creating redis-exporter             ... error
Creating mysql                      ... error
eycreate: permission denied\"": unknown

修改 /etc/selinux 下config文件SELINUX=disabled 重启服务器

docker-compose容器的配置优先级问题

  nacos:
    image: nacos/nacos-server:1.4.1
    container_name: nacos-server
    privileged: true 
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9555:9555"
      - "7098:7098"
      - "7099:7099"
    depends_on:
      - mysql
    restart: always
    networks:
      nacos-net:
        aliases:
        - nacos
    env_file:
      # mysql数据库的连接配置
      - ./env/nacos-standlone-mysql.env
    environment:
      JVM_XMS: 256M
      JVM_XMX: 256M
      JVM_XMN: 90M    
  cloud-auth-service:
    image: 172.17.6.38/matterhorn/cloud-auth-service-yzn:v2.0.68
    container_name: cloud-auth-service
    restart: always
    ports:
      - 12006:12004
    depends_on:
      - nacos
      - sentinel
      - rabbitmq
    networks:
      nacos-net:
       # ipv4_address: 172.18.0.201
        aliases:
        - auth1
    environment:
      TZ: Asia/Shanghai
      SERVER_PORT: 12004
      JAVA_OPTS: -Xmx256m -Xms256m
      nacos_server-addr: nacos:8848
      nacos_namespace: prod
      SPRING_CLOUD_NACOS_CONFIG_ENABLED: 'true'
      SPRING_CLOUD_NACOS_DISCOVERY_ENABLED: 'true'
      SPRING_REDIS_HOST: redis
      SPRING_REDIS_PORT: 6379
      SPRING_REDIS_PASSWORD: ${RedisPwd}
      tx-lcn.client.enableTxlcn: 'true'
      tx-lcn.client.manager-address: 172.16.6.40:8070
  • cloud-auth-service服务依赖nacos,在auth节点 depends_on 配置nacos,dcoker-compose会先构建nacos镜像容器,再构建自身

  • docker-compose的environment节点,可以覆盖项目application.yml和 bootstrap.yml中的配置,但是会被项目依赖的nacos的相同配置覆盖,优先级是nacos > docker-compose environment > application.yml和 bootstrap.yml ,如果dockercompose修改配置不生效,考虑是不是被nacos配置。

  • nacos_server-addr: nacos:8848 , nacos的host是使用的 nacos-net 注册服务为我们分配的,可以通过 docker network inspect docker_nacos-net 查看这些nacos对应点ip

         "Containers": {
            "13c8234722d024b1d522456ed46f3fffba8c3f79fd6abf447c3a7672c9b27f94": {
                "Name": "mysql",
                "EndpointID": "ead1950951b547b3b6c8e6f0b67c953eddcecbc60acc2a45ab7541627f7324a7",
                "MacAddress": "02:42:ac:13:00:0d",
                "IPv4Address": "172.19.0.13/16",
                "IPv6Address": ""
            },
            "1575272562d54cbb53ca903b4b3d43d95153f439184153ebf5ef661b83d7e1bf": {
                "Name": "docker_notice-service_1",
                "EndpointID": "886e4f7ae9c1176005b86bd8a291174a21f3e77d911a725386ecc7948ba0480e",
                "MacAddress": "02:42:ac:13:00:1c",
                "IPv4Address": "172.19.0.28/16",
                "IPv6Address": ""
            }
    

model-service-cloud连接未知数据源

model-service-cloud连接 127.0.0.1:5432 ,且修改docker-compose environment 数据源地址配置无效,model-service-cloud使用的dbcloud服务接口返回的数据源配置,取 db_datasource 表的默认数据源配置,要手动修改,再重启model-service-cloud

RabbitMQ启动失败,可执行权限

  #rabitmq
  rabbitmq:
    image: 191.0.0.158/base/rabbitmq:3.8.2-management
    networks:
      nacos-net:
        aliases:
        - rabbitmq
    restart: always
    ports:
    - 15673:15672
    - 5673:5672
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
    volumes:
      - /usr/share/zoneinfo/Asia:/usr/share/zoneinfo/Asia
      - ./config/rabbitmq/scripts/cluster_entrypoint.sh:/usr/local/bin/cluster_entrypoint.sh
      - ./config/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
    command:
      - /bin/sh
      - -c
      - |
         chmod +x /usr/local/bin/cluster_entrypoint.sh #给自定义脚本分配权限,否则报错
    entrypoint: "/usr/local/bin/cluster_entrypoint.sh" #通过自定义脚本来启动rabbitmq
    environment:
      TZ: Asia/Shanghai
    command:
      - /bin/sh
      - -c
      - |
         chmod +x /usr/local/bin/cluster_entrypoint.sh #给自定义脚本分配权限,否则报错

rabbitMQ要给cluster_entrypoint.sh可执行权限

    volumes:
      - /usr/share/zoneinfo/Asia:/usr/share/zoneinfo/Asia
      - ./config/rabbitmq/scripts/cluster_entrypoint.sh:/usr/local/bin/cluster_entrypoint.sh
      - ./config/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf

volumes 是docker的文件映射配置, : 号的左边 为服务器的文件地址 : 号右边为容器的文件地址 ,容器实际上要执行外部的sh文件,故./config/rabbitmq/scripts/cluster_entrypoint.sh要配置未可执行文件

服务nacos配置中心配置不生效

      nacos_server-addr: nacos:8848
      nacos_namespace: nacos

配置nacos地址,但是启动配置获取不到。nacos SERVER-ADDR 无法连接时 项目会启动不了,nacos_namespace 配置错误时,或者 namespace在nacos中不存在时,会优先使用本地的配置,不配置namespace时 默认使用pulic可能不会报错,此时要确认namespace在nacos中是否存在,如果存在 看看是不是配置错了 namespace 对应 nacos 命名空间 - 命名空间ID

nacos配置可以直接在挂你后台导入和导出 搬运配置

docker服务间互相访问不通

看上文 防火墙墙对外暴露端口 的配置

txlcn 存在不健康的集群

txlcn启动之后 权限服务出现如下报文 TM cluster’s size: 2 认为txlcn 有集群,多了 172.16.6.40:8070 服务,txlcn存在自动集群,172.16.6.40是因为我配置错误产生的,此服务是无法正常运行的,但是 重启docker还是存在此异常的服务

将 txlcn依赖redis中 tm.instances的缓存清除,才集群消失

txlcn 报不存在的groupId,接口访问直接报此错误

Caused by: com.codingapi.txlcn.common.exception.TransactionException: com.codingapi.txlcn.common.exception.LcnBusinessException: com.codingapi.txlcn.common.exception.TxManagerException: attempts to join the non-existent transaction group

redis 缓存了一个不存在的groupid,清除 tm.machine.id.gen 缓存

docker网络通信

搬运配置

docker服务间互相访问不通

看上文 防火墙墙对外暴露端口 的配置

txlcn 存在不健康的集群

txlcn启动之后 权限服务出现如下报文 TM cluster’s size: 2 认为txlcn 有集群,多了 172.16.6.40:8070 服务,txlcn存在自动集群,172.16.6.40是因为我配置错误产生的,此服务是无法正常运行的,但是 重启docker还是存在此异常的服务

将 txlcn依赖redis中 tm.instances的缓存清除,才集群消失

txlcn 报不存在的groupId,接口访问直接报此错误

Caused by: com.codingapi.txlcn.common.exception.TransactionException: com.codingapi.txlcn.common.exception.LcnBusinessException: com.codingapi.txlcn.common.exception.TxManagerException: attempts to join the non-existent transaction group

redis 缓存了一个不存在的groupid,清除 tm.machine.id.gen 缓存

docker网络通信

dockerfile 构建镜像

平台服务镜像的dockerfile,docker build -t 191.0.0.158/escloud/escloud-resource-service:v2.0.02 .

build指令会在命令执行目录,按照 dockerfile 去构建一个docker镜像;

如下的dockerfile可以简单理解为将使用当前目录下的 ./target/escloud-resource-service-2.0.06.war 构建一个191.0.0.158/escloud/escloud-resource-service:v2.0.06 的镜像。191.0.0.158是镜像私库地址,/escloud 是私库中镜像分组(类似与文件夹分类镜像),escloud-resource-service 镜像名称,v2.0.06 镜像版本

# FROM 指定基础镜像,注意 第一条指令一定是 FROM, 拉取一个已经有java运行环境的镜像作为基础镜像
# FROM <imageName>:<imageVersion>,imageVersion可为空,为空时默认拉取最新版本的镜像
FROM 191.0.0.158/base/openjdk-with-fontconfig:8-jdk-dbg-alpine
#VOLUME 用于指定持久化目录,在容器中创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。及时容器被删除也会保留在宿主机上
VOLUME /tmp
#ARG 定义参数,此处时将Maven 配置文件对应参数拼接到war包名称中,用maven插件打包可以这么弄,不适用maven插件则服务解析会报错
ARG artifactId
ARG VERSION
# ADD (复制并解压文件,支持自动解压缩)将系统目录的文件 复制到 容器目录,将打包的war文件复制到镜像中
ADD ./target/${artifactId}-${VERSION}.war /${artifactId}.jar  # maven打包时,会定义成如下的效果。不使用maven则写死不要用${}取变量
# ADD http://example.com/foobar /data      #也可以访问网络资源,类似wget,但来自远程URL 的资源不会被解压缩
#ADD ./target/escloud-resource-service-2.0.06.war /escloud-resource-service.jar
#ENV 设置环境变量
ENV JAVA_OPTS=""
ENV JAR_FILE_NAME= "escloud-resource-service"
#ENTRYPOINT 设置容器的入口程序,功能类似于CMD,配置容器启动后执行的命令及参数

#Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个生效 
#Djava.security.egd  这个是用来防止 springboot 项目 tomcat 启动慢的问题(具体可搜索:随机数数与熵池策略)
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 /escloud-resource-service.jar" ]
# CMD (用来指定启动容器时默认执行的一个命令,build镜像时不会执行,容器启动时会执行) 执行 java -jar ***.jar的指令,运行jar。springboot jar包自带了Tomcat,此命令就将web项目运行在 tomcat容器中
# 只能有一条 CMD 命令。如指定了多条,只有最后一条被执行 
# 启动容器时用 docker run xxx 指定运行的命令,则会覆盖 CMD 指定的命令 
CMD java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /escloud-resource-service.jar

docker-compose 管理容器

镜像image 和 容器container,镜像是一个静态概念,可以理解为我们的编译后的代码文件包,镜像时无法运行和启动的,并不是一个能够执行的程序。

镜像 -》 容器,是将镜像变为可以执行的程序,我们最终启动的是容器,容器才是可以启动和关停的程序。

docker 镜像 -> 容器 的指令如下

#指令一
docker create imageName:imageVersion # 只从镜像构建为容器,
docker start -a 容器id ##启动容器, -a == attach,不使用-a则没有容器运行日志显示

#指令二
docker run imageName:imageVersion  # 镜像构建为容器并启动的指令

docker-compose是一个容器管理的工具,他能解决很多痛点

1.项目镜像很多,一个一个上传费时,容易少传或者版本不对,服务器镜像数量和版本也管理复杂。docker-compose文件记录的项目使用的镜像和版本,很直观的看到项目依赖的镜像,构建容器时,docker-compose也能自动从私库拉取对应版本的镜像;

2.镜像到容器,需要docker run,docker-compose能直接将镜像构建成容器,并按用户自定义的顺序启动各个容器;

3.废弃容器的删除,docker ps -a 会看到很多已经不在运行的容器,随着服务器镜像版本迭代,会有很多不再运行的容器,docker-compose会删除未运行的容器

4.项目环境变量配置,结合docker-compose中的environment,我们可以很轻易的覆盖项目配置,而不需为了修改配置,重新构建镜像。当docker-compose中修改了对应容器的配置 或者镜像版本时,docker-compose也能监测到修改,重启时只重新构建有修改的容器。

平台服务镜像的docke-compose配置

  escloud-resource-service:
    image: 172.17.6.38/escloud/escloud-resource-service:v2.0.06
    container_name: escloud-resource-service
    restart: always
    ports:
      - 5090:5090
    #depends_on:
    #  - nacos
    #  - rabbitmq
    #  - txlcn
    #links:
    #- redis
    networks:
      nacos-net:
        aliases:
        - resource1
    environment:
      TZ: America/Los_Angeles
      SERVER_PORT: 5090
      JAVA_OPTS: -Xmx256m -Xms256m
      nacos_server-addr: 172.16.6.40:8848
      nacos_namespace: prod
      SPRING_CLOUD_NACOS_CONFIG_ENABLED: 'true'
      SPRING_CLOUD_NACOS_DISCOVERY_ENABLED: 'true'
      spring_cloud_nacos_discovery_register-enabled: 'true'
      server_max-http-form-post-size: -1
      server_max-http-header-size: 1024000
      CET_FILE-UPLOAD_PATH: /etc/CET/upload
      # Redis配置
      SPRING_REDIS_HOST: 172.16.6.40
      SPRING_REDIS_PORT: 6379
      SPRING_REDIS_PASSWORD: ${RedisPwd}
      SPRING_REDIS_DATABASE: 4
      SPRING_PROFILES_ACTIVE: 40e
      #SPRING_CLOUD_NACOS_DISCOVERY_IP: 172.16.6.119
      # 是否开启 RABBITMQ
      SPRING_RABBITMQ_ENABLED: 'true'
      # 连接配置项
      SPRING_RABBITMQ_ADDRESSES: 172.16.6.40:5673
      SPRING_RABBITMQ_USERNAME: 'admin'
      SPRING_RABBITMQ_PASSWORD: 'Q2wdgT8k'
      SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: 172.16.6.40:8848 #${DataBaseUrl}:8848
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: 172.16.6.40:8848 #${DataBaseUrl}:8848
      cet_base-service_model-service_url: 172.16.6.40:8086
      cet_base-service_cloud-auth-service_url: ''
      cet_base-service_db-cloud-service_url: 172.16.6.40:18080
      cet_base-service_escloud-service_url: 172.16.6.40:8041
      cet_base-service_notice-service_url: 172.16.6.181:15070
      cet_base-service_capacity-service_url: 172.16.6.40:8042
      cet_base-service_model-management-service_url: 172.16.6.40:8090
      cet_base-service_device-data-service_url: 172.16.6.40:4118
      cet_base-service_pec-node-service_url: 172.16.6.40:4119
      tx-lcn.client.enableTxlcn: 'true'
      tx-lcn.client.manager-address: 172.16.6.40:8070
      scheduled_enable: 'false'
      CET_FILE-MODEL-META_PATH: /home/cet/model/
      CET_file-model-upload_PATH: /home/cet/model/upload/
      SPRING_APPLICATION_NAME: escloud-resource-service-tttare
    volumes:
      - /etc/CET/upload/:/etc/CET/upload/
      - /home/cet/model/upload/:/home/cet/model/upload/
      - /home/cet/model/:/home/cet/model/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值