DockerCompose部署环境

前言

道阻且长,行则将至

1.安装docker

如果系统中已经存在旧的Docker,则先卸载

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

image-20240607000048362

首先要安装一个yum工具

yum install -y yum-utils

image-20240607000529736

安装成功后,执行命令,配置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

image-20240607001650400

安装Docker

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

image-20240607002329151

启动和校验

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

image-20240607002342595

2.配置镜像加速

打开阿里云

https://www.aliyun.com/

开通镜像服务

image-20240521224442834

进入控制台

image-20240521224500498

配置镜像加速

image-20240521224541563

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

image-20240607002505841

可以用vim查看配置文件

vim /etc/docker/daemon.json

image-20240607002546940

3.初始化mysql

mysql挂载了3个目录

image-20240930231155928

我们需要在docker-compose.yml目录下创建mysql/datamysql/confmysql/init

image-20240930231055135

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是数据库初始化数据,我们把nacosseata初始化的数据放进去

image-20240608025916785

4.初始化nacos

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

image-20240930231233139

指定版本后可能下载失败,可以直接去github上下载指定版本

https://github.com/alibaba/nacos/releases?q=v2.1&expanded=true

image-20240607225439612

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

image-20240608020031767

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

image-20240607024752820

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

image-20240607030605515

建库命令,因为DockerComposemysql初始化已经建库(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

image-20240607024632406

连接数据库执行该脚本

image-20240607024704239

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

image-20240607024929005

5.初始化seata

seata需要挂载/seata-server/resources

image-20240930231854829

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

image-20240930232238023

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

image-20240930231623975

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

image-20240607031050418

seata的数据库配置,seata服务配置的数据库名是seata

因为是同一个网络,可以通过服务名mysql访问

image-20240930232638103

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

image-20240930232751075

建库命令

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

image-20240607030258925

执行该脚本

image-20240607030954253

下载seata配置文件

https://github.com/apache/incubator-seata/blob/develop/server/src/main/resources/application.yml

image-20240607205003941

配置seata/application.yml

image-20240607205438400

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

image-20240607205953110

配置完成后上传root目录

因为自己配置的目录映射就是./seata,且docker-compose.ymlroot目录目录下执行

image-20240607210225068

image-20240607210343196

6.初始化elasticsearch&kibana

elasticsearch指定了固定挂载卷路径

image-20240930233703582

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

image-20240930233745699

安装kibana是为了方便使用elasticsearch,可以快速通过http请求获取elasticsearch结果

这里kibana只需要配置elasticsearch的地址,因为elasticsearchkibana是同一个网络,所以需要配置elasticsearch服务名称即可。

8.rabbitmq

rabbitmq不需要额外的创建,这里只做了解

rabbitmq_datarabbitmq_plugins都是自定义卷名称,如果我们不指定固定的路径,它会存储在 Docker 的默认卷目录下,通常是 /var/lib/docker/volumes/。在这个目录下,你会找到一个以 rabbitmq_data 命名的文件夹,里面存储了相关的数据。

image-20240930233540618

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

image-20240930233336944

7.redis

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

image-20240930234411930

8.sentinel

拉取容器,运行即可

image-20240930234510832

9.zipkin

拉取容器,运行即可

image-20240930234603024

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

image-20240607213438292

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

docker compose up -d

image-20240930235001908

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

docker compose logs -f

image-20240607032332869

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

docker compose down

image-20240607032154863

删除所有镜像

docker rmi $(docker images -q)

创作不易,感谢支持。

wxzf
posted @ 2024-10-14 00:59  peng_boke  阅读(157)  评论(0编辑  收藏  举报