在物理机上,
一、查看容器中文件的挂载路径
cd /data/docker-compose/
能看到docker-compose.yml
,
(1)查看外挂信息
op-points-manager-new_ip:
image: harbor.xxx.xx/xxx/op-points-manager-new:v1.0
container_name: op-points-manager-new_ip
privileged: true
restart: always
cpus: '4'
mem_limit: 4096M
volumes:
- /data/app/config/op-points-manager-new/logback.xml:/data/app/op-points-manager-new/logback.xml
- /data/app/config/op-points-manager-new/startup.sh:/data/app/op-points-manager-new/startup.sh
- /data/logs/op-points-manager-new/logs/:/data/app/op-points-manager-new/logs/
容器名:
container_name: op-points-manager-new_ip
可看到日志和配置文件已外挂,修改物理机上配置即可生效。
日志:
docker里的/data/app/op-points-manager-new/logs/路径,映射物理机/data/logs/op-points-manager-new/logs/
。
配置文件:
docker里的/data/app/op-points-manager-new/startup.sh映射物理机/data/app/config/op-points-manager-new/startup.sh
(2)追加外挂信息
可以看到外挂文件中,少外挂了application-pro.yaml这个配置文件,
a)在docker-compose.yml
中添加外挂信息:
- /data/app/config/op-points-manager-new/application-pro.yaml:/data/app/op-points-manager-new/application-pro.yaml
b)在若依中添加外挂信息:
http://10.10.124.11:8098/index
另,确认一下,是否需要外挂hosts文件。
如需可追加:
- /data/app/config/op-points-manager-new_ip/hosts:/etc/hosts
从阿波罗配置中心的op-points-manager-new项目中可以看到,鉴权地址是http://test.usersso.api.gitv.tv,docker容器 需要知道这个域名的映射ip,所以需从外挂配置中读取。
操作步骤:
(1)在添加外挂hosts前,启动docker容器,把容器中的原始hosts内容拷贝到物理机上,追加 自己的host。
(2)在docker-compose.yml
中外挂hosts文件。
(3)重启容器。
# docker 容器中的hosts文件 原始信息“
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.58.140.30 6469bcec8369
# 追加:
10.58.138.100 test.usersso.api.gitv.tv
c)重建容器并启动:
通过提前编写好的yml 文件在当前宿主机上(重新)创建容器,除此之外,除非容器服务已经运行,否则启动所有链接服务。
docker-compose -f /data/docker-compose/docker-compose.yml up -d op-points-manager-new_ip
二、修改配置
(1)修改项目的启动脚本
修改为 读取外挂目录中的配置。
vim /data/app/config/op-points-manager-new/startup.sh
需要把这两个配置加载启动命令后面
--spring.config.location=$FILE_PATH/application-prod.yml
--logging.config=$FILE_PATH/logback.xml"
如:
RUN_COMMAND="$JAVA_HOME8 $JAVA_OPTS -jar $FILE_PATH/*.jar
--spring.config.location=$FILE_PATH/application-prod.yml
--logging.config=$FILE_PATH/logback.xml"
--这种携参方式,配置参数需加在*.jar后面,否则参数无效,亲测如此。
a) java -jar参数携带方式
方式一
-DpropName=propValue的形式携带,要放在-jar参数前面,放在它后面好像取不到值。
java -DprocessType=1 -jar d.jar
System.getProperty(“propName”)用来取值。
方式二
参数直接跟在命令后面,多个参数之间用空格隔开
java -jar d.jar 2.txt processType=1
这种方式参数就是jar包里主启动类中main方法的args参数,按顺序来。
方式三
使用springboot的方式,–propName=propValue方式
java -jar d.jar --processType=2
可以使用spring的@value(“${propName}”)取值。
完整版startup.sh
:
#!/bin/bash
JAVA_HOME8=/usr/bin/java
JAVA_OPTS="-server -Xms4096m -Xmx4096m -Xmn1024M -Xss256k \
-XX:+UseParallelGC -XX:ParallelGCThreads=16 -XX:+UseParallelOldGC \
-XX:MaxDirectMemorySize=1024m"
FILE_PATH="$(dirname $(readlink -f $0))"
LOG_PATH="/dev/null"
RUN_COMMAND="$JAVA_HOME8 $JAVA_OPTS -jar $FILE_PATH/*.jar
--spring.config.location=$FILE_PATH/application-prod.yml
--logging.config=$FILE_PATH/logback.xml"
PID_FILE="$FILE_PATH/logs/server.pid"
pid=''
cd $FILE_PATH
start(){
$RUN_COMMAND
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
printf 'Usage: {start|stop} to start or stop server! \n'
exit 1
;;
esac
脚本说明:
dirname $0 获取当前脚本的相对路径。
readlink -f $0 找出符号链接所指向的位置,如果没有链接,就显示自己本身的绝对路径。
$(dirname $(readlink -f $0)) 获取当前脚本的绝对路径。
(2)把各种配置改为连接备点信息
如 数据库、redis、ES等。
确保连接的是正确的阿波罗地址。
(3)注意事项
docker部署的项目,放jar包的文件夹名字,需一律小写,不允许有大写,docker不认。
/data/app/$NAME/*.jar $NAME需全部小写。
如有大写,需修改文件夹名、logback.xml 及 startup.sh。
三、重启 容器
在/data/docker-compose/
目录下,执行:
docker-compose restart op-points-manager-new_10.58.185.58
会看到控制台打印出:
Restarting op-points-manager-new_10.58.185.58 … done
好!启动成功!
docker-compose restart op-points-manager-new_10.58.187.11
docker restart op-points-manager-new_10.58.185.58
(1)docker容器 三种启动方式的区别
要使用docker-compose命令,需进入docker-compose.yaml所在路径下执行命令。
1)docker-compose up -d
若是使用:
docker-compose down ;
docker-compose up -d ;
会加载docker-compose相关文件新变动内容(如docker-compose.yml文件)
2)docker-compose restart
docker-compose restart不会加载docker-compose相关文件新变动内容(如docker-compose.yml文件)
如果只是改动代码和配置文件等,docker-compose restart是没有问题的。
docker-compose restart使用的是docker-compose.yml里定义的别名。
3)docker restart
不会加载docker-compose.yml新变动内容。
docker restart是使用的是容器全名。
四、看日志
tail -200f /data/logs/op-points-manager-new/logs/op-points-manager/sdt.2022-03-18.log
从日志中,能看到异常,有些是连不上的。
五、申请开通网络
https://openport.xxxx.xx/my_deploy_new
源ip:写容器ip。
目标ip:要访问的ip。
用途写清,以便审批。
源ip和目标ip,两者需同属内网或公网。
内网访问内网,公网访问公网。
1、若目标ip是内网,可直接提出申请。
2、若目标ip是公网,则需找运维开通源ip的NAT后,让其提供出口IP。
内网的计算机以NAT(Network Address Translator)(网络地址转换)协议,通过一个公共的网关访问Internet。
(1)如需访问公网数据库,则需拿着出口IP向运维申请开通阿里云白名单。
(2)向DBA申请数据库权限。
六、再次验证
启动日志正常。
hosts中指定备点的nginx的ip,访问页面:
咦?!
七、nginx
docker ps | grep nginx
可以看到nginx是Restarting状态。接着来查找nginx启动失败的原因。
docker logs nginx-epg_*
从这里可以看到,配置中缺少东西。更新配置并重启。
nginx启动成功!
可以看到 某菜单域名是points-manager.xxxx.xx
找到docker nginx,外挂路径,修改配置:
cd /data/app/config/nginx-epg/conf/vhosts/
把 菜单域名指向容器ip:
upstream points-manager {
server 10.xx.xxx.58:10011;
server 10.xx.xxx.11:10011 backup;
}
server {
listen 80;
server_name points-manager.xxxx.xx;
access_log logs/points-manager.xxxx.xx.log xxxx;
error_log logs/points-manager.xxxx.xx.error.log error;
add_header Access-Control-Allow-Origin *;
default_type text/plain;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 800;
proxy_read_timeout 800;
proxy_send_timeout 800;
proxy_pass http://points-manager;
}
}
再次访问:
大功告成!