赞
踩
在安装好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: 数据库密码
此脚本会对参数的数据库进行库和表的建立(注意:会覆盖以往的数据库数据),建立如下数据库
云综能数据库环境建立如上
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路径)
在安装好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文件中上传一些自定义配置
脚本首先进行 文件夹创建和文件复制
创建服务所需的目录
/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配置文件)
[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
[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
sudo systemctl daemon-reload #daemon.json修改之后,加载配置文件
sudo systemctl start docker #启动docker
sudo systemctl enable docker #开机自启docker
sudo systemctl restart 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 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 up -d
[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
[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 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启动时桥接网络,会占用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
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 重启服务器
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连接 127.0.0.1:5432 ,且修改docker-compose environment 数据源地址配置无效,model-service-cloud使用的dbcloud服务接口返回的数据源配置,取 db_datasource 表的默认数据源配置,要手动修改,再重启model-service-cloud
#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_server-addr: nacos:8848
nacos_namespace: nacos
配置nacos地址,但是启动配置获取不到。nacos SERVER-ADDR 无法连接时 项目会启动不了,nacos_namespace 配置错误时,或者 namespace在nacos中不存在时,会优先使用本地的配置,不配置namespace时 默认使用pulic可能不会报错,此时要确认namespace在nacos中是否存在,如果存在 看看是不是配置错了 namespace 对应 nacos 命名空间 - 命名空间ID
nacos配置可以直接在挂你后台导入和导出 搬运配置
看上文 防火墙墙对外暴露端口 的配置
txlcn启动之后 权限服务出现如下报文 TM cluster’s size: 2 认为txlcn 有集群,多了 172.16.6.40:8070 服务,txlcn存在自动集群,172.16.6.40是因为我配置错误产生的,此服务是无法正常运行的,但是 重启docker还是存在此异常的服务
将 txlcn依赖redis中 tm.instances的缓存清除,才集群消失
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 缓存
搬运配置
看上文 防火墙墙对外暴露端口 的配置
txlcn启动之后 权限服务出现如下报文 TM cluster’s size: 2 认为txlcn 有集群,多了 172.16.6.40:8070 服务,txlcn存在自动集群,172.16.6.40是因为我配置错误产生的,此服务是无法正常运行的,但是 重启docker还是存在此异常的服务
将 txlcn依赖redis中 tm.instances的缓存清除,才集群消失
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 缓存
平台服务镜像的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
镜像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/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。