DockerCompose部署环境

news/2024/10/14 1:05:59

前言

道阻且长,行则将至

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/dockersudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://*****.mirror.aliyuncs.com"]
}
EOFsudo systemctl daemon-reloadsudo 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:latestcontainer_name: mysqlenvironment:MYSQL_ROOT_PASSWORD: root          # MySQL 根用户密码MYSQL_DATABASE: nacos              # 默认创建的数据库MYSQL_PASSWORD: root               # MySQL 用户密码TZ: Asia/Shanghaiports:- "3306:3306"                      # 映射主机的3306端口到容器的3306端口volumes:- ./mysql/data:/var/lib/mysql - ./mysql/conf:/etc/mysql/conf.d - ./mysql/init:/docker-entrypoint-initdb.dnetworks:- mall-net                         # 指定连接的网络restart: alwaysnacos:image: nacos/nacos-server:v2.1.0-slimcontainer_name: nacosenvironment:- 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/Shanghaiports:- "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: alwaysrabbitmq:image: rabbitmq:3.8-managementcontainer_name: rabbitmqports:- "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: alwayselasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1container_name: elasticsearchenvironment:- 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: alwayskibana:image: docker.elastic.co/kibana/kibana:7.12.1container_name: kibanaenvironment:ELASTICSEARCH_URL: http://elasticsearch:9200 # 指定 Elasticsearch 的 URLports:- "5601:5601"                      # 映射主机的5601端口到容器的5601端口depends_on:- elasticsearch                    # 启动顺序,先启动 elasticsearch 服务networks:- mall-net                         # 指定连接的网络restart: alwaysredis:image: redis:latestcontainer_name: redisports:- "6379:6379"                      # 映射主机的6379端口到容器的6379端口networks:- mall-net                         # 指定连接的网络restart: alwaysseata:image: seataio/seata-server:1.5.2container_name: seataprivileged: true                     # 设置容器的特权模式为 trueenvironment:SEATA_IP: 192.168.188.180ports:- "8099:8099"                      # 映射主机的7091端口到容器的7091端口- "7099:7099"                      # 映射主机的8091端口到容器的8091端口depends_on:- mysql                            # 启动顺序,先启动 mysql 服务- nacos                            # 启动顺序,先启动 nacos 服务volumes:- ./seata:/seata-server/resources  # 挂载本地 seata 目录到容器的 /seata-server/resourcesnetworks:- mall-net                         # 指定连接的网络restart: alwayssentinel:image: bladex/sentinel-dashboardcontainer_name: sentinelports:- "8858:8858"                      # 映射主机的8858端口到容器的8858端口networks:- mall-net                         # 指定连接的网络restart: alwayszipkin:image: openzipkin/zipkincontainer_name: zipkinports:- "9411:9411"                      # 映射主机的9411端口到容器的9411端口networks:- mall-net                         # 指定连接的网络restart: always   networks:mall-net:                              # 定义一个名为 mall-net 的网络volumes:mysql_data:                            # 定义持久化存储卷 mysql_datanacos_data:                            # 定义持久化存储卷 nacos_datarabbitmq_data:                         # 定义持久化存储卷 rabbitmq_datarabbitmq_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71285.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

实验一 现代C++ 基础编程

task1 代码:#include <iostream> #include <string> #include <vector> #include <algorithm>using namespace std;// 声明 // 模板函数声明 template<typename T> void output(const T &c);// 普通函数声明 void test1(); void test2(); v…

VMware中三种网络模式(快速笔记)

0、精髓1、桥接模式架构图(VMnet0)与主机共用一块网卡,分配到与主机同网段下的不同的IP地址2、NAT模式架构图(VMnet8)使用虚拟网卡并与主机连接,但共用主机IP3、主机模式架构图(VMnet1)注:本随笔仅为个人速记笔记,详细还请参考这篇博客https://www.cnblogs.com/linjiaxin/p…

Dockerr安装Oracle以及使用DBeaver连接

拉取镜像 pull container-registry.oracle.com/database/free:latest创建容器说明一下我现在的最新版本是23docker run -d --name oracle23i -h xrilang -p 1521:1521 container-registry.oracle.com/database/free:latest查看日志 docker logs oracle23i设置密码 因为创建容器…

数据结构 - 栈

栈是一种特殊线性数据结构,操作遵循后进先出原则,可解决表达式求值等问题。栈分为顺序栈和链栈,各有特点。文章详细介绍了栈的定义、分类及实现方式,包括顺序栈和链栈的ADT定义及基本操作实现。栈一种常见的特殊线性数据结构,其特殊之处在于其操作顺序,下面会详细介绍,也…

《使用Gin框架构建分布式应用》阅读笔记:p20-p31

《用Gin框架构建分布式应用》学习第2天,p20-p31总结,总计12页。 一、技术总结 1.第一个gin程序 // main.go package mainimport "github.com/gin-gonic/gin"func main() {r := gin.Default()r.GET("/", func(c *gin.Context) {c.JSON(200, gin.H{"m…

hot100 review

56. 合并区间 https://leetcode.cn/problems/merge-intervals/description/?envType=study-plan-v2&envId=top-100-liked 该怎么排序区间 vector<vector>& intervals sort(intervals)即可 238. 除自身以外数组的乘积 https://leetcode.cn/problems/product-of-a…

inline、const、mutable、this、static

inline、const、mutable、this、static 在类定义中实现成员函数 incline成员函数末尾的 const(声明和实现中都要加上 const) 作用:告诉系统,这个成员函数不会修改该对象里任何成员变量的值等等,也就是说,这个成员函数不会修改类 Time的任何状态。===> 也叫做常量成员函…

吴恩达机器学习笔记(2-1到2-7)

吴恩达机器学习笔记(2-1到2-7) https://www.bilibili.com/video/BV164411b7dx?p=5 https://www.bilibili.com/video/BV164411b7dx?p=6 https://www.bilibili.com/video/BV164411b7dx?p=7 https://www.bilibili.com/video/BV164411b7dx?p=8 https://www.bilibili.com/vide…