GVKun编程网logo

智汀家庭云-快速入门:使用Docker运行

15

想了解智汀家庭云-快速入门:使用Docker运行的新动态吗?本文将为您提供详细的信息,此外,我们还将为您介绍关于docker一小时快速入门之利用docker安装Redis、Kafka-Docker:使

想了解智汀家庭云-快速入门:使用Docker运行的新动态吗?本文将为您提供详细的信息,此外,我们还将为您介绍关于docker 一小时快速入门之利用docker安装Redis、Kafka-Docker:使用Docker运行Apache Kafka的步骤、使用Docker运行TFS、使用Docker运行构建过程的新知识。

本文目录一览:

智汀家庭云-快速入门:使用Docker运行

智汀家庭云-快速入门:使用Docker运行

使用 Docker 运行智汀家庭云

本文档描述如何在 Docker 环境下运行智汀家庭云,并且通过交互式客户端控制虚拟设备。

1. 环境准备

只要您的主机安装了 docker 与 docker-compose,都可以运行智汀家庭云。但通常情况下,智汀家庭云更适合运行在 Linux 主机上。

2. 运行智汀家庭云

首先确保主机上已安装 docker 与 docker-compose,并且能够正常运行:

docker version
docker-compose version

创建一个目录作为智汀家庭云运行的根目录,并在该目录内创建文件 docker-compose.yaml,内容如下:

version: "3.9"

services:
  etcd:
    image: bitnami/etcd:3
    environment:
      - ALLOW_NONE_AUTHENTICATION=yes
    ports:
      - 2379:2379
      - 2380:2380
  smartassistant:
    image: zhitingtech/smartassistant:latest
    privileged: true
    ports:
      - "8088:8088"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - etcd
  saclient:
    image: zhitingtech/saclient:latest
    network_mode: "host"
    depends_on:
      - smartassistant

该文件配置了三个服务:

  • smartassistant 为智汀家庭云主服务
  • etcd 基础服务,用于插件注册与发现
  • saclient 提供一个命令行跟智汀家庭云进行交互,用于 demo 数据的初始化以及设备控制演示

输入以下命令启动服务:

docker-compose build
docker-compose up

可以通过以下命令查看智汀家庭云状态:

curl http://localhost:8088/check

如果返回以下内容则说明服务已运行起来并且未被绑定

{"status":0,"reason":"成功","data":{"is_bind":false}}

如果返回数据里 is_bind 字段值为 true,则需要删除运行目录的 sadb.db 文件(注意: 该操作会删除已有数据),并且重新运行。

3. 测试智汀家庭云

下面通过 saclient 命令演示初始化智汀家庭云以及添加设备,控制设备的过程。

运行以下命令进入 saclient 命令行界面:

docker-compose exec saclient /app/saclient

可以通过 help 子命令查看 saclient 提供的功能

saclient » help

saclient 主要提供以下子命令:

  • bind 初始化智汀家庭云,并且生成管理员帐号
  • discover 通过插件扫描设备
  • add 将设备添加到智汀家庭云
  • info 获取设备信息
  • power 向设备发送控制指令

可以按下面的流程进行测试:

saclient » bind
add device ok, ID: 1
bind ok, user token: xxxxxx
saclient » discover
{"id":1,"type":"","result":{"device":{"name":"zhiting_M1_abcdefg","identity":"abcdefg","model":"M1","manufacturer":"zhiting","plugin_id":"demo"}},"success":true}
saclient » add -i abcdefg -f zhiting -m M1 -n zhiting_M1_abcdefg -p demo
add device ok, ID: 2
saclient » info -i 2
{"status":0,"reason":"成功","data":{"device_info":{"id":2,"name":"zhiting_M1_abcdefg","logo_url":"device_logo_url","model":"M1","location":{"name":"","id":0},"plugin":{"name":"demo","id":"demo","url":"http://127.0.0.1:8088/api/plugin/demo/html/?device_id=2\u0026identity=abcdefg\u0026model=M1\u0026name=zhiting_M1_abcdefg\u0026plugin_id=demo\u0026sa_id=demo-sa\u0026token=MTYyODA2NDAzNXxOd3dBTkZvM1ZqTkhSRXhYVGtsWVNVTllVbG8yVHpKUVVWTlNWalJhUmtaTFVWVkVWVFF5VkZaQ1RsbEVWMVZJVkVsTlNESktRVUU9fFTRixaAgA1QqIpJVvogB87HvvjTpFI3dk4ifqvupUdE"},"attributes":[{"id":1,"attribute":"power","val":"off","val_type":"string","instance_id":1},{"id":2,"attribute":"color_temp","val":0,"val_type":"int","instance_id":1},{"id":3,"attribute":"brightness","val":0,"val_type":"int","min":1,"max":100,"instance_id":1}],"permissions":{"update_device":true,"delete_device":true}}}}
saclient » power -i abcdefg -p demo -v on 
{"event_type":"attribute_change","data":{"attr":{"id":1,"attribute":"power","val":"on","val_type":"string"},"identity":"abcdefg","instance_id":1}}
saclient » power -i abcdefg -p demo -v off
{"event_type":"attribute_change","data":{"attr":{"id":1,"attribute":"power","val":"off","val_type":"string"},"identity":"abcdefg","instance_id":1}}

4. 进一步了解

如果您手上有智汀家庭云支持的硬件设备,可以安装第三方插件,然后通过智汀APP接入您的设备。

智汀家庭云是一个开源项目,如果如果您熟悉 go 编程语言,想进一步了解我们的项目,可以访问开发环境搭建

智汀家庭云提供插件系统支持第三方设备接入,如果您的设备不在我们的支持列表,可以参考开发您的第一个插件了解插件开发相关内容。

5. 常见问题

测试过程中可能会遇到容器中数据不一致的情况,可以通过挂在本地卷的方式解决

使用如下的 docker-compose.yaml 配置:

version: "3.9"

services:
  etcd:
    image: bitnami/etcd:3
    environment:
      - ALLOW_NONE_AUTHENTICATION=yes
    ports:
      - 2379:2379
      - 2380:2380
  smartassistant:
    image: zhitingtech/smartassistant:latest
    ports:
      - "8088:8088"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./sadb.db:/app/sadb.db
    depends_on:
      - etcd
  saclient:
    image: zhitingtech/saclient:latest
    network_mode: "host"
    volumes:
      - ./saclient.yaml:/app/app.yaml
    depends_on:
      - smartassistant

本地目录创建一个空的 sadb.db 文件;以及具有以下内容的 saclient.yaml:

token: ""
server: http://127.0.0.1:8088
device: ""

然后按正常流程启动:

输入以下命令启动服务:

docker-compose up

上一篇文章:《智汀家庭云-开发指南》

下一篇文章:《智汀家庭云-快速入门:开发环境搭建》

开发指南导航:

  1. 《开发指南-Golang》
  2. 《开发指南-Web》
  3. 《开发指南-iOS》
  4. 《开发指南-Android》  

docker 一小时快速入门之利用docker安装Redis

docker 一小时快速入门之利用docker安装Redis

利用docker方式快捷安装redis

#该方式默认下载的最新版本镜像,如需要下载指定版本在redis后面跟:版本号 docker pull redis #查看当前下载redis的镜像 docker images redis #启动 映射到外部的6677 ---> redis客户端直接用服务器ip:6677端口即可请求到redis docker run -it -p 6677:6379 redis
#查看当前运行的容器 docker ps -a

在宿主机创建映射文件 #创建配置目录 mkdir -p /u01/docker/redis/conf #创建数据目录 mkdir -p /u01/docker/redis/data #创建redis配置文件 touch /u01/docker/redis/conf/redis.conf vi /u01/docker/redis/conf/redis.conf redis.conf文件中填写如下内容 #守护进程 daemonize no #注释绑定本地IP #bind 127.0.0.1 #关闭保护模式 protected-mode no #设置口令 requirepass 123456

重新创建目录映射到宿主机的redis容器 #创建启动容器 docker run -it -d --privileged=true -p 6677:6379 -v /u01/docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /u01/docker/redis/data:/data --name redis-5.0 redis /etc/redis/redis.conf --appendonly yes

#参数说明 -d: 后台运行容器,并返回容器ID -i: 以交互模式运行容器,通常与 -t 同时使用 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用 --privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限 -v /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf:映射配置文件 -v /home/docker/redis/data:/data:映射数据目录 redis-server /etc/redis/redis.conf:指定配置文件启动redis-server进程 --name : 指定容器名称,这个最好加上,不然看docker进程的时候会很尴尬 --appendonly yes:开启数据持久化

#docker命令批量删除状态为Exited的容器 docker rm $(docker ps -q -f status=exited) 删除容器 根据容器CONTAINER ID #docker rm <CONTAINER ID>

可以用"docker ps -n 5 "看一下最新前5个的container

要查看启动的centos容器中的输出,可以使用如下方式: $ docker logs $CONTAINER_ID ##在container外面查看它的输出 $ docker attach $CONTAINER_ID ##连接上容器实时查看:

docker 容器 启动/ 关闭/重启

docker start 容器id docker stop 容器id docker restart 容器id

docker 服务随系统启动而启动

#systemctl enable docker.service

docker中的不同镜像创建的容器 随系统启动而启动 未启动的容器 #docker run --restart=always 启动中的容器: #docker update --restart=always <CONTAINER ID>

Kafka-Docker:使用Docker运行Apache Kafka的步骤

Kafka-Docker:使用Docker运行Apache Kafka的步骤

1.目标

在这个Kafka教程中,我们将学习Kafka-Docker的概念。此外,我们将在Kafka中看到Docker的卸载过程。这包括使用Docker 运行Apache Kafka的所有步骤  。除此之外,要使用Docker运行Kafka,我们将学习它的用法,经纪人ID,广告主机名,广告端口等。
所以,让我们开始Kafka-docker教程。

卡夫卡泊坞窗

Kafka-Docker:使用Docker运行Apache Kafka的步骤

2. Kafka-docker是什么?

这里是使用Docker即Kafka-docker运行Apache Kafka的步骤。

一世。使用Docker的先决条件

  • 首先,安装docker-compose

让我们来探索Kafka Performance Tuning - Kafka Optimization
a的方法。安装Docker Compose 
我们可以在macOS,Windows以及64位Linux上运行compose 。
现在,要安装Kafka-Docker,步骤如下:
1。对于任何有意义的工作,Docker组合依赖于Docker Engine。因此,我们必须确保我们在本地或远程安装Docker引擎,具体取决于我们的设置。
基本上,在Docker for Mac和Windows等桌面系统上,Docker组合作为桌面安装的一部分包含在内。
2.然后,在MacOS Docker for Mac 上安装Compose 
和Docker ToolBox已经包含Compose和其他Docker应用程序,因此Mac用户不需要单独安装Compose。Docker安装说明如下:
阅读Apache Kafka Consumer
3.卸载Kafka-docker

  • 如果我们使用curl安装它,那么卸载Docker Compose:

sudo rm / usr / local / bin / docker-compose

  • 如果我们使用pip安装,那么卸载Docker Compose:

pip uninstall docker-compose

  • 安装compose后,修改docker-compose.yml中的KAFKA_ADVERTISED_HOST_NAME以匹配我们的docker主机IP

注意:请勿使用localhost或127.0.0.1作为主机IP来运行多个代理。

  • 如果我们想要自定义任何Kafka参数,我们需要将它们作为环境变量添加到docker-compose.yml中。 
  • 通过添加前缀为LOG4J_的环境变量,可以自定义Kafka的log4j用法。这些将映射到log4j.properties。例如LOG4J_LOGGER_KAFKA_AUTHORIZER_LOGGER = DEBUG,authorizerAppender

注意:配置网络有各种“问题”。 
阅读Apache Kafka职业范围与薪资趋势

II。用法

启动Kafka集群:

  • docker-compose up -d

要添加更多Kafka经纪人:

  • docker-compose scale kafka = 3

要销毁群集:

  • 码头工人组成停止

注意:默认的docker-compose.yml应该被视为一个起点。默认情况下,每个Kafka代理将在重新启动时获得新的端口号和代理ID。这取决于我们的用例,这可能是不可取的。此外,我们可以相应地修改docker-compose配置,以使用特定端口和代理ID,例如docker-compose-single-broker.yml:docker 
-compose -f docker-compose-single-broker.yml up

III。经纪人ID

可以以不同方式配置代理ID

  • 明确地,使用KAFKA_broKER_ID
  • 通过命令,使用broKER_ID_COMMAND,例如broKER_ID_COMMAND:“hostname | awk -F'-''{print $ 2}'“

但是,如果我们在docker-compose文件中没有指定代理ID,则意味着它将自动生成。它允许放大和缩小。此外,为了确保不重新创建容器,请不要使用docker-compose的-no-recreate选项,从而保留其名称和ID。

IV。自动创建主题

如果我们想让Kafka- docker 在创建过程中自动在Kafka中创建主题,  可以在docker-compose.yml中添加KAFKA_CREATE_TOPICS环境变量  。
以下是来自docker-compose.yml的示例代码:
environment:
KAFKA_CREATE_TOPICS:“Topic1:1:3,Topic2:1:1:compact” 
在这里,我们可以看到主题1有1个分区以及3个副本,而主题2具有1个分区,1个副本,以及设置为压缩的cleanup.policy。
了解Kafka Producer
此外,通过指定KAFKA_CREATE_TOPICS_SEParaTOR环境变量来覆盖默认分隔符,以便在我们的主题定义之间使用多行YAML或其他分隔符。
例如,要拆分主题定义KAFKA_CREATE_TOPICS_SEParaTOR:“$$'\ n”'将使用换行符。确保语法必须遵循docker-compose转义规则和ANSI-C引用。

v。广告主机名

我们可以以不同的方式配置通告的主机名

  • 明确地,使用KAFKA_ADVERTISED_HOST_NAME
  • 通过命令,使用HOSTNAME_COMMAND,例如HOSTNAME_COMMAND:“route -n | awk'/ UG [\ t] / {print $$ 2}'“

但是,如果已指定KAFKA_ADVERTISED_HOST_NAME,则优先于HOSTNAME_COMMAND 
为了获取容器主机的IP,我们可以使用元数据服务进行AWS部署:
HOSTNAME_COMMAND = wget -t3 -T2 -qO- http://169.254.169.254 /最新/元数据/本地的IPv4

  • 将HOSTNAME_COMMAND注入配置

如果我们在任何其他KAFKA_XXX变量中需要HOSTNAME_COMMAND的值,请使用变量值中的_ {HOSTNAME_COMMAND}字符串,即
KAFKA_ADVERTISED_LISTENERS = SSL:// _ {HOSTNAME_COMMAND}:9093,PLAINTEXT:// 9092 
让我们探索Apache Kafka工作流程| Kafka Pub-Sub Messaging

六。广告端口

确定所需的通告端口是否不是静态非常重要。可以使用PORT_COMMAND环境变量。
PORT_COMMAND:“ docker port $$(hostname)9092 / tcp | cut -d:-f2
通过使用_ {PORT_COMMAND}字符串,我们可以在任何其他KAFKA_XXX配置中插入它,即
KAFKA_ADVERTISED_LISTENERS:PLAINTEXT://1.2.3.4:_ {PORT_COMMAND}

七。监听器配置

如果Kafka文档是开放的,那么它非常有用,以便轻松理解各种代理监听器配置选项。
对于版本0.9.0的时间,有多个侦听器配置,Kafka支持代理以帮助支持不同的协议以及区分内部和外部流量。 
注意: advertised.host.name和advertised.port仍然按预期工作,但在配置侦听器时不应使用。

你对卡夫卡了解多少 

八。例

以下示例环境:
HOSTNAME_COMMAND:

  1. 卷曲http://169.254.169.254/latest/Meta-data/public-hostname

KAFKA_ADVERTISED_LISTENERS:

  1. INSIDE ://:9092,OUTSIDE:// _ {HOSTNAME_COMMAND}:9094

KAFKA_LISTENERS:

  1. INSIDE ://:9092,OUTSIDE://:9094KAFKA_LISTENER_Security_PROTOCOL_MAP:INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT

KAFKA_INTER_broKER_LISTENER_NAME:INSIDE 
使用JMeter查看Apache Kafka-Load测试
将导致以下代理配置:

  1. advertised.listeners = OUTSIDE ://ec2-xx-xx-xxx-xx.us-west-2.compute.amazonaws.com:9094,INSIDE://:9092
  2. listeners = OUTSIDE ://:9094,INSIDE://:9092
  3. inter.broker.listener.name = INSIDE

九。规则

  • 没有侦听器可以共享端口号。
  • 第二个规则是,advertised.listener必须由侦听器列表中的协议名称和端口号出现。

X。经纪人机架

我们可以通过不同方式配置代理机架关联

  • 明确地,使用KAFKA_broKER_RACK
  • 通过命令,使用RACK_COMMAND,例如RACK_COMMAND:“curl http://169.254.169.254/latest/Meta-data/placement/availability-zone”

在上面的示例中,AWS元数据服务用于将实例的可用区域放在broker.rack属性中。

十一。JMX

出于监控目的,我们可能需要配置JMX。此外,对于标准JMX参数,可能会出现用于连接的基础RMI协议的问题

  1. java.rmi.server.hostname - 接口以绑定侦听端口
  2. com.sun.management.jmxremote.rmi.port

带命令的Apache Kafka操作
例如,
如果我们要连接到本地运行的Kafka(假设暴露端口1099)
KAFKA_JMX_OPTS:“ - Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate = false -Dcom。 sun.management.jmxremote.ssl = false -Djava.rmi.server.hostname = 127.0.0.1 -Dcom.sun.management.jmxremote.rmi.port = 1099“ 
JMX_PORT:1099 
Jconsole现在可以连接到jconsole 192.168.99.100:1099

十二。Docker Swarm模式

在使用覆盖网络在Docker Swarm中部署Kafka时,上述侦听器配置是必需的。在分离OUTSIDE以及INSIDE侦听器时,主机可以在群组内受益时与覆盖网络外的客户端进行通信。
在Docker Swarm中运行Kafka的更多好方法包括:
让我们讨论Apache Kafka术语

  1. 要为每个群集节点启动一个且仅一个Kafka代理,请在撰写文件中使用“deploy:global”。
  2. 而不是默认的“入口”负载平衡端口绑定,使用组合文件版本“3.2”以及“长”端口定义以及“主机”模式下的端口。例如:

ports:
- target:9094 
发布:9094 
protocol:tcp 
mode:host
所以,这完全是关于Kafka-docker的。希望您喜欢我们对Kafka Docker的解释。

3.结论

因此,我们已经看到了整个Kafka-docker教程。此外,我们还看到了如何在Kafka中卸载Docker。但是,如果您对Kafka-docker有任何疑问,请随时通过评论部分询问。
另请参阅 - 
Kafka Connect 
供参考

使用Docker运行TFS

使用Docker运行TFS

我一直在阅读很多关于Docker及其用途的内容.目前,我们正在使用TFS构建和部署我们的内部应用程序(.net c#).过渡到Docker有什么好处吗?设置的意义是在TFS运行构建之后,它将部署到容器中吗?

目前除了做一堆手动步骤之外,没有简单的方法来运行构建:How to: Build Team Projects on a Desktop.

>你能在Windows Server上运行docker吗?
>我们能够使用docker设置我们的虚拟机,以便我们可以在本地部署/模仿部署过程(到我们的虚拟机)吗?
>为我们的生产环境设置相同的流程?

最佳答案
是的,您可以在Windows Server上运行docker,但它现在无法在Windows上本机运行.

Because Docker relies on Linux-specific features,you can’t run Docker
natively in Windows. Instead,you must install the Docker ToolBox
application. The application installs a VirtualBox Virtual Machine
(VM),Docker itself,and the Docker ToolBox management tool. These
three things allow you to run Docker on Windows.

有关使用docker进行部署的详细信息,请参阅此链接:http://www.colinsalmcorner.com/post/continuous-deployment-with-docker-and-build-vnext

使用Docker运行构建过程

使用Docker运行构建过程

我正在使用docker和docker-compose设置构建管道.我有一个用javascript编写的前端,需要在使用前进行构建.后端是用go编写的.

为了使该组件与我们的docker-compose设置的其余部分集成,我也想在docker映像中进行构建.

这是我要执行的流程:

>在构建期间执行:

>构建前端的东西,并将其放在/ output(绑定到
输出量
>构建后端服务器

>运行时执行:

>运行服务器,它可以访问/ output中的构建文件

我对docker和docker-compose非常陌生,所以我不确定这是否可行,甚至不确定正确的做法.

供参考,这是我的docker-compose.yml:

version: '2'
volumes:
  output:
    driver: local

services:
  frontend:
    build: .
    volumes:
      - output:/output
  backend:
    build: ./backend
    depends_on:
      - frontend
    volumes:
      - output:/output

和Dockerfile:

FROM node

# create working dir
RUN mkdir -p /usr/src/app
workdir /usr/src/app
ADD package.json /usr/src/app/package.json

# install packages
RUN npm install
copY . /usr/src/app

# build frontend files and place results in /output 
RUN npm build
RUN cp /usr/src/app/build/* /output

和后端/ Dockerfile:

 FROM go

 # copy and build server
 copY . /usr/src/backend
 workdir /usr/src/backend
 RUN go build

 # run the server
 ENTRYPOINT ["/usr/src/backend/main"]

这里出了点问题,但我不知道是什么.似乎构建步骤的输出没有保留在输出卷中.我该怎么做才能解决此问题?

最佳答案
您无法在Docker构建期间附加卷.
这样做的原因是docker build命令的目标是构建映像,除此之外,它不需要卷,因为Dockerfile具有ADD / copY.

为了产生输出,您应该创建一个脚本,该脚本主要由npm安装; npm构建;从当前dockerfile cp /usr/src / app / build / * / output并使用此脚本作为dockerfile中的入口点/ cmd.

我不确定compose是否可以运行此命令,但是无论如何,我发现它被包装在shell脚本中更为清晰,该脚本首先执行前端构建器容器,然后以输出目录作为卷执行后端容器.

关于智汀家庭云-快速入门:使用Docker运行的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于docker 一小时快速入门之利用docker安装Redis、Kafka-Docker:使用Docker运行Apache Kafka的步骤、使用Docker运行TFS、使用Docker运行构建过程的相关信息,请在本站寻找。

本文标签: