Ubuntu利用docker搭建Java相关环境记录(二)
接上篇:Ubuntu利用docker搭建Java相关环境记录(一)
启动Docker
1. 查看Docker容器
已启动的容器
docker ps
所有容器
docker ps -a
本人很懒并不想一直敲命令操作,所以先拉取Docker
可视化面板Dpanel
的镜像
2. 拉取Dpanel镜像
docker pull crpi-5qc4odiityxeoecl.cn-hangzhou.personal.cr.aliyuncs.com/aliyun-namespace-lym/dpanel:latest
注意这里用的是我的阿里云私有镜像仓库
(之前推送了这个镜像到仓库)
`强力推荐这个工具,非常好用!!!
3. 启动Dpanel
docker run -d --name dpanel --restart=always \-p 80:80 -p 443:443 -p 8807:8080 \-v /var/run/docker.sock:/var/run/docker.sock \-v /data/dpanel:/dpanel -e APP_NAME=DPANEL_HOME crpi-5qc4odiityxeoecl.cn-hangzhou.personal.cr.aliyuncs.com/aliyun-namespace-lym/dpanel:latest
4. 查看是否启动成功
docker ps
显示这些信息表示启动成功
5. 登录面板
浏览器输入http://you_server_ip:8807/
即可看到如下页面。(首次登录需要设置账号密码)
登录后即可看到如下页面,后续拉取其他镜像的操作可以在页面进行
Dpanel 拉取镜像
Redis
在compose
菜单中创建任务,在右侧yml
文件输入框中输入如下内容:
version: '3.8'services:redis:image: redis:latestcontainer_name: redis-serverports:- "6379:6379"volumes:- ./config/redis.conf:/usr/local/etc/redis/redis.conf- /data/redis:/datacommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]restart: unless-stopped
提交
提交后点击启动
按钮(拉取成功后按钮变为更新)即可拉取镜像,拉取成功后,会自动创建容器并启动。
后续其他镜像也是一样的操作方式
Kafka
因为kafka
依赖于zookeeper
所以两个镜像配置写在一起:
version: '3.8'services:zookeeper:image: wurstmeister/zookeepercontainer_name: zookeeper-serverports:- "2181:2181"volumes:- /data/zookeeper:/var/lib/zookeeperrestart: unless-stoppedkafka:image: wurstmeister/kafkacontainer_name: kafka-serverports:- "9092:9092"environment:- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092- KAFKA_LISTENERS=PLAINTEXT://:9092- KAFKA_ZOOKEEPER_CONNECT=zookeeper-server:2181- KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1volumes:- /data/kafka:/kafkadepends_on:- zookeeperrestart: unless-stopped
注意 拉取kafka时遇到的问题
zookeeper
拉取后启动成功但是kafka
启动不成功,一直显示重启中
使用 docker log 容器id
查看日志报错:
ERROR: Missing environment variable KAFKA_LISTENERS. Must be specified when using KAFKA_ADVERTISED_LISTENERS
原因:原因是没有设置 KAFKA_LISTENERS 环境变量。
解决方式: 在 Kafka
的 docker-compose.yml
文件中,添加 KAFKA_LISTENERS
环境变量,然后重启。
- KAFKA_LISTENERS=PLAINTEXT://:9092
验证kafka是否安装成功
- 进入
kafka
容器
docker exec -it <kafka_container_name_or_id> /bin/bash
- 创建 topic
kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
- 验证 topic 是否创建成功
kafka-topics.sh --list --bootstrap-server localhost:9092
如果 test-topic 出现在列表中,说明 topic 创建成功。
- 使用 Kafka 控制台生产者发送消息
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic
输入消息,例如:
Hello, Kafka! This is a test message.
- 在另一个终端窗口中进入 Kafka 容器
docker exec -it <kafka_container_name_or_id> /bin/bash
- 使用 Kafka 控制台消费者接收消息
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --from-beginning
- 查看消息
mysql 8.0
version: '3.8'services:mysql:image: mysql:8.0container_name: mysql-serverports:- "3306:3306"- "33060:33060"environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=ddb_devvolumes:- /data/mysql:/var/lib/mysqlrestart: unless-stopped
rabbitMQ
version: '3.8'services:rabbitmq:image: rabbitmq:3-managementcontainer_name: rabbitmq-serverports:- "5672:5672"- "15672:15672"volumes:- /data/rabbitmq:/var/lib/rabbitmqrestart: unless-stopped
elasticsearch 7.14.0
version: '3.8'
services:elasticsearch:image: elasticsearch:7.14.0container_name: elasticsearch-serverports:- "9200:9200"- "9300:9300"environment:- discovery.type=single-node- cluster.name=es-cluster- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms256m -Xmx256m"ulimits:memlock:soft: -1hard: -1volumes:- /data/elasticsearch:/usr/share/elasticsearch/datarestart: unless-stopped
rocketMq
- 这个和
elasticsearch
一样对服务器配置有要求,内存 4G+,内存小部署上去存在启动不起来情况,网上有很多改配置的方法,但测试后发现不一定有用。
version: '3.8'services:namesrv:image: apache/rocketmq:5.3.1 # 指定使用的 Docker 镜像,这里使用 Apache RocketMQ 5.3.1 版本container_name: rocketmq-server # 设置容器名称ports:- "9876:9876" # 映射容器的 9876 端口到宿主机的 9876 端口,RocketMQ Nameserver 的默认端口networks:- rocketmq # 指定此服务运行在 rocketmq 网络中environment:- JAVA_OPTS=-Duser.home=/data/rocketmqvolumes:- ./logs:/data/rocketmq/logs- ./store:/data/rocketmq/storecommand: ["sh", "mqnamesrv"] # 指定容器启动时执行的命令,这里是启动 mqnamesrv 服务restart: unless-stopped # 容器退出后 不自动重启 always:自动重启broker:image: apache/rocketmq:5.3.1container_name: rocketmq-brokerports:- "10909:10909"- "10911:10911"- "10912:10912"networks:- rocketmqenvironment:- NAMESRV_ADDR=rocketmq-server:9876 # 设置 Nameserver 的地址,用于连接 Nameserver- JAVA_OPTS=-server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Duser.home=/data/rocketmq # 设置 Java 相关的 JVM 参数,限制最小和最大堆内存为 256MBvolumes:- ./logs:/data/rocketmq/logs- ./store:/data/rocketmq/store- ./conf/broker.conf:/etc/rocketmq/broker.confdepends_on:- namesrv # 确保 Nameserver 容器在 Broker 容器之前启动command: ["sh", "mqbroker"]restart: unless-stopped# RocketMQ Web 管理界面服务rocketmq-dashboard:image: apacherocketmq/rocketmq-dashboard:latestcontainer_name: rocketmq-dashboardports:- "8088:8080"networks:- rocketmq # 此服务也运行在 rocketmq 网络中environment:- JAVA_OPTS=-Drocketmq.namesrv.addr=rocketmq-server:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false # 设置 JAVA_OPTS,控制台监听 8080 端口,并连接 Nameserver 服务depends_on:- namesrv # 确保 Nameserver 容器在 dashboard 容器之前启动- broker # 确保 broker 容器在 dashboard 容器之前启动restart: unless-stoppeddeploy:resources:limits:cpus: '0.3' # 限制该服务最多使用 0.3 个 CPU 核心memory: 256M # 限制该服务最多使用 256MB 内存proxy:image: apache/rocketmq:5.3.1container_name: rocketmq-proxynetworks:- rocketmqdepends_on:- broker- namesrvports:- "8080:8080"- "8081:8081"restart: on-failureenvironment:- NAMESRV_ADDR=rocketmq-server:9876command: ["sh", "mqproxy"]# 定义一个名为 rocketmq 的网络
networks:rocketmq:driver: bridge # 使用 Docker 的桥接网络模式