influxDB && docker-compose安装 && 基本操作以及语法

本文介绍了使用Docker Compose部署InfluxDB的配置方法,包括环境变量设置和端口映射。此外,讲解了InfluxDB的基本概念,如数据插入语法,并提供了通过HTTP API插入和查询数据的示例。最后,展示了Java代码示例,用于批量写入InfluxDB数据,强调了数据结构和类型转换的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 docker-compose安装

version: "3.4"

# https://docs.influxdata.com/influxdb/v1.7/administration/config
services:
  influxdb:
    image: influxdb:1.7-alpine
    environment:
      - INFLUXDB_ADMIN_ENABLED=true 
      - INFLUXDB_ADMIN_USER=${INFLUXDB_ADMIN_USER:-root}
      - INFLUXDB_ADMIN_PASSWORD=${INFLUXDB_ADMIN_PASSWORD:-root}
      - INFLUXDB_DB=test
      - INFLUXDB_HTTP_LOG_ENABLED=false
      - INFLUXDB_REPORTING_DISABLED=true
      - INFLUXDB_USER=${INFLUXDB_USER:-test}
      - INFLUXDB_USER_PASSWORD=${INFLUXDB_USER_PASSWORD:-test}
    ports:
      - "8083:8083"
      - "8086:8086"
    deploy:
      mode: replicated
      replicas: 1
      resources:
        limits:
          memory: 2048M
        reservations:
          memory: 1024M
    volumes:
      - ./local_bind_volume_dir:/var/lib/influxdb

1.5 基本概念理解

https://www.cnblogs.com/yihuihui/p/11386679.html

2 基本操作

https://jasper-zhang1.gitbooks.io/influxdb/content/Guide/writing_data.html
插入一个值:

curl -i -X POST "http://localhost:8086/write?db=test" -u root:root --data-binary "cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1434055562000000000"

> insert cpu_load_short,host=server02,region=de value=0.1,value2=0.2

从上面的输出,简单小结一下插入的语句写法:
insert + measurement + “,” + tag=value,tag=value + + field=value,field=value

  • tag与tag之间用逗号分隔;field与field之间用逗号分隔
  • tag与field之间用空格分隔
  • tag都是string类型,不需要引号将value包裹
  • field如果是string类型,需要加引号

查询该值:

> select * from cpu_load_short;
name: cpu_load_short
time                host     region  value value2
----                ----     ------  ----- ------
1434055562000000000 server01 us-west 0.64  0.86
1637648158355267700 server02 de      0.1   0.2

4 代码操作:

注意写入的过程需要保证有field,不能全为tag,将很多raw插入:(以下划线开始的为filed,filed字段不会建立索引,故查询慢)

    public void insert(String table, List<Map<String, Object>> rows) {
        if (CollectionUtils.isEmpty(rows)) {
            return;
        }
        List<Point> points = rows.stream()
                .filter(e -> !CollectionUtils.isEmpty(e))
                .map(e -> {
                        return to(table, e);

                })
                .collect(Collectors.toList());
        if (CollectionUtils.isEmpty(points)) {
            return;
        }
        BatchPoints batchPoints = BatchPoints.builder()
                .points(points)
                .build();
        influxDB.write(batchPoints);
        influxDB.flush();
    }

/** to函数 **/ 
    private Point to(String table, Map<String, Object> row)  {
        Point.Builder builder = Point.measurement(table).time(getTime(row), TimeUnit.MILLISECONDS);
        row.remove("time");
        row.forEach((k, v) -> {
            if (v == null) {
                return;
            }
            if (StringUtils.startsWith(k, "_")) {
                String key = StringUtils.removeStart(k, "_");
                if (v.getClass().getName().equals(boolean.class.getName())) {
                    builder.addField(key, (boolean) v);
                } else if (v.getClass().getName().equals(short.class.getName())) {
                    builder.addField(key, (short) v);
                } else if (v.getClass().getName().equals(int.class.getName())) {
                    builder.addField(key, (int) v);
                } else if (v.getClass().getName().equals(long.class.getName())) {
                    builder.addField(key, (long) v);
                } else if (v.getClass().getName().equals(float.class.getName())) {
                    builder.addField(key, (float) v);
                } else if (v.getClass().getName().equals(double.class.getName())) {
                    builder.addField(key, (double) v);
                } else if (v instanceof Boolean) {
                    builder.addField(key, (Boolean) v);
                } else if (v instanceof Number) {
                    builder.addField(key, (Number) v);
                } else if (v instanceof String) {
                    builder.addField(key, (String) v);
                } else {
                    builder.addField(key, v.toString());
                }
            } else {
                builder.tag(k, v.toString());
            }
        });
        return builder.build();
    }
    
/** build函数(influxdb官方维护) 将会检测是否含有field字段 **/ 
        public Point build() {
            Preconditions.checkNonEmptyString(this.measurement, "measurement");
            Preconditions.checkPositiveNumber(this.fields.size(), "fields size"); // 此处需保证fields size 大于等于1
            Point point = new Point();
            point.setFields(this.fields);
            point.setMeasurement(this.measurement);
            if (this.time != null) {
                point.setTime(this.time);
                point.setPrecision(this.precision);
            }

            point.setTags(this.tags);
            return point;
        }
<think>好的,用户想了解Docker ComposeDocker的使用方法及应用场景。首先,我需要明确两者的基本概念和区别。根据引用[1],Dockerfile用于构建镜像,而docker-compose.yml用于定义多容器应用。需要分别解释它们的功能。 接下来,用户需要使用方法,所以得整理安装和配置步骤。引用[2]提到安装docker-compose的命令,以及启动Docker服务的方法。这部分要详细说明,确保用户能跟着操作。 然后,应用场景方面,Docker适合单一容器环境,比如微服务部署。而Docker Compose适用于多服务协作,比如Web应用加数据库的场景。需要举例说明,比如引用中的CIG监控系统部署,引用[3]和[4]中的启动命令。 可能用户还关心实际案例,比如开发环境配置、CI/CD流程等。需要结合引用中的信息,给出具体的docker-compose.yml示例,并解释每个部分的作用。 最后,常见问题部分,用户可能会问到性能优化或网络配置,但根据现有引用,可能需要集中在基本操作和场景上。确保回答结构清晰,分步骤解释,并引用对应的参考资料。同时,检查LaTeX格式是否正确,行内公式用$...$,独立公式用$$...$$,但这里可能用不上数学公式,所以重点在代码块和引用标识的正确添加。</think>### DockerDocker Compose的使用方法及应用场景 #### 一、DockerDocker Compose的核心区别 1. **Docker**: - **功能**:用于构建、运行和管理单个容器。通过`Dockerfile`定义镜像构建规则,例如安装依赖、配置环境等[^1]。 - **典型命令**:`docker build`(构建镜像)、`docker run`(启动容器)。 - **应用场景**:单容器部署(如独立微服务、工具容器)。 2. **Docker Compose**: - **功能**:通过`docker-compose.yml`定义多容器应用及其依赖关系,实现一键启动多个关联服务(如Web应用+数据库+缓存)。 - **典型命令**:`docker-compose up`(启动所有服务)、`docker-compose down`(停止服务)。 - **应用场景**:多服务协作环境(开发/测试环境、复杂应用栈)。 --- #### 二、使用步骤详解 ##### 1. Docker基础使用 **示例:部署Python应用** ```Dockerfile # Dockerfile 示例 FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD ["python", "app.py"] ``` - **构建镜像**:`docker build -t my-python-app .` - **运行容器**:`docker run -d -p 5000:5000 my-python-app` ##### 2. Docker Compose部署多容器应用 **示例:Web应用 + Redis** ```yaml # docker-compose.yml 示例 version: '3.8' services: web: build: . ports: - "5000:5000" depends_on: - redis redis: image: "redis:alpine" ``` - **启动服务**:`docker-compose up -d` [^3][^4] - **停止服务**:`docker-compose down` --- #### 三、主要应用案例 1. **开发环境标准化** 通过`docker-compose.yml`一键启动数据库、消息队列等依赖服务,确保团队环境一致。 2. **微服务架构** 例如使用Compose部署前端(Nginx)、后端(Node.js)和数据库(PostgreSQL),实现本地联调。 3. **监控系统部署** 如引用[3]提到的**CIG监控**(CAdvisor+InfluxDB+Grafana),通过Compose快速集成监控组件: ```yaml # CIG的docker-compose.yml片段 services: cadvisor: image: google/cadvisor volumes: - /:/rootfs:ro influxdb: image: influxdb:1.8 grafana: image: grafana/grafana ``` 4. **CI/CD流水线** 在持续集成中,通过Docker Compose启动测试环境并运行自动化测试脚本。 --- #### 四、常见问题解答 1. **如何安装Docker Compose?** 使用以下命令安装(需提前安装Docker): ```bash curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose # 添加执行权限[^2] ``` 2. **如何调试Compose配置?** 使用`docker-compose config`验证配置文件语法,或`docker-compose logs`查看容器日志[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值