ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【Docker 实战】Docker 部署 Java 常用中间件

【Docker 实战】Docker 部署 Java 常用中间件 环境说明CentOS7 / CentOS8Docker 24Docker Compose v2本篇所有命令可直接复制执行用于 Java 开发环境搭建生产环境不建议单机容器部署。Java 后端开发本地 / 测试服务器搭建一套中间件环境非常麻烦版本冲突、环境污染、重装成本高。Docker 可以容器化快速部署 MySQL、Redis、RabbitMQ、ES数据卷挂载实现持久化容器删除数据不丢失。 本文分步部署最后提供 docker-compose 一键编排脚本。一、前置准备安装 Docker Docker Compose1.1 卸载旧版本 Dockeryum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-client \ docker-latest-logrotate \ docker-logrotate \ docker-engine1.2 安装 Dockeryum# 安装yum工具 yum install -y yum-utils # 添加docker官方yum源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装docker引擎 yum install -y docker-ce docker-ce-cli containerd.io1.3 配置镜像加速器# 创建daemon配置文件 mkdir -p /etc/docker tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://docker.1ms.run] } EOF # 重载配置 systemctl daemon-reload1.4 启动 Docker、设置开机自启systemctl start docker systemctl enable docker # 验证docker版本 docker --version1.5 安装 docker-compose# 下载docker-compose curl -L https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose # 添加执行权限 chmod x /usr/local/bin/docker-compose # 验证 docker-compose --version1.6 Docker 基础常用命令速查# 查看运行中的容器 docker ps # 查看所有容器包含停止的 docker ps -a # 查看镜像 docker images # 删除容器 docker rm -f 容器名/容器id # 删除镜像 docker rmi 镜像id # 进入容器内部 docker exec -it 容器名 /bin/bash # 查看实时日志 docker logs -f --tail 200 容器名二、Docker 部署 MySQL8.02.1 创建宿主机挂载目录mkdir -p /data/mysql8/data mkdir -p /data/mysql8/conf mkdir -p /data/mysql8/log2.2 拉取 mysql 镜像docker pull mysql:8.0.362.3 docker run 启动 MySQL 容器docker run -d \ --name mysql8 \ -p 3306:3306 \ --restartalways \ -e MYSQL_ROOT_PASSWORDRoot123456 \ -v /data/mysql8/data:/var/lib/mysql \ -v /data/mysql8/conf:/etc/mysql/conf.d \ -v /data/mysql8/log:/var/log/mysql \ mysql:8.0.36 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_unicode_ci参数说明-d 后台运行--restartalways 开机自启MYSQL_ROOT_PASSWORD 设置 root 密码挂载数据、配置、日志目录实现持久化设置 utf8mb4 支持2.4 Navicat 连接测试宿主机 IP:3306用户名 root密码 Root123456注意云服务器需要安全组开放 3306 端口防火墙放行端口2.5 常见问题修复# 进入mysql容器 docker exec -it mysql8 mysql -uroot -pRoot123456 # 远程授权 ALTER USER root% IDENTIFIED WITH mysql_native_password BY Root123456; FLUSH PRIVILEGES;三、Docker 部署 Redis7带密码 AOF 持久化3.1 创建挂载目录mkdir -p /data/redis7/conf mkdir -p /data/redis7/data3.2 准备 redis.conf 配置文件tee /data/redis7/conf/redis.conf -EOF protected-mode no requirepass Redis123456 appendonly yes EOF3.3 拉取镜像并启动容器docker pull redis:7.2.4 docker run -d \ --name redis7 \ -p 6379:6379 \ --restartalways \ -v /data/redis7/conf/redis.conf:/etc/redis/redis.conf \ -v /data/redis7/data:/data \ redis:7.2.4 redis-server /etc/redis/redis.conf3.4 redis-cli 连接测试# 进入容器内redis客户端 docker exec -it redis7 redis-cli # 输入密码 AUTH Redis1234563.5 Redis 常见坑修复protected-mode yes默认保护模式外部无法访问配置文件改为 no忘记密码修改配置文件 requirepass重启容器持久化appendonly yes 开启 AOF四、Docker 部署 RabbitMQ带 web 管理后台4.1 拉取 rabbitmq 镜像docker pull rabbitmq:3.12-management4.2 启动 RabbitMQ 容器docker run -d \ --name rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ --restartalways \ -e RABBITMQ_DEFAULT_USERadmin \ -e RABBITMQ_DEFAULT_PASSAdmin123456 \ -v /data/rabbitmq:/var/lib/rabbitmq \ rabbitmq:3.12-management4.3 启用管理后台插件新版 management 镜像自带插件保险起见执行docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management4.4 浏览器访问后台创建管理员账号访问地址http://宿主机IP:15672账号admin密码Admin123456# 可选新增业务用户 docker exec -it rabbitmq rabbitmqctl add_user javauser Java123 docker exec -it rabbitmq rabbitmqctl set_user_tags javauser administrator docker exec -it rabbitmq rabbitmqctl set_permissions -p / javauser .* .* .*4.5 RabbitMQ 常见问题5672 是 AMQP 端口程序连接15672 是 web 管理端口数据挂载目录/data/rabbitmq容器删除消息不丢失五、Docker 部署 Elasticsearch7 Kibana5.1 修改系统内核参数必做ES 需要内核参数 vm.max_map_count不修改启动失败# 临时生效 sysctl -w vm.max_map_count262144 # 永久生效 echo vm.max_map_count262144 /etc/sysctl.conf sysctl -p5.2 创建宿主机挂载目录mkdir -p /data/es7/data mkdir -p /data/es7/config chmod 777 /data/es7/data5.3 启动 Elasticsearch 容器docker pull elasticsearch:7.17.0 docker run -d \ --name es7 \ -p 9200:9200 \ -p 9300:9300 \ --restartalways \ -e discovery.typesingle-node \ -e ES_JAVA_OPTS-Xms512m -Xmx512m \ -v /data/es7/data:/usr/share/elasticsearch/data \ elasticsearch:7.17.0discovery.typesingle-node 单机模式内存限制 512M低配服务器可用5.4 启动 Kibana 容器docker pull kibana:7.17.0 docker run -d \ --name kibana7 \ -p 5601:5601 \ --restartalways \ -e ELASTICSEARCH_HOSTShttp://es7:9200 \ --link es7 \ kibana:7.17.05.5 Kibana 访问与 ES 测试访问http://宿主机IP:5601# curl测试es是否正常 curl http://127.0.0.1:92005.6 IK 分词器安装# 进入es容器 docker exec -it es7 /bin/bash # 安装ik分词器版本和es保持7.17.0一致 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.0/elasticsearch-analysis-ik-7.17.0.zip # 退出容器重启es exit docker restart es75.7 ES 常见坑内存不足修改 ES_JAVA_OPTS不要设置过大权限报错挂载目录授权 chmod 777版本必须保证 ES 和 Kibana 版本号完全一致六、进阶docker-compose.yml 一键启动全部中间件7.1 docker-compose.yml 完整配置文件version: 3.8 services: mysql8: image: mysql:8.0.36 container_name: mysql8 restart: always ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: Root123456 volumes: - /data/mysql8/data:/var/lib/mysql - /data/mysql8/conf:/etc/mysql/conf.d - /data/mysql8/log:/var/log/mysql command: --character-set-serverutf8mb4 --collation-serverutf8mb4_unicode_ci redis7: image: redis:7.2.4 container_name: redis7 restart: always ports: - 6379:6379 volumes: - /data/redis7/conf/redis.conf:/etc/redis/redis.conf - /data/redis7/data:/data command: redis-server /etc/redis/redis.conf rabbitmq: image: rabbitmq:3.12-management container_name: rabbitmq restart: always ports: - 5672:5672 - 15672:15672 environment: RABBITMQ_DEFAULT_USER: admin RABBITMQ_DEFAULT_PASS: Admin123456 volumes: - /data/rabbitmq:/var/lib/rabbitmq es7: image: elasticsearch:7.17.0 container_name: es7 restart: always ports: - 9200:9200 - 9300:9300 environment: discovery.type: single-node ES_JAVA_OPTS: -Xms512m -Xmx512m volumes: - /data/es7/data:/usr/share/elasticsearch/data kibana7: image: kibana:7.17.0 container_name: kibana7 restart: always ports: - 5601:5601 environment: ELASTICSEARCH_HOSTS: http://es7:9200 depends_on: - es76.2 Compose 启停命令# 启动所有服务在yml所在目录执行 docker-compose up -d # 停止所有服务 docker-compose down6.3 查看日志、重启服务# 查看全部日志 docker-compose logs -f # 单独重启某个中间件例如nacos docker-compose restart nacos七、Docker 中间件通用运维命令7.1 容器查看、停止、重启、删除# 查看运行容器 docker ps # 停止单个容器 docker stop mysql8 # 重启容器 docker restart mysql8 # 删除容器 docker rm -f mysql87.2 查看容器日志# 实时查看日志尾部200行 docker logs -f --tail 200 mysql87.3 数据卷备份与迁移停止容器直接打包宿主机挂载目录 /data/xxx新服务器解压对应目录重新启动容器数据直接恢复八、高频问题汇总挂载目录权限 permission denied给宿主机目录授权 chmod 777防火墙 / 安全组端口无法访问关闭 firewalld 或者放行端口云服务器记得开放安全组容器重启数据丢失没有做数据卷挂载数据存在容器内部ES 启动失败 vm.max_map_count必须修改系统内核参数MySQL8 密码认证插件连接失败执行 alter user 修改密码插件Redis 保护模式外部访问失败redis.conf 设置 protected-mode no
返回列表