DockerCompose部署环境
前言
道阻且长,行则将至
1.安装docker
如果系统中已经存在旧的Docker,则先卸载
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

首先要安装一个yum工具
yum install -y yum-utils

安装成功后,执行命令,配置Docker的yum源,以下任选一个。我是第一个失败了用的阿里镜像
# docker
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# aliyun
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动和校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

2.配置镜像加速
打开阿里云
开通镜像服务

进入控制台

配置镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://*****.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

可以用vim查看配置文件
vim /etc/docker/daemon.json

3.初始化mysql
mysql挂载了3个目录

我们需要在docker-compose.yml目录下创建mysql/data、mysql/conf、mysql/init

mysql\conf\mysql.cnf是数据库配置文件
[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
mysql\init是数据库初始化数据,我们把nacos、seata初始化的数据放进去

4.初始化nacos
nacos主要是配置数据库相关的配置,然后需要创建初始化的库,可以一开始就下载放在mysql挂载目录的mysql/init目录下

指定版本后可能下载失败,可以直接去github上下载指定版本
https://github.com/alibaba/nacos/releases?q=v2.1&expanded=true

选择自己想要安装的版,我这里是v2.1.0,conf目录下有执行sql,可以放到mysql,初始化目录里,mysql启动时会自动执行,也可以安装mysql后执行sql,重新启动nacos

运行容器nacos会报错,因为没有连上数据库

nacos服务配置的库名是nacos,所以在nacos数据库下建表

建库命令,因为DockerCompose中mysql初始化已经建库(MYSQL_DATABASE: nacos),已有nacos库了可以忽略
-- 导出 nacos 的数据库结构
DROP DATABASE IF EXISTS `nacos`;
CREATE DATABASE IF NOT EXISTS `nacos` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `nacos`;
nacos初始化sql脚本地址:
https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql

连接数据库执行该脚本

访问http://192.168.188.180:8848/nacos,用户名密码都是nacos

5.初始化seata
seata需要挂载/seata-server/resources

seata配置文件下载地址:https://github.com/apache/incubator-seata/tree/2.x/server/src/main/resources

创建seata挂载目录,并且上传配置文件

启动seata服务,报错原因是没有连接上数据库

seata的数据库配置,seata服务配置的数据库名是seata
因为是同一个网络,可以通过服务名mysql访问

然后就是端口和平台账号配置

建库命令
DROP DATABASE IF EXISTS `seata`;
CREATE DATABASE IF NOT EXISTS `seata`;
USE `seata`;
数据库地址:https://github.com/apache/incubator-seata/blob/2.x/script/server/db/mysql.sql

执行该脚本

下载seata配置文件
https://github.com/apache/incubator-seata/blob/develop/server/src/main/resources/application.yml

配置seata/application.yml

需要注意nacos、db俩个模块需要和你的环境一致,一个是nacos服务,还有一个是mysql环境

配置完成后上传root目录
因为自己配置的目录映射就是./seata,且docker-compose.yml在root目录目录下执行


6.初始化elasticsearch&kibana
elasticsearch指定了固定挂载卷路径

我们创建对应的elasticsearch/config 、elasticsearch/data 、elasticsearch/plugins目录即可

安装kibana是为了方便使用elasticsearch,可以快速通过http请求获取elasticsearch结果
这里kibana只需要配置elasticsearch的地址,因为elasticsearch和kibana是同一个网络,所以需要配置elasticsearch服务名称即可。
8.rabbitmq
rabbitmq不需要额外的创建,这里只做了解
rabbitmq_data和rabbitmq_plugins都是自定义卷名称,如果我们不指定固定的路径,它会存储在 Docker 的默认卷目录下,通常是 /var/lib/docker/volumes/。在这个目录下,你会找到一个以 rabbitmq_data 命名的文件夹,里面存储了相关的数据。

最下面定义了rabbitmq的俩个自定义卷

7.redis
redis比较简单,拉取容器,运行即可

8.sentinel
拉取容器,运行即可

9.zipkin
拉取容器,运行即可

6.DockerCompose
docker-compose.yml
version: '3.8'
services:
mysql:
image: mysql:latest
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root # MySQL 根用户密码
MYSQL_DATABASE: nacos # 默认创建的数据库
MYSQL_PASSWORD: root # MySQL 用户密码
TZ: Asia/Shanghai
ports:
- "3306:3306" # 映射主机的3306端口到容器的3306端口
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/init:/docker-entrypoint-initdb.d
networks:
- mall-net # 指定连接的网络
restart: always
nacos:
image: nacos/nacos-server:v2.1.0-slim
container_name: nacos
environment:
- PREFER_HOST_MODE=hostname # 使用主机名作为偏好模式
- MODE=standalone
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=192.168.188.180 # MySQL 服务主机名
- MYSQL_SERVICE_DB_NAME=nacos # Nacos 使用的数据库名
- MYSQL_SERVICE_PORT=3306 # MySQL 服务端口
- MYSQL_SERVICE_USER=root # MySQL 用户名
- MYSQL_SERVICE_PASSWORD=root # MySQL 用户密码
- MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
ports:
- "8848:8848" # 映射主机的8848端口到容器的8848端口
- "9848:9848"
- "9849:9849"
depends_on:
- mysql # 启动顺序,先启动 mysql 服务
volumes:
- nacos_data:/home/nacos/init.d # 持久化 Nacos 数据到名为 nacos_data 的卷
networks:
- mall-net # 指定连接的网络
restart: always
rabbitmq:
image: rabbitmq:3.8-management
container_name: rabbitmq
ports:
- "5672:5672" # 映射主机的5672端口到容器的5672端口
- "15672:15672" # 映射主机的15672端口到容器的15672端口(管理界面)
volumes:
- rabbitmq_data:/var/lib/rabbitmq # 持久化 RabbitMQ 数据到名为 rabbitmq_data 的卷
- rabbitmq_plugins:/etc/rabbitmq/plugins # 持久化 RabbitMQ 插件到名为 rabbitmq_plugins 的卷
networks:
- mall-net # 指定连接的网络
restart: always
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
container_name: elasticsearch
environment:
- discovery.type=single-node # 设置为单节点模式
- ES_JAVA_OPTS=-Xms512m -Xmx512m # 设置 JVM 内存选项
ports:
- "9200:9200" # 映射主机的9200端口到容器的9200端口
- "9300:9300" # 映射主机的9300端口到容器的9300端口
volumes:
- ./elasticsearch/data:/usr/share/elasticsearch/data # 持久化 Elasticsearch 数据到名为 elasticsearch_data 的卷
- ./elasticsearch/plugins:/usr/share/elasticsearch/plugins # 持久化 Elasticsearch 插件到名为 elasticsearch_plugins 的卷
networks:
- mall-net # 指定连接的网络
restart: always
kibana:
image: docker.elastic.co/kibana/kibana:7.12.1
container_name: kibana
environment:
ELASTICSEARCH_URL: http://elasticsearch:9200 # 指定 Elasticsearch 的 URL
ports:
- "5601:5601" # 映射主机的5601端口到容器的5601端口
depends_on:
- elasticsearch # 启动顺序,先启动 elasticsearch 服务
networks:
- mall-net # 指定连接的网络
restart: always
redis:
image: redis:latest
container_name: redis
ports:
- "6379:6379" # 映射主机的6379端口到容器的6379端口
networks:
- mall-net # 指定连接的网络
restart: always
seata:
image: seataio/seata-server:1.5.2
container_name: seata
privileged: true # 设置容器的特权模式为 true
environment:
SEATA_IP: 192.168.188.180
ports:
- "8099:8099" # 映射主机的7091端口到容器的7091端口
- "7099:7099" # 映射主机的8091端口到容器的8091端口
depends_on:
- mysql # 启动顺序,先启动 mysql 服务
- nacos # 启动顺序,先启动 nacos 服务
volumes:
- ./seata:/seata-server/resources # 挂载本地 seata 目录到容器的 /seata-server/resources
networks:
- mall-net # 指定连接的网络
restart: always
sentinel:
image: bladex/sentinel-dashboard
container_name: sentinel
ports:
- "8858:8858" # 映射主机的8858端口到容器的8858端口
networks:
- mall-net # 指定连接的网络
restart: always
zipkin:
image: openzipkin/zipkin
container_name: zipkin
ports:
- "9411:9411" # 映射主机的9411端口到容器的9411端口
networks:
- mall-net # 指定连接的网络
restart: always
networks:
mall-net: # 定义一个名为 mall-net 的网络
volumes:
mysql_data: # 定义持久化存储卷 mysql_data
nacos_data: # 定义持久化存储卷 nacos_data
rabbitmq_data: # 定义持久化存储卷 rabbitmq_data
rabbitmq_plugins: # 定义持久化存储卷 rabbitmq_plugins
运行docker-compose.yml

运行命令,版本低的话使用docker-compose up -d
docker compose up -d

查看日志,版本低的话使用docker-compose logs -f
docker compose logs -f

卸载命令,版本低的话使用docker-compose down
docker compose down

删除所有镜像
docker rmi $(docker images -q)
创作不易,感谢支持。

浙公网安备 33010602011771号