一、分别启动每项服务

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 容器 (完整详细版)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐