docs.md 10.4 KB
Newer Older
1
# 通过 Docker 快速体验 TDengine
S
skye0207 已提交
2

3
虽然并不推荐在生产环境中通过 Docker 来部署 TDengine 服务,但 Docker 工具能够很好地屏蔽底层操作系统的环境差异,很适合在开发测试或初次体验时用于安装运行 TDengine 的工具集。特别是,借助 Docker,能够比较方便地在 Mac OSX 和 Windows 系统上尝试 TDengine,而无需安装虚拟机或额外租用 Linux 服务器。另外,从2.0.14.0版本开始,TDengine提供的镜像已经可以同时支持X86-64、X86、arm64、arm32平台,像NAS、树莓派、嵌入式开发板之类可以运行docker的非主流计算机也可以基于本文档轻松体验TDengine。
S
skye0207 已提交
4

5
下文通过 Step by Step 风格的介绍,讲解如何通过 Docker 快速建立 TDengine 的单节点运行环境,以支持开发和测试。
S
skye0207 已提交
6

7
## 下载 Docker
S
skye0207 已提交
8

9 10 11
Docker 工具自身的下载请参考 [Docker官网文档](https://docs.docker.com/get-docker/)

安装完毕后可以在命令行终端查看 Docker 版本。如果版本号正常输出,则说明 Docker 环境已经安装成功。
S
skye0207 已提交
12 13 14

```bash
$ docker -v
15
Docker version 20.10.3, build 48d30b5
S
skye0207 已提交
16 17
```

18
## 在 Docker 容器中运行 TDengine
S
skye0207 已提交
19

20
1,使用命令拉取 TDengine 镜像,并使它在后台运行。
S
skye0207 已提交
21 22

```bash
23 24
$  docker run -d --name tdengine tdengine/tdengine
7760c955f225d72e9c1ec5a4cef66149a7b94dae7598b11eb392138877e7d292
S
skye0207 已提交
25 26
```

27 28 29 30 31
- **docker run**:通过 Docker 运行一个容器
- **--name tdengine**:设置容器名称,我们可以通过容器名称来查看对应的容器
- **-d**:让容器在后台运行
- **tdengine/tdengine**:拉取的 TDengine 官方发布的应用镜像
- **7760c955f225d72e9c1ec5a4cef66149a7b94dae7598b11eb392138877e7d292**:这个返回的长字符是容器 ID,我们也可以通过容器 ID 来查看对应的容器
S
skye0207 已提交
32

33
2,确认容器是否已经正确运行。
S
skye0207 已提交
34 35 36 37

```bash
$ docker ps
CONTAINER ID   IMAGE               COMMAND   CREATED          STATUS          ···
38
c452519b0f9b   tdengine/tdengine   "taosd"   14 minutes ago   Up 14 minutes   ···
S
skye0207 已提交
39 40
```

41 42 43 44 45 46
- **docker ps**:列出所有正在运行状态的容器信息。
- **CONTAINER ID**:容器 ID。
- **IMAGE**:使用的镜像。
- **COMMAND**:启动容器时运行的命令。
- **CREATED**:容器创建时间。
- **STATUS**:容器状态。UP 表示运行中。
S
skye0207 已提交
47

48
3,进入 Docker 容器内,使用 TDengine。
S
skye0207 已提交
49 50

```bash
51 52
$ docker exec -it tdengine /bin/bash
root@c452519b0f9b:~/TDengine-server-2.0.20.13# 
S
skye0207 已提交
53 54
```

55 56 57
- **docker exec**:通过 docker exec 命令进入容器,如果退出,容器不会停止。
- **-i**:进入交互模式。
- **-t**:指定一个终端。
58
- **c452519b0f9b**:容器 ID,需要根据 docker ps 指令返回的值进行修改。
59
- **/bin/bash**:载入容器后运行 bash 来进行交互。
S
skye0207 已提交
60

61
4,进入容器后,执行 taos shell 客户端程序。
S
skye0207 已提交
62 63

```bash
64
$ root@c452519b0f9b:~/TDengine-server-2.0.20.13# taos
S
skye0207 已提交
65

66
Welcome to the TDengine shell from Linux, Client Version:2.0.20.13
S
skye0207 已提交
67 68
Copyright (c) 2020 by TAOS Data, Inc. All rights reserved.

69
taos> 
S
skye0207 已提交
70 71
```

72
TDengine 终端成功连接服务端,打印出了欢迎消息和版本信息。如果失败,会有错误信息打印出来。
S
skye0207 已提交
73

74
在 TDengine 终端中,可以通过 SQL 命令来创建/删除数据库、表、超级表等,并可以进行插入和查询操作。具体可以参考 [TAOS SQL 说明文档](https://www.taosdata.com/cn/documentation/taos-sql)
S
skye0207 已提交
75

76
## 通过 taosdemo 进一步了解 TDengine
S
skye0207 已提交
77

78
1,接上面的步骤,先退出 TDengine 终端程序。
S
skye0207 已提交
79 80 81

```bash
$ taos> q
82
root@c452519b0f9b:~/TDengine-server-2.0.20.13#
S
skye0207 已提交
83 84
```

85
2,在命令行界面执行 taosdemo。
S
skye0207 已提交
86 87

```bash
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
root@c452519b0f9b:~/TDengine-server-2.0.20.13# taosdemo

taosdemo is simulating data generated by power equipments monitoring...

host:                       127.0.0.1:6030
user:                       root
password:                   taosdata
configDir:                  
resultFile:                 ./output.txt
thread num of insert data:  10
thread num of create table: 10
top insert interval:        0
number of records per req:  30000
max sql length:             1048576
database count:             1
database[0]:
  database[0] name:      test
  drop:                  yes
  replica:               1
  precision:             ms
  super table count:     1
  super table[0]:
      stbName:           meters
      autoCreateTable:   no
      childTblExists:    no
      childTblCount:     10000
      childTblPrefix:    d
      dataSource:        rand
      iface:             taosc
      insertRows:        10000
      interlaceRows:     0
      disorderRange:     1000
      disorderRatio:     0
      maxSqlLen:         1048576
      timeStampStep:     1
      startTimestamp:    2017-07-14 10:40:00.000
      sampleFormat:      
      sampleFile:        
      tagsFile:          
      columnCount:       3
column[0]:FLOAT column[1]:INT column[2]:FLOAT 
      tagCount:            2
        tag[0]:INT tag[1]:BINARY(16) 

         Press enter key to continue or Ctrl-C to stop
S
skye0207 已提交
133 134
```

135 136 137
回车后,该命令将在数据库 test 下面自动创建一张超级表 meters,该超级表下有 1 万张表,表名为 "d0" 到 "d9999",每张表有 1 万条记录,每条记录有 (ts, current, voltage, phase) 四个字段,时间戳从 "2017-07-14 10:40:00 000" 到 "2017-07-14 10:40:09 999",每张表带有标签 location 和 groupId,groupId 被设置为 1 到 10, location 被设置为 "beijing" 或者 "shanghai"。

执行这条命令大概需要几分钟,最后共插入 1 亿条记录。
S
skye0207 已提交
138

E
Elias Soong 已提交
139
3,进入 TDengine 终端,查看 taosdemo 生成的数据。
S
skye0207 已提交
140

141
- **进入命令行。**
S
skye0207 已提交
142 143

```bash
144
$ root@c452519b0f9b:~/TDengine-server-2.0.20.13# taos
S
skye0207 已提交
145

146
Welcome to the TDengine shell from Linux, Client Version:2.0.20.13
S
skye0207 已提交
147 148
Copyright (c) 2020 by TAOS Data, Inc. All rights reserved.

149
taos> 
S
skye0207 已提交
150 151
```

152
- **查看数据库。**
S
skye0207 已提交
153 154 155 156

```bash
$ taos> show databases;
  name        |      created_time       |   ntables   |   vgroups   |    ···
157 158
  test        | 2021-08-18 06:01:11.021 |       10000 |           6 |    ···
  log         | 2021-08-18 05:51:51.065 |           4 |           1 |	   ···
159

S
skye0207 已提交
160 161
```

162
- **查看超级表。**
S
skye0207 已提交
163 164 165 166 167 168

```bash
$ taos> use test;
Database changed.

$ taos> show stables;
169 170 171 172
              name              |      created_time       | columns |  tags  |   tables    |
============================================================================================
 meters                         | 2021-08-18 06:01:11.116 |       4 |      2 |       10000 |
Query OK, 1 row(s) in set (0.003259s)
S
skye0207 已提交
173 174 175

```

176
- **查看表,限制输出十条。**
S
skye0207 已提交
177 178 179

```bash
$ taos> select * from test.t0 limit 10;
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195

DB error: Table does not exist (0.002857s)
taos> select * from test.d0 limit 10;
           ts            |       current        |   voltage   |        phase         |
======================================================================================
 2017-07-14 10:40:00.000 |             10.12072 |         223 |              0.34167 |
 2017-07-14 10:40:00.001 |             10.16103 |         224 |              0.34445 |
 2017-07-14 10:40:00.002 |             10.00204 |         220 |              0.33334 |
 2017-07-14 10:40:00.003 |             10.00030 |         220 |              0.33333 |
 2017-07-14 10:40:00.004 |              9.84029 |         216 |              0.32222 |
 2017-07-14 10:40:00.005 |              9.88028 |         217 |              0.32500 |
 2017-07-14 10:40:00.006 |              9.88110 |         217 |              0.32500 |
 2017-07-14 10:40:00.007 |             10.08137 |         222 |              0.33889 |
 2017-07-14 10:40:00.008 |             10.12063 |         223 |              0.34167 |
 2017-07-14 10:40:00.009 |             10.16086 |         224 |              0.34445 |
Query OK, 10 row(s) in set (0.016791s)
S
skye0207 已提交
196 197 198

```

199
- **查看 d0 表的标签值。**
S
skye0207 已提交
200 201

```bash
202 203 204 205 206
$ taos> select groupid, location from test.d0;
   groupid   |     location     |
=================================
           0 | shanghai         |
Query OK, 1 row(s) in set (0.003490s)
S
skye0207 已提交
207 208 209

```

210 211 212
## 停止正在 Docker 中运行的 TDengine 服务

```bash
213 214
$ docker stop tdengine
tdengine
215 216 217
```

- **docker stop**:通过 docker stop 停止指定的正在运行中的 docker 镜像。
218
- **tdengine**:容器名称。
S
skye0207 已提交
219

220
## 编程开发时连接在 Docker 中的 TDengine
S
skye0207 已提交
221

222
从 Docker 之外连接使用在 Docker 容器内运行的 TDengine 服务,有以下两个思路:
S
skye0207 已提交
223

224
1,通过端口映射(-p),将容器内部开放的网络端口映射到宿主机的指定端口上。通过挂载本地目录(-v),可以实现宿主机与容器内部的数据同步,防止容器删除后,数据丢失。
S
skye0207 已提交
225 226

```bash
227
$ docker run -d -v /etc/taos:/etc/taos -P 6041:6041 tdengine/tdengine
S
skye0207 已提交
228 229 230
526aa188da767ae94b244226a2b2eec2b5f17dd8eff592893d9ec0cd0f3a1ccd

$ curl -u root:taosdata -d 'show databases' 127.0.0.1:6041/rest/sql
231
{"status":"succ","head":["name","created_time","ntables","vgroups","replica","quorum","days","keep0,keep1,keep(D)","cache(MB)","blocks","minrows","maxrows","wallevel","fsync","comp","cachelast","precision","update","status"],"column_meta":[["name",8,32],["created_time",9,8],["ntables",4,4],["vgroups",4,4],["replica",3,2],["quorum",3,2],["days",3,2],["keep0,keep1,keep(D)",8,24],["cache(MB)",4,4],["blocks",4,4],["minrows",4,4],["maxrows",4,4],["wallevel",2,1],["fsync",4,4],["comp",2,1],["cachelast",2,1],["precision",8,3],["update",2,1],["status",8,10]],"data":[["test","2021-08-18 06:01:11.021",10000,4,1,1,10,"3650,3650,3650",16,6,100,4096,1,3000,2,0,"ms",0,"ready"],["log","2021-08-18 05:51:51.065",4,1,1,1,10,"30,30,30",1,3,100,4096,1,3000,2,0,"us",0,"ready"]],"rows":2}
S
skye0207 已提交
232 233
```

234 235
- 第一条命令,启动一个运行了 TDengine 的 docker 容器,并且将容器的 6041 端口映射到宿主机的 6041 端口上。
- 第二条命令,通过 RESTful 接口访问 TDengine,这时连接的是本机的 6041 端口,可见连接成功。
S
skye0207 已提交
236

237
注意:在这个示例中,出于方便性考虑,只映射了 RESTful 需要的 6041 端口。如果希望以非 RESTful 方式连接 TDengine 服务,则需要映射从 6030 开始的共 11 个端口(完整的端口情况请参见 [TDengine 2.0 端口说明](https://www.taosdata.com/cn/documentation/faq#port))。在例子中,挂载本地目录也只是处理了配置文件所在的 /etc/taos 目录,而没有挂载数据存储目录。
S
skye0207 已提交
238

239
2,直接通过 exec 命令,进入到 docker 容器中去做开发。也即,把程序代码放在 TDengine 服务端所在的同一个 Docker 容器中,连接容器本地的 TDengine 服务。
S
skye0207 已提交
240 241

```bash
242
$ docker exec -it tdengine /bin/bash
S
skye0207 已提交
243
```