type
status
date
slug
summary
tags
category
password

简介

使用原则

  1. 要明确版本,不能用latest,方便后期管理
  1. 尽量把目录挂在出来,下面的操作有都有一个预启动的过程,把目录挂载出来后,再把预启动的容器删掉,再使用挂载目录的启动命令。
  1. 尽量不要使用默认的网络,而是使用本地网桥进行通讯

安装步骤

以安装 nginx 为例
  1. 拉取镜像。
  1. 临时启动一个实例,只是为了复制出配置。
  1. 将容器内的配置文件拷贝到指定目录。使用格式是 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
💡
注意:
  • SRC_PATH 不以 /. 结尾,源目录(包括源目录本身)整个拷贝到目标目录
  • SRC_PATH/. 结尾,只把源目录下的内容(不包括源目录本身)整个拷贝到目标目录
docker cp 命令的使用规则参考 docker cp
  1. 停止临时容器。
  1. 删除临时容器
  1. 使用带挂载目录的参数启动容器。
  1. 下次手动启动
  1. 打开/关闭开机自启动
  1. 进入容器

本地网桥

本地网桥用于本地容器间可以通过127.0.0.1的地址进行通信。
1、创建网桥
2、查看网桥
这里可以看到 local-bridge 网桥已经被创建好
3、查看网桥的具体信息

查看启动命令

查看容器启动的 docker run 命令需要借助第三方工具,这里推荐使用 runlike
安装步骤
用法如下。-p 可以将命令行分解为漂亮的行。
例如

解决找不到文件的错误

Docker 容器启动,有时候会报找不到文件的错误
解决办法:在 docker run 命令后加一个 --privileged 参数。该参数可以让容器内的 root 用户具备拥有真正的 root 权限。未加参数时,容器启动用户未获取到 root 权限,无法读取 root 用户创建的文件,加上 --privileged 后就拥有了对应文件的读写权限。

Mysql

拉取镜像

临时启动

挂载目录

启动

Mysql 默认是没有配置文件的,在 /mydata/mysql8/conf 下新建 my.cnf 文件
输入以下内容
然后重启 Mysql ,配置文件才会生效

Redis

拉取镜像

挂载目录

redis 默认是没有配置文件的,需要手动创建 redis.conf 文件。如果没有创建,执行启动命令的时候 Docker 会将 redis.conf 作为目录创建。
然后修改 redis.conf ,有几个关键配置项需要修改。

启动

使用以下命令进入容器内部并使用Redis命令行客户端测试

Zookeeper

拉取镜像

临时启动

挂载目录

启动

Kafka

💡
注意启动 kafka 之前必须先启动 zookeeper

拉取镜像

注意:
  • 2.7.2 之前的版本需要 zookeeper,之后的版本去 zk 化,有大量的兼容性逻辑,所以如果还需要 zookeeper 的话,2.7.2 是最后一个稳定版本。
  • 如果是 ARM 平台(苹果 M 系列芯片),使用以下命令 docker pull wurstmeister/kafka:2.13-2.7.2 --platform linux/arm64

临时启动

挂载目录

注意这一步还没有外挂数据目录,因为数据目录是在 server.properties 配置文件里面设置的。修改 server.properties 配置文件。
设置 log.dirs
创建数据目录

删除元数据

在删除 Kafka 临时容器之后,同时需要删除 Zookeeper 中的元数据。常见元数据如下所示:
节点路径
描述
删除必要性
/brokers
存储KafkaBroker信息、主题和分区详情
必须删除
/config
存储主题和客户端的配置信息
建议删除
/admin
存储删除主题的请求记录 (如delete_topics)
建议删除
/consumers
存储旧版本消费者(Zookeeper Consumer)的位移等信息
若使用旧消费者则需检查
/cluster
存储集群ID等信息
可选删除
/controller
记录当前控制器的Broker ID
必须删除
/controller_epoch
记录控制器选举的次数
必须删除
连接到 Zookeeper 节点,执行以下命令

启动

常用环境变量如下:
  • KAFKA_BROKER_ID: A unique ID for the instance. default 1
  • KAFKA_PORT: The port the Kafka broker listener will listen on. default 9092
  • KAFKA_PROTOCOL: The protocol used for the listeners. default PLAINTEXT
  • KAFKA_LISTENERS: The hostname and port the Kafka broker will listen on. default ${KAFKA_PROTOCOL}://0.0.0.0:${KAFKA_PORT}
  • KAFKA_ADVERTISED_LISTENERS: The hostname and port the Kafka broker will advertise to producers and consumers. default ${KAFKA_PROTOCOL}://localhost:${KAFKA_PORT}
  • ZOOKEEPER_HOSTS: A comma separated string of ZooKeeper hosts that Kafka will use for cluster orchestration.
实测发现这个版本的 kafka 启动参数如果不加上 -e KAFKA_LOG_DIRS=/kafka/data ,在 kafka 启动之后,server.properties 里面的 log.dirs 属性会重置为一个默认值,类似于 log.dirs=/kafka/kafka-logs-100d69ff42ae
要安装kafka集群的话就需要考虑网络问题了,可以使用以下命令
重点关注 KAFKA_LISTENERSKAFKA_ADVERTISED_LISTENERS 这两个变量,简单来说
  • KAFKA_LISTENERS 指明 Kafka 当前节点监听本机的哪个网卡,0.0.0.0 表示本地所有 ip4 地址,相当于本机地址,注意不要使用 127.0.0.1 或者 localhost
  • KAFKA_ADVERTISED_LISTENERS 指明客户端通过哪个 ip 可以访问到当前节点,一般使用宿主机 ip。
如果需要开启 JMX 监控,例如搭配 Eagle 等监控工具使用,需要设置变量 JMX_PORTKAFKA_JVM_PERFORMANCE_OPTS,并开启监控端口映射。
如果想使用 Kafka 内置的命令工具,执行以下命令

Rocketmq

拉取镜像

注意:
  • 如果是 ARM 平台(苹果 M 系列芯片),使用以下命令
    • docker pull apache/rocketmq:5.3.1 --platform linux/arm64
    • docker pull candice0630/rocketmq-console-ng:2.0

临时启动

启动 nameserver
启动 broker

挂载目录

主目录是/home/rocketmq/rocketmq-4.9.4/

启动

启动 nameserver
启动 broker
启动 console(可选)
访问地址 http://locahost:8080。
注意:
  • Broker 的创建参数 -e 参数如果使用 NameServer 的容器名称 rocketmq-namesrv,Broker 在启动时会向 NameServer 注册自己的地址。在 Docker 中,如果未明确配置,Broker 默认会使用容器的内部 IP(如 172.17.0.x)进行注册。外部服务(包括宿主机上的其他服务) 从 NameServer 获取到这个内部IP后,无法直接连接。
  • 解决方案是 -e 参数使用本地的 IP(例如192.168.50.105:9876)。另外还要修改 broker.conf,增加
    • namesrvAddr:指向你的 NameServer。如果 Broker 容器和 NameServer 容器通过Docker网络(如自定义桥接网络)通信,这里可以写 NameServer 的容器名和端口(例如 rmqnamesrv:9876)。如果从外部连接,则需要写宿主机的 IP。
    • brokerIP1必须设置为宿主机在局域网内的IP地址(如 192.168.1.100),或者公网IP(如果你希望公网访问)。切勿使用 127.0.0.1 或 localhost

Nginx

拉取镜像

临时启动

挂载目录

启动

Apache

拉取镜像

挂载目录

启动

Elasticsearch

拉取镜像

临时启动

挂载目录

v8 之后默认开启 x-pack 的安全功能,访问地址 http://localhost:9200 会报错,需要手动关闭。修改 /data/elasticsearch/config/elasticsearch.yml

启动

如果以集群模式启动,不要加 -e "discovery.type=single-node" \
访问地址 http://localhost:9200,返回以下内容表示安装成功

Kibana

拉取镜像

临时启动

挂载目录

启动

访问地址:http://localhost:5601
注意如果没有关闭 es 的安全性校验,在第一次登录的时候会提示输入 enrollment token。
enrollment token 在第一个 Elasticsearch 启动后的有效时间为30分钟。超过30分钟的时间上述 token 将会无效。enrollment token 分两个,一个是 Kibana 连接 Elasticsearch 使用的,另一个是 Elasticsearch 加入集群使用的

Nacos

拉取镜像

  • 如果是 ARM 平台(苹果 M 系列芯片),使用以下命令 docker pull nacos/nacos-server:v2.4.3 --platform linux/arm64

临时启动

挂载目录

启动

持久化

上面模式在 docker 容器停止后,nacos 配置的数据会丢失。下面将数据保存到 mysql 数据库中。注意只保存配置中心的数据,不保存注册中心的数据。
  1. 创建一个 nacos_config 数据库
  1. 在 Nacos 的conf目录下找到mysql-schema.sql(针对Nacos 2.x版本),然后执行该 sql 脚本。
然后执行命令

Seata

拉取镜像

临时启动

挂载目录

启动

Skywalking

skywalking 的安装分为两部分:
  • SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
  • SkyWalking UI :负责提供控台,查看链路等等。
这里涉及到三个端口
  • 11800 端口:gPRC 默认监听的服务端口
  • 12800 端口:HTTP 默认监听的端口
  • 8080 端口:SkyWalking UI 应用默认监听的端口

安装 SkyWalking OAP

SkyWalking OAP 默认使用 H2 内存数据库存储,这里使用 elasticsearch 作为数据存储。

安装 SkyWalking UI

然后访问 http://127.0.0.1:8080 访问 skywalking 控制台。
客户端要接入 skywalking 监控,还需要另外下载 agent 包,解压到目录之后,使用以下命令启动客户端。
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar yourApp.jar

Mongodb

拉取镜像

挂载目录

创建目录
创建 mongod.conf 配置文件
mongod.conf 配置文件内容
创建 mongod.log 文件

启动

客户端连接

客户端连接可以选择:
  • MongoDB Shell:命令行工具,MongoDB Server 内部已经内置,也可以单独下载
  • MongoDB Compass:GUI 界面
以 MongoDB Shell 为例,可以使用 mongo 命令来连接数据库,有下面两种写法,效果一致
推荐第二种写法,mongo 的 bin 目录下还有 mongostatmongotop 等监控命令,用法和 mongo 命令一致
如果想使用 Docker 容器里面的 MongoDB Shell,执行以下命令
mongodb url 标准语法
选项
说明
mongodb://
这是固定的格式,必须要指定
username:password@
可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
host
必须的指定至少一个host,它指定了要连接服务器的地址如果要连接集群,请指定多个主机地址
port
可选的指定端口,如果不填,默认为27017
/database
如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库
?options
是连接选项。如果不使用/database,则前面需要加上/所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开
使用用户名 yufei,密码 123abc32q 登录 localhost 的 twle 数据库
连接到本地集群,三台服务器端口为 27017, 27018, 27019

Etcd

拉取镜像

启动

计算机网络系列(一):基础篇Docker系列:Docker Compose
Loading...