使用 docker-compose 部署 java 服务运行环境(MySQL、Redis、Kafka、Nginx)
本文介绍了两种方式部署Java服务运行环境:1) 分别启动MySQL、Redis、Kafka、Nginx等服务容器,通过Dockerfile构建Java服务镜像后单独运行;2) 使用docker-compose.yml文件统一编排所有服务,实现一键启动。详细说明了各服务的配置参数、数据卷挂载和网络设置,并提供了设置开机自启动docker-compose服务的方法。两种方式均通过自定义Docker网
使用 docker-compose 部署 java 服务运行环境
一、分别启动每项服务
1.首先自定义网络
docker network create mynet
2.MySQL
docker pull mysql
docker run --name mysql -p 3306:3306 --network mynet --restart=always \
-v <自己的配置文件路径>:/etc/mysql/conf.d \
-v <自己的数据文件路径>:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=<密码> \
-d mysql
连接数据库的用户名为 root,密码为上面设置的 <密码>。
3.Redis
docker pull redis
docker run --name redis -p 6379:6379 --network mynet --restart=always \
-d redis --requirepass <密码>
4.Kafka
docker pull bitnami/kafka
由于这是一个非root容器,挂载的文件和目录必须具有UID 1001的正确权限
sudo chown -R 1001:1001 <kafka数据持久化路径>
docker run --name kafka -p 9092:9092 --network mynet --restart=always \
-v <kafka数据持久化路径>:/bitnami/kafka \
-e KAFKA_CFG_NODE_ID=0 \
-e KAFKA_CFG_PROCESS_ROLES=controller,broker \
-e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://<服务器IP>:9092 \
-e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
-e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093 \
-e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
-d bitnami/kafka
5.自己的 java 服务
编写 Dockerfile
FROM eclipse-temurin:17-jre-jammy
WORKDIR /app
COPY target/demo-0.0.1-SNAPSHOT.jar demo.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","demo.jar"]
CMD ["--spring.profiles.active=prod"]
将 Dockerfile 放在 <自己的工作目录> 下。
制作镜像
docker pull eclipse-temurin:17-jre-jammy
将打好的 jar 包放在 <工作目录>/target 目录下,在 <工作目录> 执行:
sudo docker build -t java-server .
启动容器
docker run --name java-server -p 8081:8081 --network mynet --restart=always \
-v <日志文件路径>:/app/log \
-d java-server
6.Nginx
docker pull nginx
新建本地目录
sudo mkdir <配置文件路径>
sudo mkdir <日志文件路径>
sudo mkdir <html文件路径>
创建容器,并复制初始化的配置文件和html文件到本地,最后删除该容器
docker run --name nginx-test -p 80:80 -d nginx
sudo docker cp nginx-test:/etc/nginx/. <配置文件路径>
sudo docker cp nginx-test:/usr/share/nginx/html/. <html文件路径>
docker rm -f nginx-test
用新命令启动容器
docker run --name nginx -p 80:80 --network mynet --restart=always \
-v <配置文件路径>:/etc/nginx \
-v <日志文件路径>:/var/log/nginx \
-v <html文件路径>:/usr/share/nginx/html \
-d nginx
二、使用 docker compose
1.编写 docker-compose.yml
services:
mysql:
image: mysql
networks:
- mynet
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: <密码>
volumes:
- <自己的配置文件路径>:/etc/mysql/conf.d
- <自己的数据文件路径>:/var/lib/mysql
redis:
image: redis
networks:
- mynet
ports:
- 6379:6379
command: redis-server --requirepass <密码>
kafka:
image: bitnami/kafka
networks:
- mynet
ports:
- 9092:9092
environment:
- KAFKA_CFG_NODE_ID=0
- KAFKA_CFG_PROCESS_ROLES=controller,broker
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://<服务器IP>:9092
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
volumes:
- <kafka数据持久化路径>:/bitnami/kafka
java-server:
image: java-server
build:
context: .
dockerfile: Dockerfile
networks:
- mynet
ports:
- 8081:8081
volumes:
- <日志文件路径>:/app/log
depends_on:
- mysql
- redis
- kafka
nginx:
image: nginx
networks:
- mynet
ports:
- 80:80
volumes:
- <配置文件路径>:/etc/nginx
- <日志文件路径>:/var/log/nginx
- <html文件路径>:/usr/share/nginx/html
depends_on:
- java-server
networks:
mynet:
2.使用 docker compose up 一次性启动所有服务
将 docker-compose.yml 放在跟 Dockerfile 相同的 <工作目录> 下,执行:
sudo docker compose up -d --build

3.设置开机自动执行 docker-compose.yml
cd /etc/systemd/system
sudo vim docker-compose-up-java-server.service
[Unit]
Description=docker compose up java-server
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
WorkingDirectory=/data/docker/java-server
ExecStart=docker compose up -d
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable docker-compose-up-java-server.service
参考:
[1]:docker 安装 Mysql 5.7
[2]:史上最详细Docker安装Redis (含每一步的图解)实战
[3]:Docker安装Kafka教程(超详细)
[4]:bitnami/kafka安装教程
[5]:85_使用compose编排服务中集
[6]:docker-compose教程(安装,使用, 快速入门)
[7]:ubuntu docker-compose编排容器并且设置自启动
[8]:Docker 安装 Nginx 容器 (完整详细版)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)