Docker

这篇文章详细介绍了如何在 Docker 容器中部署和运行 nsq 二进制文件。

有一个单一的、最小化的 nsq 镜像,其中包含所有 NSQ 二进制文件。可以通过在运行 Docker 时指定二进制文件作为命令来运行每个二进制文件。基本格式为:

docker run nsqio/nsq /<command>

注意命令前的 /。例如:

docker run nsqio/nsq /nsq_to_file

链接

运行 nsqlookupd

docker pull nsqio/nsq
docker run --name lookupd -p 4160:4160 -p 4161:4161 nsqio/nsq /nsqlookupd

运行 nsqd

首先,获取 Docker 主机的 IP:

ifconfig | grep addr

其次,运行 nsqd 容器:

docker pull nsqio/nsq
docker run --name nsqd -p 4150:4150 -p 4151:4151 \
    nsqio/nsq /nsqd \
    --broadcast-address=<host> \
    --lookupd-tcp-address=<host>:<port>

--lookupd-tcp-address 标志设置为之前运行的 nsqlookupd 的主机 IP 和 TCP 端口,即 dockerIP:4160

例如,给定主机 IP 为 172.17.42.1

docker run --name nsqd -p 4150:4150 -p 4151:4151 \
    nsqio/nsq /nsqd \
    --broadcast-address=172.17.42.1 \
    --lookupd-tcp-address=172.17.42.1:4160

注意,这使用了端口 4160,这是启动 nsqlookupd 容器时暴露的端口(这也恰好是 nsqlookupd 的默认端口)。

如果要使用非默认端口,请更改 -p 参数:

docker run --name nsqlookupd -p 5160:4160 -p 5161:4161 nsqio/nsq /nsqlookupd

这将使 nsqlookupd 在 Docker 主机的 IP 上通过端口 5160 和 5161 可用。

使用 TLS

要在容器化的 NSQ 二进制文件中使用 TLS,您需要包含证书文件、私钥和根 CA 文件。Docker 镜像有一个卷挂载点可用,位于 /etc/ssl/certs/,用于此目的。将包含这些文件的宿主机目录挂载到该卷,然后像往常一样在命令行中指定文件:

docker run -p 4150:4150 -p 4151:4151 -p 4152:4152 -v /home/docker/certs:/etc/ssl/certs \
    nsqio/nsq /nsqd \
    --tls-root-ca-file=/etc/ssl/certs/certs.crt \
    --tls-cert=/etc/ssl/certs/cert.pem \
    --tls-key=/etc/ssl/certs/key.pem \
    --tls-required=true \
    --tls-client-auth-policy=require-verify

这将从 /home/docker/certs 加载证书到 Docker 容器中,用于运行时。

持久化 NSQ 数据

要将 nsqd 数据存储在宿主机磁盘上,请使用 /data 卷作为数据目录,这允许您挂载到 仅数据 Docker 容器 或挂载到宿主机目录:

docker run nsqio/nsq /nsqd \
    --data-path=/data

使用 docker-compose

要使用 docker-compose 同时启动 nsqdnsqlookupdnsqadmin,请创建一个 docker-compose.yml

version: '3'
services:
  nsqlookupd:
    image: nsqio/nsq
    command: /nsqlookupd
    ports:
      - "4160"
      - "4161"
  nsqd:
    image: nsqio/nsq
    command: /nsqd --lookupd-tcp-address=nsqlookupd:4160
    depends_on:
      - nsqlookupd
    ports:
      - "4150"
      - "4151"
  nsqadmin:
    image: nsqio/nsq
    command: /nsqadmin --lookupd-http-address=nsqlookupd:4161
    depends_on:
      - nsqlookupd  
    ports:
      - "4171"

要启动,请从之前创建的 docker-compose.yml 所在目录运行以下命令。

docker-compose up -d

将创建一个私有网络,并使用该私有网络启动三个容器。在本地主机上,每个容器将有一个随机端口映射到 docker-compose.yml 中暴露的端口。

查看运行中容器的状态和映射端口。

docker-compose ps

查看运行中容器的日志。

docker-compose logs

假设 nsqlookupd 的主机端口 31001 映射到容器端口 4161,可以使用 curl 执行简单的 ping。

curl http://127.0.0.1:31001/ping