这篇文章详细介绍了如何在 Docker 容器中部署和运行 nsq 二进制文件。
有一个单一的、最小化的 nsq 镜像,其中包含所有 NSQ 二进制文件。可以通过在运行 Docker 时指定二进制文件作为命令来运行每个二进制文件。基本格式为:
docker run nsqio/nsq /<command>
注意命令前的 /。例如:
docker run nsqio/nsq /nsq_to_file
docker pull nsqio/nsq
docker run --name lookupd -p 4160:4160 -p 4161:4161 nsqio/nsq /nsqlookupd
首先,获取 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 可用。
要在容器化的 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 容器中,用于运行时。
要将 nsqd 数据存储在宿主机磁盘上,请使用 /data 卷作为数据目录,这允许您挂载到 仅数据 Docker 容器 或挂载到宿主机目录:
docker run nsqio/nsq /nsqd \
--data-path=/data
要使用 docker-compose 同时启动 nsqd、nsqlookupd 和 nsqadmin,请创建一个 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