DockerCompose部署環境

peng_boke發表於2024-10-14

前言

道阻且長,行則將至

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

相關文章