目录
01. Docker使用导航
03. 理解容器
04. 安装 Docker
05. Docker 样例(常见命令使用)
下载镜像
启动容器
修改页面
保存镜像
docker commit
docker save
docker load
分享社区
docker login
docker tag
docker push
来到 web 主页查看推送
06. Docker 存储
目录挂载
卷映射
docker volume ls
docker volume create 数据卷名
docker volume inspect 数据卷名
07. Docker 网络
ip -a 就可以看到docker的默认网络
docker [container] inspect app1 查看app1这个容器的细节
自定义docker网络
08. Redis 主从同步集群
run master
run slave
09. Docker Compose 批量管理容器
样例
以前的做法
现在的做法
测试 Docker Compose 常用功能
docker compose up p-d
docker compose down
down 同时移除 镜像 和 数据卷
10. Dockerfile 构建自定义镜像
基本知识
Dockerfile 常见指令
构建自定义镜像
11. Dockerfile 镜像分层机制
举例
可以用 docker image history 镜像名 查看历史信息
也可以用 docker image inspect 镜像名 查看 Layers(层级信息)
镜像和容器的关系
docker ps -s
12. 安装常见中间件
yaml
启动
13. 常见中间件访问测试
14. 总结图
博主wx:yuanlai45_csdn 博主qq:2777137742
后期会创建粉丝群,为同学们提供分享交流平台以及提供官方发送的福利奖品~
01. Docker使用导航
hub.docker.com
port # 查看映射端口对应的容器内部源端口
pause # 暂停容器
ps # 猎户容器列表
pull # 从docker镜像源服务器拉取指定镜像或者库镜像
push # 推送指定镜像或者库镜像至docker源服务器
restart # 重启运行的容器
rm # 移除一个或多个容器
rmi # 移除一个或多个镜像 (无容器使用该镜像才可删除,否则需要删除相关容器才可继续或 -f 强制删除)
run # 创建一个新的容器并运行一个命令
save # 保存一个镜像为一个 tar 包【对应 load】
search # 在 docker hub 中搜索镜像
start # 启动容器
stop # 停止容器
tag # 给源中镜像打标签
top # 查看容器中运行的进程信息
unpause # 取消暂停容器
version # 查看 docker版本号
wait # 截取容器停止时的退出状态值
02. Build Share Run 样例
03. 理解容器
04. 安装 Docker
上面的不用执行官网的,换一下:
也是按下面的整,顺便配置国内的 docker hub 镜像源地址
05. Docker 样例(常见命令使用)
下载镜像
下载特定版本的镜像的话推荐去网站搜索:
启动容器
docker ps -a 就可以查看已经停了的容器信息
docker run -d(后台启动) --name(给启动的容器一个名字不然是随机) mynginx nginx
但是还是无法公网访问(业因为启动的容器是运行在自己的环境内),解决(端口映射):
PS:88不可以重复(公网的),80可以(每个小容器的)
修改页面
需要用到 docker exec 进入到 ngin 的那个容器里面,在那个容器里面有一个文件路径:
/user/share/nginx/html
nginx的默认页就在那里面存着的(nginx的文档告诉的)
命令:
docker exec -it(交互模式) mynginx /bin/bash(使用bash控制台模式交互)
但是容器为了保持他的轻量级,容器纯净到 vi 都没有,所以想要修改页面只能:
但是这样太麻烦了,后面会讲一个简单的事情,就是 docker 的存储去把内部的一个文件夹,直接映射到我们外部主机的一个位置,以后直接在我们主机位置改,内部也会发生变(数据卷)
保存镜像
docker commit
可以把整个容器以及他的变化打包成一个新的镜像
docker save
把这个文件保存为一个tar包
docker load
加载完了就可以 docker run 运行了
分享社区
分析到官方的 docker hub 仓库
先登录到 docker hub 网站,然后按照要求起一个名字,然后推送上去
docker login
docker tag
就是新做(copy && rename)了一个镜像,为了上传到 docker hub
docker hub 为了区分,每一个镜像名都是用户名加上镜像名
虽然镜像名不一样但是镜像id是一样的说明还是同一个镜像
docker push
来到 web 主页查看推送
06. Docker 存储
对于运行的容器,如果运行期间崩溃,那么我们如果删掉整个容器重新运行的话,之前的数据就会丢失,而且平时修改也十分不方便,但是为了解决这种情况,就有了 容器挂载,就相当于在外面插了一个U盘,修改容器内的数据或者外面的数据都是双方同步且可见的,同时起到了保存数据的作用
目录挂载
启动命令
/app/nghtml 就是外部linux主机的目录对应容器的/usr/share/nginx/html 外部linux没有的话还会自动创建这个目录(挂载目录和文件都是可以的,但是要对应)
如果这个时候容器崩溃我们把容器删除之后,重新用相同的命令启动,结果依旧和之前是一样的,就是可以说,我们把配置保存到了linux服务器上面,避免了数据丢失
卷映射
但是对于上面的目录挂载,有些情况是不满足需求的,比如我们现在执行一个nginx容器,我们想要很方便修改他的/etc/nginx配置文件,想到的办法可能是在用 目录挂载 的方式在外部进行挂载,但是如果这样做,外面的目录是默认为空目录,再去执行容器就会报错(配置文件数据丢失)
所以我们现在需要的是,在容器启动的时候,外部挂载容器内目录的同时,同时同步数据,那么就要用到我们的 数据卷 了
目录挂载和卷映射写法差不多,区别就是目录挂载是以 ./ 或者 / 开头,而卷映射是直接创建了一个 卷名 为某某的 数据卷,而且 docker 会自动为他创建一个存储位置(docker统一放到了 /var/lib/docker/volume/<volume-name>),去把容器内部的内容在容器初始启动的时候就保持同步(目录挂载是 外面->(映射)里面 数据卷是 里面->(映射)外面)
docker volume ls
docker volume create 数据卷名
docker volume inspect 数据卷名
07. Docker 网络
掌握 docker 网络机制,可以轻松构建集群
先举一个样例,现在有两个容器启动了,如何让这两个容器进行数据交互呢?
curl http://ip:port 去访问,但是这样访问有一点奇怪
奇怪的原因就是 app1 是通过外部机器的 ip 加上 app2 在这个机器提供的端口进行访问的,也就是说app1访问app2会先跳出这个容器,通过外界的网络来到这个机器,再通过这个机器来到app2的端口再访问内部的数据,这样确实奇怪(明明很近但是绕了远路)
docker考虑到了这个,他有一个机制,就是每一个应用启动的时候,都会加入一个docker的默认网络,叫 docker0 ,在安装docker的时候就有了这个网络:
ip -a 就可以看到docker的默认网络
然后docker每启动的一个应用都相当于添加了docker0这个网络环境,而且每个应用docker都会为他再分配ip
docker [container] inspect app1 查看app1这个容器的细节
也就是说这些容器再在内部就有一个默认网络,内部之间大家用容器的ip就可以互相访问
bash:
docker exec -it app1 bash
curl http://172.17.0.3:80 (这里就要注意了,虽然app2对外提供的是99端口,但是我们这次并不是通过外部提供的端口访问的,而是直接用容器内部的应用端口就可以直接访问了)(这里就是app1通过容器内app2的ip地址加上他的应用端口就直接访问到了app2)
自定义docker网络
但是这种通过容器ip访问也有缺点,比如容器迁移或者删了,重启等,我们希望有一个稳定的访问方式去访问,那就是用 域名 去访问,docker就提供了自定义网络的机制,默认docker0不支持主机域名的方式去访问的,需要我们创建一个自定义网络,比如 mynet,以后让启动的容器加入到这个自定义网络,接下来容器的名字就可以当作主机的域名,作为一个稳定的访问地址
然后我们再启动两个容器
然后现在容器内部网络访问我们就可以直接域名加上容器应用端口访问了
08. Redis 主从同步集群
我们使用 docker 启动一个 redis 的主从同步集群,redis 是一个存储 kv 的数据库,在开发期间通常用来做缓存
我们现在有两个 redis ,一个主redis master,一个从redis slave,slave需要去同步master的数据,然后我们来实现读写分离,写请求教给master主机,所有的读请求,都交给slave从机
实现这样的效果我们就需要先把两个容器放到同一个网络mynet,第一个容器启用占用6379端口,外部提供6379,第二个启用6379端口,占用外部的6380,为了数据不丢失,还可以把保存redis数据的的目录/bitnami/redis/data挂载到机器外面/app/rd1,两个都保存,然后做一些参数设置,才可以让redis2同步redis1的数据,因为默认启动的两个redis实例是独立的
主机和从机的配置
通过这样的设置从机就知道主机的位置以及端口和密码,以后主机有什么样的数据变化,从机就能跟他同步上,这些参数设置项,并不是redis官方提供的设置项,我们是使用的redis镜像不是官方镜像,而是bitnami提供的镜像
他提供的redis镜像,所有的配置不用修改配置文件只要定义一些环境变量就可以了
run master
如果启动失败可能是linux下/app/rd1文件权限问题,chmod改一下
run slave
09. Docker Compose 批量管理容器
Docker Compose 是 docker 批量管理容器的工具
如何使用:首先需要准备一个 .yaml 文件,然后把所有要启动容器的配置都写到这个里面,就可以用 docker compose 命令将这个文件中指定的所有容器全部批量的启动停止或者删除,比如:
上线:第一次上线并启动
下线:移除之前创建的容器以及相关的资源
启动:之前已经上线过了,但是停了又重新运行
也就是说有了compose.yaml 这个文件以后,docker compose 命令就可以根据这个文件批量管理这些容器
样例
我们来启动一个 wordpress 一个开源的博客系统,所有的博客内容会存到 mysql 数据库里面
以前的做法
先创建一个blog网络 docker network create blog
然后启动两个容器
但是如果是这样做,假设要在一台新的机器去安装 wordpress,要一次安装这两个
还要记住以前的 docker run 命令,去来运行会比较麻烦,所以我们直接编写 compose.yaml 文件,在这个文件里面一次性把要启动的所有应用全部写好,在本机使用 docker compose 命令一键启动,就算我们要迁移机器,只需要把 compose.yaml 文件交给对方,对方也可以使用 docker compose 一键启动
现在的做法
具体 compose.yaml 文件的语法可以参考:hrrps://docs.docker.com/compose/compose-file
注意如果是用到了数据卷,就需要在顶级元素 volumes 声明一下
测试 Docker Compose 常用功能
比如修改了 compose.yaml 文件
docker compose up p-d
-f 是指定的文件
docker compose down
down 会移除我们启动的所有容器以及网络,但是为了安全并不会移除我们之前的数据卷,这样我们在下次重新启动的时候数据也不会丢失
down 同时移除 镜像 和 数据卷
10. Dockerfile 构建自定义镜像
可以把自己的软件制作一个镜像
基本知识
比如我现在用 java 编写了一个应用,并把它打包成 app.jar,想要把这个java包制作成一个镜像,分享给别的机器快速启动。此时就需要编写一个 Dockerfile,在 Dockerfile 里面编写制作镜像的指令,让然后 docker 的 Build 构建器,就会根据 Dockerfile 里面制作镜像的指令,拿着这个软件包,制作成一个镜像,而这个镜像就最起码包含这个软件包运行的基础环境,比如Ubuntu什么系统,比如什么样的java环境,其次镜像里面要包含软件包和这个软件包的启动命令
Dockerfile 常见指令
详细可见:https://docs.docker.com/reference/dockerfile/
FORM:直接下载需要的系统或者java环境
COPY app.jar /app.jar:把dockerfile同目录下的 app.jar 放到镜像的 分目录下的app.jar文件里面,至此软件包就放到了镜像的系统里面(大家要把一个镜像就当作一个新的操作系统一样)
ENTRYPOINT:去指定镜像的启动命令
构建自定义镜像
然后执行:
docker build -f Dockerfile -t myjavaapp:v1.0 .
-f 就是 --file 哪个文件,-t 就是 --tag 构建镜像的镜像名是什么,最后还跟了一个 . ,这个 . 就是 ./,代表我们构建的整个上下文目录就是当前目录,这个目录层级非常重要,因为当前目录下就有一个 app.jar,所以上面的 build 命令才会运行成功
然后我们就可以去用这个镜像去启动一个容器
11. Dockerfile 镜像分层机制
Docker 在底层存储一个镜像是分层存储的,而这些层产生于编写的 dockerfile 文件,当构建器 Build 利用这些dockerfile文件帮你构建一个镜像的时候,因为文件里面编写了非常多的指令,每行指令都可能下载或者更改文件系统的一些东西,所以每一行指令就会产生一个存储层,这个指令引起的内容变化就存到他这一层里面,这样做的好处就可以减轻存储压力
举例
当两个应用依赖有相同的资源时,就可以只需要一份,这就是分层存储的好处,可以共用相同的底层,只需要存储自己增量的部分
对于之前只更改的首页,看着是这两个镜像各占188M,其实是总共占188M+几kb,因为只要html那里改变
可以用 docker image history 镜像名 查看历史信息
也可以用 docker image inspect 镜像名 查看 Layers(层级信息)
只多了这一层,这一层就是我们修改的页面,其他的都是一样的也就是说是共用的
镜像和容器的关系
假设我们要启动一个容器,这个容器是基于某个镜像的,而这个镜像在整个磁盘里面已经存储了,整个镜像存储的内容我们称为镜像层,这层是R/O只读的,而如果我们的容器按照这个镜像启动了,容器要对这个镜像里面的内容有所修改,容器要单独开一层存储,这一层是R/W可读可写层,容器将所有的修改都放到这一层里面,这样就会导致一个效果,为什么容器删掉数据就丢了,因为容器把所有的数据都写到了自己层,容器一删,读写层就丢了,但是镜像只要不删,他的基础数据还在磁盘里面
如果是一个镜像启动了多个容器,那么每一个容器都有自己的存储层互不相干,这也是容器隔离机制的一种,同样容器删了他的读写层也就删了,这就是为什么我们在容器启动期间修改的数据推荐挂载到外面,这样容器删掉以后外面的数据依旧还在,数据就不会丢失
docker ps -s
这个前面的 kb 那个就是这个容器自己的读写层,只占了这么一点kb,如果写入操作增加这个就会增加,后面的是说他的镜像占了多少MB,在磁盘里面存着
12. 安装常见中间件
一个 compose.yaml 一键启动
这个脚本和指令集是用于修改Linux系统的内存管理配置,以达到优化性能的目的
#Disable memory paging and swapping performance
sudo swapoff -a# Edit the sysctl config file
sudo vi /etc/sysctl.conf# Add a line to define the desired value
# or change the value if the key exists,
# and then save your changes.
vm.max_map_count=262144# Reload the kernel parameters using sysctl
sudo sysctl -p# Verify that the change was applied by checking the value
cat /proc/sys/vm/max_map_count
yaml
注意:
- 将下面文件中
kafka
的119.45.147.122
改为你自己的服务器IP。 - 所有容器都做了时间同步,这样容器的时间和linux主机的时间就一致了
准备一个 compose.yaml
文件,内容如下:
name: devsoft
services:redis:image: bitnami/redis:latestrestart: alwayscontainer_name: redisenvironment:- REDIS_PASSWORD=123456ports:- '6379:6379'volumes:- redis-data:/bitnami/redis/data- redis-conf:/opt/bitnami/redis/mounted-etc- /etc/localtime:/etc/localtime:romysql:image: mysql:8.0.31restart: alwayscontainer_name: mysqlenvironment:- MYSQL_ROOT_PASSWORD=123456ports:- '3306:3306'- '33060:33060'volumes:- mysql-conf:/etc/mysql/conf.d- mysql-data:/var/lib/mysql- /etc/localtime:/etc/localtime:rorabbit:image: rabbitmq:3-managementrestart: alwayscontainer_name: rabbitmqports:- "5672:5672"- "15672:15672"environment:- RABBITMQ_DEFAULT_USER=rabbit- RABBITMQ_DEFAULT_PASS=rabbit- RABBITMQ_DEFAULT_VHOST=devvolumes:- rabbit-data:/var/lib/rabbitmq- rabbit-app:/etc/rabbitmq- /etc/localtime:/etc/localtime:roopensearch-node1:image: opensearchproject/opensearch:2.13.0container_name: opensearch-node1environment:- cluster.name=opensearch-cluster # Name the cluster- node.name=opensearch-node1 # Name the node that will run in this container- discovery.seed_hosts=opensearch-node1,opensearch-node2 # Nodes to look for when discovering the cluster- cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 # Nodes eligibile to serve as cluster manager- bootstrap.memory_lock=true # Disable JVM heap memory swapping- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Set min and max JVM heap sizes to at least 50% of system RAM- "DISABLE_INSTALL_DEMO_CONFIG=true" # Prevents execution of bundled demo script which installs demo certificates and security configurations to OpenSearch- "DISABLE_SECURITY_PLUGIN=true" # Disables Security pluginulimits:memlock:soft: -1 # Set memlock to unlimited (no soft or hard limit)hard: -1nofile:soft: 65536 # Maximum number of open files for the opensearch user - set to at least 65536hard: 65536volumes:- opensearch-data1:/usr/share/opensearch/data # Creates volume called opensearch-data1 and mounts it to the container- /etc/localtime:/etc/localtime:roports:- 9200:9200 # REST API- 9600:9600 # Performance Analyzeropensearch-node2:image: opensearchproject/opensearch:2.13.0container_name: opensearch-node2environment:- cluster.name=opensearch-cluster # Name the cluster- node.name=opensearch-node2 # Name the node that will run in this container- discovery.seed_hosts=opensearch-node1,opensearch-node2 # Nodes to look for when discovering the cluster- cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 # Nodes eligibile to serve as cluster manager- bootstrap.memory_lock=true # Disable JVM heap memory swapping- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Set min and max JVM heap sizes to at least 50% of system RAM- "DISABLE_INSTALL_DEMO_CONFIG=true" # Prevents execution of bundled demo script which installs demo certificates and security configurations to OpenSearch- "DISABLE_SECURITY_PLUGIN=true" # Disables Security pluginulimits:memlock:soft: -1 # Set memlock to unlimited (no soft or hard limit)hard: -1nofile:soft: 65536 # Maximum number of open files for the opensearch user - set to at least 65536hard: 65536volumes:- /etc/localtime:/etc/localtime:ro- opensearch-data2:/usr/share/opensearch/data # Creates volume called opensearch-data2 and mounts it to the containeropensearch-dashboards:image: opensearchproject/opensearch-dashboards:2.13.0container_name: opensearch-dashboardsports:- 5601:5601 # Map host port 5601 to container port 5601expose:- "5601" # Expose port 5601 for web access to OpenSearch Dashboardsenvironment:- 'OPENSEARCH_HOSTS=["http://opensearch-node1:9200","http://opensearch-node2:9200"]'- "DISABLE_SECURITY_DASHBOARDS_PLUGIN=true" # disables security dashboards plugin in OpenSearch Dashboardsvolumes:- /etc/localtime:/etc/localtime:rozookeeper:image: bitnami/zookeeper:3.9container_name: zookeeperrestart: alwaysports:- "2181:2181"volumes:- "zookeeper_data:/bitnami"- /etc/localtime:/etc/localtime:roenvironment:- ALLOW_ANONYMOUS_LOGIN=yeskafka:image: 'bitnami/kafka:3.4'container_name: kafkarestart: alwayshostname: kafkaports:- '9092:9092'- '9094:9094'environment:- KAFKA_CFG_NODE_ID=0- KAFKA_CFG_PROCESS_ROLES=controller,broker- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://0.0.0.0:9094- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://119.45.147.122:9094- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER- ALLOW_PLAINTEXT_LISTENER=yes- "KAFKA_HEAP_OPTS=-Xmx512m -Xms512m"volumes:- kafka-conf:/bitnami/kafka/config- kafka-data:/bitnami/kafka/data- /etc/localtime:/etc/localtime:rokafka-ui:container_name: kafka-uiimage: provectuslabs/kafka-ui:latestrestart: alwaysports:- 8080:8080environment:DYNAMIC_CONFIG_ENABLED: trueKAFKA_CLUSTERS_0_NAME: kafka-devKAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092volumes:- kafkaui-app:/etc/kafkaui- /etc/localtime:/etc/localtime:ronacos:image: nacos/nacos-server:v2.3.1container_name: nacosports:- 8848:8848- 9848:9848environment:- PREFER_HOST_MODE=hostname- MODE=standalone- JVM_XMX=512m- JVM_XMS=512m- SPRING_DATASOURCE_PLATFORM=mysql- MYSQL_SERVICE_HOST=nacos-mysql- MYSQL_SERVICE_DB_NAME=nacos_devtest- MYSQL_SERVICE_PORT=3306- MYSQL_SERVICE_USER=nacos- MYSQL_SERVICE_PASSWORD=nacos- MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true- NACOS_AUTH_IDENTITY_KEY=2222- NACOS_AUTH_IDENTITY_VALUE=2xxx- NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789- NACOS_AUTH_ENABLE=truevolumes:- /app/nacos/standalone-logs/:/home/nacos/logs- /etc/localtime:/etc/localtime:rodepends_on:nacos-mysql:condition: service_healthynacos-mysql:container_name: nacos-mysqlbuild:context: .dockerfile_inline: |FROM mysql:8.0.31ADD https://raw.githubusercontent.com/alibaba/nacos/2.3.2/distribution/conf/mysql-schema.sql /docker-entrypoint-initdb.d/nacos-mysql.sqlRUN chown -R mysql:mysql /docker-entrypoint-initdb.d/nacos-mysql.sqlEXPOSE 3306CMD ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]image: nacos/mysql:8.0.30environment:- MYSQL_ROOT_PASSWORD=root- MYSQL_DATABASE=nacos_devtest- MYSQL_USER=nacos- MYSQL_PASSWORD=nacos- LANG=C.UTF-8volumes:- nacos-mysqldata:/var/lib/mysql- /etc/localtime:/etc/localtime:roports:- "13306:3306"healthcheck:test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]interval: 5stimeout: 10sretries: 10prometheus:image: prom/prometheus:v2.52.0container_name: prometheusrestart: alwaysports:- 9090:9090volumes:- prometheus-data:/prometheus- prometheus-conf:/etc/prometheus- /etc/localtime:/etc/localtime:rografana:image: grafana/grafana:10.4.2container_name: grafanarestart: alwaysports:- 3000:3000volumes:- grafana-data:/var/lib/grafana- /etc/localtime:/etc/localtime:rovolumes:redis-data:redis-conf:mysql-conf:mysql-data:rabbit-data:rabbit-app:opensearch-data1:opensearch-data2:nacos-mysqldata:zookeeper_data:kafka-conf:kafka-data:kafkaui-app:prometheus-data:prometheus-conf:grafana-data:
启动
# 在 compose.yaml 文件所在的目录下执行
docker compose up -d
# 等待启动所有容器
#不用 -f 告诉他文件名,因为默认会执行 compose.yaml
tip:如果重启了服务器,可能有些容器会启动失败。再执行一遍 docker compose up -d
即可。所有程序都可运行成功,并且不会丢失数据。请放心使用
13. 常见中间件访问测试
- zookeeper可视化工具下载:https://github.com/vran-dev/PrettyZoo/releases/download/v2.1.1/prettyZoo-win.zip
- redis可视化工具下载:https://github.com/qishibo/AnotherRedisDesktopManager/releases/download/v1.6.4/Another-Redis-Desktop-Manager.1.6.4.exe
组件(容器名) | 介绍 | 访问地址 | 账号/密码 | 特性 |
Redis(redis) | k-v 库 | 你的ip:6379 | 单密码模式:123456 | 已开启AOF(持久化机制) |
MySQL(mysql) | 数据库 | 你的ip:3306 | root/123456 | 默认utf8mb4字符集 |
Rabbit(rabbit) | 消息队列 | 你的ip:15672 | rabbit/rabbit | 暴露5672和15672端口 |
OpenSearch(opensearch-node1/2) | 检索引擎 | 你的ip:9200 | 内存512mb;两个节点 | |
opensearch-dashboards | search可视化 | 你的ip:5601 | ||
Zookeeper(zookeeper) | 分布式协调 | 你的ip:2181 | 允许匿名登录 | |
kafka(kafka) | 消息队列 | 你的ip:9092 | 占用内存512mb | |
kafka-ui(kafka-ui) | kafka可视化 | 你的ip:8080 | ||
nacos(nacos) | 注册/配置中心 | 你的ip:8848 | nacos/nacos | 持久化数据到MySQL |
nacos-mysql(nacos-mysql) | nacos配套数据库 | 你的ip:13306 | root/root | |
prometheus(prometheus) | 时序数据库 | 你的ip:9090 | ||
grafana(grafana) | 你的ip:3000 | admin/admin |
14. 总结图
创作不易,希望读者三连支持 💖
赠人玫瑰,手有余香 💖