分类: 技术

  • Podman 快速入门

    今天在某云上新购一台云服务器,发现已经有了 CentOS8.2 官方镜像可选,出于对新鲜事物的好奇,我决定开始采用 CentOS8.2,即使我还没有为它的新特性做好准备。

    我的应用主要以单机版容器为主。因此,服务器启动的第一件事就是安装 Docker。不幸的事情发生了,我的 Docker 应用没有像 CentOS7 那样如期 running 起来。

    花了大量的时间排查,才找到一丝线索:CentOS8 以上的版本默认已经安装一个等同于 Docker的容器解决方案,这个就是Podman。

    两个容器解决在一起工作,相互打架的事情必然会发生。出于长治久安的考量,今天整个下午我展开了对 Podman 的研究,得到了如下的结论,希望这些结论能够让大家少走一点弯路。

    Podman 与 Docker 哪个好?

    对于这种问题,我想如何没有深刻的实践是一定无法得出结论的。就我个人来说,首先,刚开始学习的时候,我也尝试先从专业博客和论坛中寻找答案。

    我发现 Podman 中文相关的资料非常少,同理,评价它的博客就更少了,倒是有一篇非常吸人眼球的文章,例如:Docker 大势已去,Podman 万岁。但认真阅读它,却没有特别有价值的对比,完全是一种主观的表达。因此,我们不要被他人的文章所引导(误导)而形成一种偏见。

    Podman 是 RedHat 为了抢占容器标准的一种战略产品,这就是我的看法。

    Podman 兼容 Docker吗?

    大部分是兼容的,例如:

    1. 可以直接使用 Docker 镜像
    2. 命令非常相似

    如果你非常怀念 docker命令,甚至可以给 Podman 设置别名为 docker:

    echo "alias docker=podman" >> .bashrc
    source .bashrc
    

    Podman 镜像

    默认镜像库

    文件 /etc/containers/registries.conf 是设置镜像地址配置文件,默认会搜索 [‘registry.access.redhat.com’, ‘registry.redhat.io’, ‘docker.io’, ‘quay.io’]
    等几个镜像库。

    不过,这几个镜像库下载速度非常慢,可以说是基本无法顺利的将镜像拉下来。

    所以,需要修改修改镜像库配置文件,也就是大家说的镜像加速方案。

    镜像加速

    只需2个步骤实现镜像加速:

    1. 改名并备份好文件:/etc/containers/registries.conf
    2. 再新建一个空的 registries.conf 文件,插入如下内容unqualified-search-registries = ["docker.io"] [[registry]] prefix = "docker.io" location = "******.mirror.aliyuncs.com"
    3. 修改 location
    4. 保存

    Podman Compose

    Podman Compose 等同于 Docker Compose,是用于固化容器运行参数以及协调容器之间的关系的一种较为简单的方案。

    使用如下的命令,安装 Podman Compose,并根据自己的喜好设置别名(如果仍然忘不了 docker)

    pip3 install podman-compose
    echo "alias docker-compose=podman-compose" >> .bashrc
    source .bashrc
    

    Podman 外网

    如果以普通用户运行容器,此容器默认无法被外网访问,为了避免不必要的麻烦,建议以root用户创建并运行容器。

    另外,run 容器的时候,请勿使用 -p 0.0.0.0:9090:80 这种端口映射方式,它会导致容器无法被外网访问。如果采用正常的端口映射方式 -p :9090:80,就没有任何问题。

    #无法被外网访问
    sudo podman run --name phpmyadmin  --restart=always  -itd  -p 0.0.0.0:9090:80  -e PMA_HOST=10.88.0.1  phpmyadmin/phpmyadmin
    
    #可以被外网访问
    sudo podman run --name phpmyadmin  --restart=always  -itd  -p 9090:80  -e PMA_HOST=10.88.0.1  phpmyadmin/phpmyadmin
    

    标签

  • 英文1-12月

    1、Jan. January 一月;

    2、Feb. February 二月;

    3、Mar. March 三月;

    4、Apr. April 四月;

    5、May无缩写 五月;

    6、Jun. June 六月;

    7、Jul. July 七月;

    8、Aug. August 八月;

    9、Sep. September九月;

    10、Oct. October 十月;

    11、Nov. November 十一月;

    12、Dec. December 十二月。

  • linux git版本更新

    安装 centos7 WANDisco 仓库

    yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm

    2,安装 Git
    yum -y install git
    3,版本验证
    git version
    centos7 安装快捷复制
    yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm
    yum -y install git
    git version

    yum install nss

  • git diff 换行符问题

    这是由于换行符在不同的操作系统上定义的区别造成的。

    Windows用CR LF来定义换行,Linux用LF。

    CR全称是Carriage Return ,或者表示为\r, 意思是回车。

    LF全称是Line Feed,它才是真正意义上的换行表示符。

    如果用git diff的时候看到^M字符,就说明两个文件在换行符上有所差别。
    ————————————————
    版权声明:本文为CSDN博主「1_2_3ad」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/nanyilou_xiaoye/article/details/79075092

    git config --global core.whitespace cr-at-eol
  • 关于zip压缩包日志查询、统计、导出

    gzip -dc   catalina20190416.out.tar.gz | grep –binary-files=text -1 ‘下单验价’ –color

    使用zgrep命令可以在压缩文件中调用grep按正则表达式来搜索

    语法格式

    zgrep [参数] [模式] [文件名]

    常用参数:

    -x 被排除在处理归档成员的可选列表中

    参考实例

    在压缩文件/a.zip中搜索字符a:

    [root@linux265 ~]# zgrep a /root/a.zip
    

    在服务器压缩的日志文件中查找关键词GET /blog

    zgrep 'GET /blog' access_log1.gz access_log2.gz
  • idea terminal 中文乱码

    解决方案:

    1.首先找到IDEA在本地的安装路径,找到idea.exe.vmoptions文件和idea64.exe.vmoptions文件,在其最后一行添加

    -Dfile.encoding=UTF-8

    export LANG=”zh_CN.UTF-8″
    export LC_ALL=”zh_CN.UTF-8″

  • git导出代码的方法~archive

    git archieve

    可以用于将库中代码打包。

    1. 基本用法:

    git archive --format tar.gz --output "./output.tar.gz" master
    

    说明:

    • 将master分支打包为output.tar.gz
    • –format指明打包格式,若不指明此项,则根据–output中的文件名推断文件格式。所以你也可以将上述命令简化为:

    git archive --output "./output.tar.gz" master
    

    可以使用-l参数获得支持的文件格式列表。

    [@sjs_73_171 gittest]$ git archive -l
    tar
    tgz
    tar.gz
    zip
    
    • –output指明输出包名

    2. 打包不同的分支或commit

    如果想打包不同分支,只要使用不同分支名即可。比如我有一个分支名为“testbr”,可以用如下命令将其打包。

    git archive --format tar.gz --output "./output.tar.gz" testbr
    

    如果要打包某个commit,只要先使用git log找到相应的commit id, 再使用该commit id打包即可。比如:

    git archive --format tar.gz --output "./output.tar.gz" 5ca16ac0d603603
    

    3. 打包某个目录

    如果想打包master下的mydir mydir2目录,可以用下面命令

    git archive --format tar.gz --output "./output.tar.gz" master mydir mydir2  
    

    4. 注意

    打包建议在代码库的根目录下进行,不然会碰到各种问题。比如,如果在master分支的mydir目录下执行如下命令:

    git archive --output "./output.tar.gz" master
    

    就只会将mydir目录下的内容打包。

    作者:跑马溜溜的球
    链接:https://www.jianshu.com/p/98fa58073554
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 解决 VSCode 每次 git pull/push 时都需要输入账号和密码的问题

    在提交项目代码或者拉取代码的时候,如果每次git都要输入用户名密码;
    解决方法: 在 VSCode 的终端输入 git config –global credential.helper store 命令
    在弹框中输入账号和密码,此时输入一次,以后再git push /pull 的时候就不用在输账号和密码了。

  • dubbo 设置注册到注册中心的IP地址为公网IP

    场景
    某些情况下(例如公共测试环境 xx云上ECS 部署了dubbo提供者),
    我们需要将dubbo提供者应用 注册到注册中心的地址为公网ip地址。

    这样方便公司内网或者其他云上应用调用该dubbo提供者的接口服务。

    测试
    dubbo 版本 2.7.8

    查看 dubbo 官方文档,一开始以为 修改属性 dubbo.protocol.host

    # 服务提供者协议配置。对应的配置类: org.apache.dubbo.config.ProtocolConfig。
    # 同时,如果需要支持多协议,可以声明多个 标签,并在 中通过 protocol 属性指定使用的协议。
    protocol:
    name: dubbo
    port: 20207
    host: 8.17.29.89
    1
    2
    3
    4
    5
    6
    上面的 8.17.29.89 是 xx云 ECS 绑定的 弹性公网ip , 然而启动报错:

    org.apache.dubbo.rpc.RpcException: Fail to start server(url: dubbo://8.17.29.89:20207/com.middol.zentao.rpc.jar.ZenTaoAggregationService?anyhost=false&application=zentao-rpc-api&bind.ip=192.168.6.51&bind.port=20207&channel.readonly.sent=true&codec=dubbo&deprecated=false&document=%E7%A6%85%E9%81%93rpc%E6%8E%A5%E5%8F%A3&dubbo=2.0.2&dynamic=true&generic=false&heartbeat=60000&interface=com.middol.zentao.rpc.jar.ZenTaoAggregationService&logger=slf4j&metadata-type=remote&methods=taskInfoList,getById,getUser,bugInfoList,getZenTaoEmployeesLogs,getProductStatistics,getPersonStatistics&pid=21676&qos.accept.foreign.ip=false&qos.enable=true&qos.port=33307&release=2.7.8&revision=1.0-SNAPSHOT&side=provider&timestamp=1627035267274&version=1.0) Failed to bind NettyServer on /192.168.6.51:20207, cause: Cannot assign requested address: bind
    at org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol.createServer(DubboProtocol.java:348) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol.openServer(DubboProtocol.java:320) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol.export(DubboProtocol.java:303) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:64) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:155) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.qos.protocol.QosProtocolWrapper.export(QosProtocolWrapper.java:66) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.registry.integration.RegistryProtocol.lambda$doLocalExport$2(RegistryProtocol.java:255) ~[dubbo-2.7.8.jar:2.7.8]
    at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) ~[na:1.8.0_151]
    at org.apache.dubbo.registry.integration.RegistryProtocol.doLocalExport(RegistryProtocol.java:253) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.registry.integration.RegistryProtocol.export(RegistryProtocol.java:205) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:62) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:153) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.qos.protocol.QosProtocolWrapper.export(QosProtocolWrapper.java:64) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.config.ServiceConfig.doExportUrlsFor1Protocol(ServiceConfig.java:492) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.config.ServiceConfig.doExportUrls(ServiceConfig.java:325) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:300) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.config.ServiceConfig.export(ServiceConfig.java:206) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.config.bootstrap.DubboBootstrap.lambda$exportServices$15(DubboBootstrap.java:1103) ~[dubbo-2.7.8.jar:2.7.8]
    at java.util.HashMap$Values.forEach(HashMap.java:981) ~[na:1.8.0_151]
    at org.apache.dubbo.config.bootstrap.DubboBootstrap.exportServices(DubboBootstrap.java:1090) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.config.bootstrap.DubboBootstrap.start(DubboBootstrap.java:901) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.config.spring.context.DubboBootstrapApplicationListener.onContextRefreshedEvent(DubboBootstrapApplicationListener.java:59) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.config.spring.context.DubboBootstrapApplicationListener.onApplicationContextEvent(DubboBootstrapApplicationListener.java:52) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.config.spring.context.OneTimeExecutionApplicationContextEventListener.onApplicationEvent(OneTimeExecutionApplicationContextEventListener.java:40) ~[dubbo-2.7.8.jar:2.7.8]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404) ~[spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361) ~[spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:898) ~[spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:554) ~[spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.8.RELEASE.jar:2.3.8.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) [spring-boot-2.3.8.RELEASE.jar:2.3.8.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) [spring-boot-2.3.8.RELEASE.jar:2.3.8.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:405) [spring-boot-2.3.8.RELEASE.jar:2.3.8.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.3.8.RELEASE.jar:2.3.8.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.8.RELEASE.jar:2.3.8.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.8.RELEASE.jar:2.3.8.RELEASE]
    at com.middol.zentao.rpc.Application.main(Application.java:37) [classes/:na]
    Caused by: org.apache.dubbo.remoting.RemotingException: Failed to bind NettyServer on /192.168.6.51:20207, cause: Cannot assign requested address: bind
    at org.apache.dubbo.remoting.transport.AbstractServer.(AbstractServer.java:77) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.remoting.transport.netty4.NettyServer.(NettyServer.java:77) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.remoting.transport.netty4.NettyTransporter.bind(NettyTransporter.java:35) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.remoting.Transporter$Adaptive.bind(Transporter$Adaptive.java) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.remoting.Transporters.bind(Transporters.java:56) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.remoting.exchange.support.header.HeaderExchanger.bind(HeaderExchanger.java:44) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.remoting.exchange.Exchangers.bind(Exchangers.java:70) ~[dubbo-2.7.8.jar:2.7.8]
    at org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol.createServer(DubboProtocol.java:346) ~[dubbo-2.7.8.jar:2.7.8]
    … 40 common frames omitted
    Caused by: java.net.BindException: Cannot assign requested address: bind
    at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_151]

    查看官方文档,debug 源码,知道 host的含义:

    在 Dubbo 中, Provider 启动时主要做两个事情,
    一是启动 server
    二是向注册中心注册服务。
    启动 server 时需要绑定 socket,
    向注册中心注册服务时也需要发送 socket 唯一标识服务地址

    报错无法启动 server Cannot assign requested address: bind, 其实是socket无法启动,socket端口外网无法连接, 理由是 如果服务端套接字绑定在它上面,你的客户端程序就只能在本机访问。

    这里面 暂不讨论源码,总之配置文件中 (dubbo.protocol 或 dubbo.provider 的 host)的host属性,如果要配置 必须配置本机的ip (内网ip 或者 127.0.0.1 或者 不配dubbo自己获取)

    解决
    网上 或者 文档中有几个方法,修改hosts之类的, 我个人解决方法推荐:

    设置 java 系统参数( -Dxxx=value) -DDUBBO_IP_TO_REGISTRY=“8.17.29.89”
    如果是 springboot 可以这样:

    java -jar myDubboRpc-api.jar -DDUBBO_IP_TO_REGISTRY=”8.17.29.89″
    1
    当然 也可以事先 将 DUBBO_IP_TO_REGISTRY 这个参数设置到系统环境变量里面。

    如果是docker 方式,请参考 : https://github.com/apache/dubbo-samples/tree/master/dubbo-samples-docker

    其实就是docker 启动时候指定环境变量 -e DUBBO_IP_TO_REGISTRY = “8.17.29.89”
    ————————————————
    版权声明:本文为CSDN博主「小时候的阳光」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/gzt19881123/article/details/119042064

  • windows phpstorm console 不能正确显示中文问题

    2、在 win 中添加系统环境变量
    LESSCHARSET utf-8

    在这里插入图片描述

    设置完毕之后, 重启 phpstorm 就能正确显示中文了。