前言
道阻且長,行則將至
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.配置映象加速
開啟阿里雲
https://www.aliyun.com/
開通映象服務
進入控制檯
配置映象加速
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)
創作不易,感謝支援。