标签: Docker

  • 从docker hub镜像中拉取镜像

    最近换了Apple M4的MacBook,其他使用都还好,就是镜像拉群经常出问题,主要是docker hub的镜像有问题(忘记了旧电脑怎么配置的),要么就是报no matching manifest。

    Error response from daemon: no matching manifest for linux/arm64/v8 in the manifest list entries: no match for platform in manifest: not found

    查了下M4是ARMv9架构,具体是ARMv9.2-A,如果没有合适的镜像可以用linux/amd64试试。

    专门写了一个脚本来处理这个问题

    #!/bin/bash
    
    # Docker镜像仓库列表
    MIRRORS=(
        这里放自己常用的镜像
    )
    
    # 检查参数
    if [ $# 
  • 点评Cat 3.0快速上手

    CAT 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务。相比于普通APM平台,主要优势在于了日志告警,多种client和实时性。

    服务端

    CAT从2015年开源,最新的大版本是3.0,同时提供了相关的client包也发布到了仓库不再需要用户自己打包了。

    CAT的部署算不上简单,要快速实验的话最好还是使用Docker镜像的方式来启动。最小依赖就是CAT自身外加一个MySQL数据库,当然这种单机模型是谈不上什么高可用的,只是简单的使用和集成调试。

    由于官方没有提供镜像,我自己打包了一个放在dockerhub上,如果使用国内镜像应该速度也还行。

    执行以下命令

    wget https://raw.githubusercontent.com/htynkn/dockerfiles/master/dianping-cat/stack.yml
    
    wget https://raw.githubusercontent.com/htynkn/dockerfiles/master/dianping-cat/V1__initCatDatabase.sql
    
    docker-compose -f stack.yml up

    由于CAT的数据库需要先初始化,所以使用了flyway作为数据库版本管理工具。最好新建一个文件夹,然后在其中执行,不然容易混入其他SQL文件。

    启动后,注意查看端口,2280端口是CAT上报的端口,必须强绑定,8080那个则会使用随机端口,注意查看。直接访问 localhost:{port}/cat 就行了。

    客户端

    如果要测试client链接的效果,首先在/data/appdatas/cat/目录下新建client.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="config.xsd">
        <servers>
            <server ip="127.0.0.1" port="2280" http-port="你的端口" />
        </servers>
    </config>

    然后在你要接入的项目中写入应用名称 src/main/resources/META-INF/app.properties

    app.name={appkey}
  • Docker Hub镜像构建测试

    Docker Hub提供了镜像构建服务,特别是和代码仓库关联起来的时候可以自动构建最新的镜像,这个功能可以保证你的镜像时刻是最新的。

    但是有时候构件本身可能是成功的,比如你成功生成了相关的jar,并放到了合适的运行容器中,但是可能由于第三方依赖或其他原因导致你的镜像其实并不能正常工作。

    人工验证可以发现问题,但是这里使用Docker Hub提供的测试服务更加快捷。

    我们以dubbo-admin为例,这是一个非常标准的Spring Boot项目,构建以后生成jar包可以直接运行。而我们的测试目标就是构建出的镜像可以正常对外提供服务,这里我们检测swagger文档地址是否返回200。不同的项目可以使用不同的检测标准。

    首先添加一个检测脚本test.sh

    LOOP_SIZE=60
    i=0
    
    while [[ $i -lt LOOP_SIZE ]]; do
    	status_code=$(curl --write-out %{http_code} --silent --output /dev/null http://admin:8080/swagger-resources)
    
      if [[ "$status_code" -eq 200 ]] ; then
        echo "Tests passed!"
        exit 0
      else
        curl -v 
  • 快速使用SQLAdvisor

    快速使用SQLAdvisor

    美团点评开源的SQLAdvisor可以帮助分析SQL语句,同时提供优化建议。

    遗憾的是官方没有提供快速的使用方法,需要自己安装依赖并编译,使用起来确实不是很方便。今天做了一个Dockerfile,直接把工具打到Docker中,这样就可以快速使用了。

    使用如下:

    docker pull htynkn/sqladvisor

    验证,输出帮助信息

    docker run -rm htynkn/sqladvisor --help

  • Docker化CAT监控系统

    CAT是点评开源的监控系统,可以统计到粒度非常细,而且也支持hadoop,可以应对企业应用。

    CAT底层使用的是MySQL,需要预先初始化数据库,而且还附带了几个配置文件,总之并不是一个war包就可以启动的。

    为了本地快速调试和集成,还是Docker化一下吧。为了简单起见就只准备一个单机模式的镜像。

    首先是准备几个xml文件,因为是单机模式,就全部只想要127.0.0.1了。

    <?xml version="1.0" encoding="utf-8"?>
    
    <config mode="client" xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="config.xsd" xmlns="">
        <servers>
            <server ip="127.0.0.1" port="2280" http-port="8080"/>
        </servers>
    </config>
    <?xml version="1.0" encoding="utf-8"?>
    
    <config local-mode="false" hdfs-machine="false" job-machine="true" alert-machine="false">
    
        <storage local-base-dir="/data/appdatas/cat/bucket/" max-hdfs-storage-time="15" local-report-storage-time="7"
                 local-logivew-storage-time="7">
        </storage>
    
        <console default-domain="Cat" show-cat-domain="true">
            <remote-servers>127.0.0.1:8080</remote-servers>
        </console>
    </config>

    最关键的就是数据库的准备了,CAT仓库准备了一个SQL文件。我的操作是在连接数据库的时候先检查数据库是否有表,没有就先建表。之后再替换datasource配置中的文件信息…

  • 本地搭建hive集群

    最近有一些hive相关的工作,之前只用过简单的hive,现在只有赶快补一下。

    本地还是用docker启一个hive集群,我直接用的https://github.com/big-data-europe/docker-hive.git 的脚本,clone下来以后直接docker-compose up -d

    查看8080端口可以看到集群状态

    数据库端口在10000上。

    这里我用DBVisualizer来连接一下。

    先下载Hive Driver

    然后添加连接hive://localhost:10000

     …

  • 使用Docker快速启动一个Spark集群

    docker-compose 文件如下

    version: '3'
    services:
      master:
        image: bde2020/spark-master:2.3.1-hadoop2.7
        ports:
          - "8080:8080"
          - "7077:7077"
          - "6066:6066"
        environment:
          - INIT_DAEMON_STEP=setup_spark
      worker:
        image: bde2020/spark-worker:2.3.1-hadoop2.7
        depends_on:
          - master
        ports:
          - "8081"
        environment:
          - "SPARK_MASTER=spark://master:7077"
    

     

    然后运行docker-compose up -d –scale worker=3 就可以启动一个有三个节点的集群了.…

  • Google的jib打包工具

    Google的jib打包工具

    今天看群里说起jib工具,就专门看了一下。地址:https://github.com/GoogleContainerTools/jib。

    jib旨在让开发者使用他们熟悉的工具更轻松地将 Java 应用程序容器化。

    来看看一般的应用如何容器化

    1. 编译构建出jar包或者war包
    2. 编写Dockerfile
    3. Docker 构建镜像到本地或者发布到仓库

    第一步还好说,构建本身由于maven和gradle的存在变得相当便利,如果是spring boot的应用,直接打包jar包,其他的用war插件打包war包就行了。

    第二步编写Dockerfile,大部分Dockerfile的内容都是相似的,准备对应的java环境,拷贝jar或者war,然后配置参数,指定启动脚本。

    第三步也很直接,直接执行docker build . -f Dockerfile

    那么Google专门开源的这个jib工具能够改善的点在何处呢?

    看看Google官方的说明:

    1. 简单 – Jib 采用 Java 实现,并作为 Maven 或 Gradle 构建的一部分运行。你不需要维护 Dockerfile ,甚至无需创建包含所有依赖项的 JAR 包。
    2. 快速 – Jib 利用镜像分层和注册表缓存来实现快速、增量构建。它读取你的构建配置,将应用分到不同的层中,只重新构建和推送发生变更的层。
    3. 可重现 –
  • Play With Docker

    有时候网上找到了一个docker镜像,可能需要快速了解一下,拉到本地,然后配置环境启动有时候有点慢。这种情况Play With Docker就是一个不错的选择,地址:https://labs.play-with-docker.com/

    如果你是镜像的维护者,还可以提供一个stack文件地址,比如 http://play-with-docker.com/?stack=https://raw.githubusercontent.com/htynkn/dockerfiles/master/dubbo-admin/stack.yml

    这样可以快速体验一把,这里的例子是dubbo-admin…

  • 利用docker快速启动一个hive

    临时要用一下hive,本机是没有装的,又想要一个最小集群,快速起起来的,找了一会儿发现一个好的库https://github.com/big-data-europe/.

    这个库下面从Spark到Hadoop,从hbase到hive,应有尽有.以hive为例,https://github.com/big-data-europe/docker-hive

    下载整个库以后直接docker-compose up.默认端口是10000,直接使用就行了.…