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)
创作不易,感谢支持。