1 安装docker

--卸载旧版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

--设置仓库
yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
--设置仓库源 使用阿里云  还是比较慢 得需要配置/etc/docker/damone.json
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-- 安装
yum install docker-ce docker-ce-cli containerd.io

如果提示您接受 GPG 密钥,请选是。

--配置/etc/docker/damone.json
vim  /etc/docker/damone.json
内容如下:
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}

--开启自启
 systemctl enable docker

--启动docker
systemctl restart docker

2 docker 安装mysql

## 创建卷,用于挂载数据
docker volume create mysqlconf
docker volume create mysqldata
## 创建容器 
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v mysqlconf:/etc/mysql/conf.d \
-v mysqldata:/var/lib/mysql \
mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time_zone='+8:00' 

## 开机自启 容器重启策略--restart  always:随着docker的启动而启动
docker update --restart=always mysql

## 如果没有生效 查看如下
https://www.cnblogs.com/double-dong/p/11533341.html

## 时区设置为统一东八区 上海  此处为设置mysql的时区
docker cp /usr/share/zoneinfo/Asia/Shanghai mysql:/usr/share/zoneinfo/Asia

3 修改docker容器时区

docker cp /usr/share/zoneinfo/Asia/Shanghai 容器ID或容器名:/usr/share/zoneinfo/Asia

或者

1. 进入容器之后
2. cd /usr/share/zoneinfo/Asia
3. cp Shanghai /etc/localtime

image-20220419103909027

java 数据源配置参考:

spring:
  application:
    name: order
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.211.128:3306/数据库名?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456

4 Docker安装Redis

1、拉取redis镜像

docker pull redis

2、创建挂载目录

mkdir /docker-data/redis

3、下载redis.conf文件

wget http://download.redis.io/redis-stable/redis.conf

4、权限

chmod 777 redis.conf

5、修改默认配置信息

vi /docker-data/redis/redis.conf
bind 127.0.0.1 # 这行要注释掉,解除本地连接限制
protected-mode no # 默认yes,如果设置为yes,则只允许在本机的回环连接,其他机器无法连接。
daemonize no # 默认no 为不守护进程模式,docker部署不需要改为yes,docker run -d本身就是后台启动,不然会冲突
requirepass 123456 # 设置密码
appendonly yes # 持久化

6、docker启动redis

docker run --name redis \
-p 6379:6379 \
-v /docker-data/redis/redis.conf:/etc/redis/redis.conf \
-v /docker-data/redis:/data \
-d redis redis-server /etc/redis/redis.conf --appendonly yes

说明:

  • -p 6379:6379:端口映射,前面是宿主机,后面是容器。
  • –name redis:指定该容器名称。
  • -v 挂载文件或目录:前面是宿主机,后面是容器。
  • -d redis redis-server /etc/redis/redis.conf:表示后台启动redis,以配置文件启动redis,加载容器内的conf文件。
  • appendonly yes:开启redis 持久化。

7、检查redis运行状态

docker ps

5 安装portainer

它是一个docker图形化界面。

-- 拉取镜像, 已有镜像,不需要拉取
docker pull portainer/portainer-ce
-- 命令行创建容器
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer-ce

http://192.168.211.128:9000

用户名/密码:admin/admin1234

6 安装nacos

-- 拉取镜像
docker pull nacos/nacos-server:1.4.1
-- 创建容器
docker run -d --restart=always --name nacos -p 8848:8848 -e MODE=standalone -e NACOS_SERVER_IP=192.168.211.128 -e JVM_XMS=256m -e JVM_XMX=256m -e JVM_XMN=256m nacos/nacos-server:1.4.1

7 安装ES

docker network create es-net
#如果es-net已经存在,则会报: Error response from daemon: network with name es-net already exists 忽略它即可
docker volume create es-data
docker volume create es-plugins
docker run -d \
--name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

# 安装ik分词器
#1. 查看插件所在目录
docker volume inspect es-plugins
# "Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
#2 把项目资料中的 ik分词器 目录下的ik目录,拖到/var/lib/docker/volumes/es-plugins/_data这个目录下
#3 重启es
docker restart es
# 待安装完kibana后再来难

8 安装Kibana

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1
# 访问 http://192.168.211.128:5601

# 验证
POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "黑马程序员学习java太棒了!传智播客,奥利给!习大大"
}

9.安装Mongodb

linux中执行命令

docker volume create mongo-data
docker run -di --name mongodb -p 27017:27017 -v mongo-data:/data --restart=always mongo:4.4

10.安装xxl-job

导入以下脚本

#
# XXL-JOB v2.1.2
# Copyright (c) 2015-present, xuxueli.

CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `xxl_job`;


CREATE TABLE `xxl_job_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
  `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON',
  `job_desc` varchar(255) NOT NULL,
  `add_time` datetime DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  `author` varchar(64) DEFAULT NULL COMMENT '作者',
  `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
  `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',
  `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
  `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
  `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',
  `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒',
  `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
  `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',
  `glue_source` mediumtext COMMENT 'GLUE源代码',
  `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
  `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间',
  `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',
  `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行',
  `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间',
  `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
  `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
  `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
  `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
  `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
  `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',
  `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
  `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
  `trigger_code` int(11) NOT NULL COMMENT '调度-结果',
  `trigger_msg` text COMMENT '调度-日志',
  `handle_time` datetime DEFAULT NULL COMMENT '执行-时间',
  `handle_code` int(11) NOT NULL COMMENT '执行-状态',
  `handle_msg` text COMMENT '执行-日志',
  `alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',
  PRIMARY KEY (`id`),
  KEY `I_trigger_time` (`trigger_time`),
  KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_log_report` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间',
  `running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量',
  `suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量',
  `fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量',
  PRIMARY KEY (`id`),
  UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_logglue` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
  `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',
  `glue_source` mediumtext COMMENT 'GLUE源代码',
  `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注',
  `add_time` datetime DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_registry` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `registry_group` varchar(50) NOT NULL,
  `registry_key` varchar(255) NOT NULL,
  `registry_value` varchar(255) NOT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_group` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `app_name` varchar(64) NOT NULL COMMENT '执行器AppName',
  `title` varchar(12) NOT NULL COMMENT '执行器名称',
  `order` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
  `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入',
  `address_list` varchar(512) DEFAULT NULL COMMENT '执行器地址列表,多地址逗号分隔',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL COMMENT '账号',
  `password` varchar(50) NOT NULL COMMENT '密码',
  `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',
  `permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',
  PRIMARY KEY (`id`),
  UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `xxl_job_lock` (
  `lock_name` varchar(50) NOT NULL COMMENT '锁名称',
  PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `order`, `address_type`, `address_list`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 1, 0, NULL);
INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_cron`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '0 0 0 * * ? *', '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock');

commit;

创建容器

docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.211.128:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=123456 --spring.datasource.driver-class-name=com.mysql.jdbc.Driver" -p 18080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d --restart=always xuxueli/xxl-job-admin:2.1.2
浏览器地址访问:
http://192.168.211.128:8080/xxl-job-admin   
登录并输入用户名和密码:admin/123456

1640059332929

如上图还需要导入SQL脚本到头条数据库中。

11 安装spring cloud alibaba sentinel dashbord

docker pull bladex/sentinel-dashboard

docker run --name sentinel -d -p 8858:8858 -d  bladex/sentinel-dashboard

浏览器访问

http://192.168.211.128:8858/

输入用户名和密码:

sentinel/sentinel

12 docker安装kafka

下载镜像

docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
docker pull obsidiandynamics/kafdrop:3.30.0

创建容器

# docker volume create zk-data
docker run -d --name zookeeper --restart=always -p 2181:2181 wurstmeister/zookeeper

docker volume create kafka-log

docker run -d --name kafka -p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.211.128:2181/kafka \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.211.128:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-e KAFKA_HEAP_OPTS="-Xmx512M -Xms256M" \
-v kafka-log:/kafka \
wurstmeister/kafka

docker run -d -p 9100:9000 --name=kafdrop \
    -e KAFKA_BROKERCONNECT=192.168.211.128:9092 \
    -e JVM_OPTS="-Xms32M -Xmx64M" \
    -e SERVER_SERVLET_CONTEXTPATH="/" \
    obsidiandynamics/kafdrop:3.30.0
# 启动成功后访问
http://192.168.211.128:9100

Linux下的安装(了解)

jdk环境

首先需要安装Java环境,同时配置环境变量

zookeeper安装

(1)下载安装包

wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz

(2)解压

tar -xvf apache-zookeeper-3.5.8-bin.tar.gz  -C /usr/local/server/

(3)创建data 目录

cd /usr/local/server/apache-zookeeper-3.5.8-bin/
mkdir data 

(4)配置cfg

cd /usr/local/server/apache-zookeeper-3.5.8-bin/conf
mv zoo_sample.cfg zoo.cfg

修改配置zoo.cfg:

1606639630697

(5)启动

cd /usr/local/server/apache-zookeeper-3.5.8-bin/bin
./zkServer.sh start

kafka安装

(1)下载

1609058491119

(2)上传到虚拟机服务器并进行解压,解压到/usr/local/server下

tar -xvf kafka_2.12-2.3.0.tgz -C /usr/local/server/

(3)修改配置文件:/usr/local/server/kafka_2.12-2.3.0/config/server.properties

1609058691321

(4)创建如上图所示的log目录

mkdir -p /usr/local/server/kafka_2.12-2.3.0/logs

(5)启动zookeeper 和 kafka

启动zookeeper

cd /usr/local/server/apache-zookeeper-3.5.8-bin/bin

./zkServer.sh start

启动kafka

cd /usr/local/server/kafka_2.12-2.3.0/

bin/kafka-server-start.sh config/server.properties

13 安装seata-server

1 配置文件准备

# 创建配置文件存放的卷, 方便修改
docker volume create seata-config
# 进入映射的seata-server配置文件目录下
cd /var/lib/docker/volumes/seata-config/_data
上传资料中的 "docker布置seata需要的配置文件" 到 /var/lib/docker/volumes/seata-config/_data 这个目录下

2 nacos中添加seataServer.properties文件

进入nacos配置管理,在public命名空间下,创建seataServer.properties

image-20220418231700187

内容如下:

#****************= 数据库配置 ****************=#
# 事务会话信息存储方式,db代表数据库
store.mode=db
# db模式数据源类型。dbcp、druid、hikari;无默认值,store.mode=db时必须指定
store.db.datasource=druid
# db模式数据库类型。无默认值,store.mode=db时必须指定。
store.db.dbType=mysql
# db模式数据库驱动
store.db.driverClassName=com.mysql.jdbc.Driver
# db模式数据库url
store.db.url=jdbc:mysql://192.168.211.128:3306/seata?useUnicode=true&rewriteBatchedStatements=true
# db模式数据库账户
store.db.user=root
# db模式数据库账户密码
store.db.password=123456
# db模式数据库初始连接数 默认1
store.db.minConn=5
# db模式数据库最大连接数 默认20
store.db.maxConn=30
# db模式全局事务表名 默认global_table
store.db.globalTable=global_table
# db模式分支事务表名 默认branch_table
store.db.branchTable=branch_table
# db模式查询全局事务一次的最大条数 默认100
store.db.queryLimit=100
# db模式全局锁表名 默认lock_table
store.db.lockTable=lock_table
# db模式获取连接时最大等待时间 默认5000,单位毫秒
store.db.maxWait=5000
# ****************** 事务、日志等配置 ******************#
# 二阶段提交未完成状态全局事务重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.committingRetryPeriod=1000
# 二阶段异步提交状态重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.asynCommittingRetryPeriod=1000
# 二阶段回滚状态重试回滚线程间隔时间
server.recovery.rollbackingRetryPeriod=1000
# 超时状态检测重试线程间隔时间 默认1000,单位毫秒,检测出超时将全局事务置入回滚会话管理器
server.recovery.timeoutRetryPeriod=1000
# 二阶段提交重试超时时长。单位ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1表示无限重试。公式: timeout>=now-globalTransactionBeginTime,true表示超时则不再重试(注: 达到超时时间后将不会做任何重试,有数据不一致风险,除非业务自行可校准数据,否者慎用)
server.maxCommitRetryTimeout=-1
# 	二阶段回滚重试超时时长 与maxCommitRetryTimeout类似
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
# undo保留天数 默认7天
server.undo.logSaveDays=7
# undo清理线程间隔时间 默认86400000,单位毫秒
server.undo.logDeletePeriod=86400000

# client和server通信编解码方式 默认seata(ByteBuf)
transport.serialization=seata
# client和server通信数据压缩方式 none、gzip,默认none
transport.compressor=none
# 关闭metrics功能,默认false关闭,在False状态下,所有与Metrics相关的组件将不会被初始化,使得性能损耗最低
metrics.enabled=false

执行sql脚本

3 创建容器

docker run -d --restart=always --name seata-server \
-p 8091:8091 \
-v seata-config:/seata-server/resources  \
-e SEATA_IP=192.168.211.128 \
-e SEATA_PORT=8091 \
seataio/seata-server:1.3.0

14 安装redis-server

docker volume create redis-data
docker run -d --restart=always --name redis -p 6379:6379 -v redis-data:/data redis:5.0.2

15 FastDFS服务端搭建

# 拉取镜像
docker pull morunchang/fastdfs

# 创建storage的数据卷
docker volume create fdfs-data

# 运行tracker
docker run -d --name tracker --restart=always --net=host morunchang/fastdfs sh tracker.sh

# 运行storage
docker run -d --name storage --net=host -e TRACKER_IP=192.168.211.128:22122 -e GROUP_NAME=group1 -v fdfs-data:/data/fast_data morunchang/fastdfs sh storage.sh

16 docker 安装nginx并挂载目录

  • 建立nginx挂载目录
mkdir /home/docker/nginx/conf
mkdir /home/docker/nginx/html
mkdir /home/docker/nginx/log

image-20230304085141569

  • 创建临时的nginx
docker run -d --name nginx-test nginx

image-20230304085120838

  • 拷贝容器中的配置文件到挂载目录
docker cp nginx-test:/etc/nginx/conf.d /home/docker/nginx/conf

docker cp nginx-test:/etc/nginx/nginx.conf /home/docker/nginx/conf/nginx.conf

docker cp nginx-test:/usr/share/nginx/html /home/docker/nginx/
  • 停止删除临时的nginx
docker stop nginx-test
  • 查看所有容器
docker ps -a

image-20230304090759049

  • 删除临时nginx
docker rm nginx-test

image-20230304090909593

  • 创建挂载nginx
docker run -d -p 80:80 --restart=always --name nginx \
-v /home/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/docker/nginx/html:/usr/share/nginx/html \
-v /home/docker/nginx/log:/var/log/nginx \
nginx

image-20230304092732785

  • 大功告成访问服务器80端口测试一下

image-20230304092839886

17.CentOS7安装DockerCompose

1. 安装

第一种方式

安装epel源

yum install -y epel-release

安装docker-compose

yum install -y docker-compose 

第二种方式

Linux下需要通过命令下载:

# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

如果下载速度较慢,或者下载失败,可以使用课前资料提供的docker-compose文件:

image-20210417133020614

上传到/usr/local/bin/目录也可以。

2. 修改文件权限

修改文件权限:

# 修改权限
chmod +x /usr/local/bin/docker-compose

3. Base自动补全命令:

# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

如果这里出现错误,需要修改自己的hosts文件:

echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts

4. DockerCompose 一键安装绝大部分常用软件

nginx:使用最新版的 nginx 镜像,命名为 my_nginx。将容器的 80 端口映射到宿主机的 80 端口,同时挂载了三个卷,分别是 nginx_conf、nginx_html 和 nginx_logs。

redis:使用最新版的 redis 镜像,命名为 my_redis。将容器的 6379 端口映射到宿主机的 6379 端口,同时挂载了一个名为 redis_data 的卷。

mysql:使用最新版的 mysql 镜像,命名为 my_mysql。设置了环境变量 MYSQL_ROOT_PASSWORD 为 root,同时挂载了一个名为 mysql_data 的卷。

nacos:使用最新版的 nacos/nacos-server 镜像,命名为 my_nacos。将容器的 8848 端口映射到宿主机的 8848 端口,同时挂载了一个名为 nacos_data 的卷。

es:使用最新版的 docker.elastic.co/elasticsearch/elasticsearch 镜像,命名为 my_es。将容器的 9200 和 9300 端口映射到宿主机的相应端口,同时挂载了一个名为 es_data 的卷。

sentinel-dashboard:使用最新版的 bladex/sentinel-dashboard 镜像,命名为 my_sentinel_dashboard。将容器的 8080 端口映射到宿主机的 8080 端口。

kafka:使用最新版的 bitnami/kafka 镜像,命名为 my_kafka。将容器的 9092 端口映射到宿主机的 9092 端口,同时挂载了一个名为 kafka_data 的卷。

mongodb:使用最新版的 mongo 镜像,命名为 my_mongodb。设置了环境变量 MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD,同时将容器的 27017 端口映射到宿主机的 27017 端口,同时挂载了一个名为 mongodb_data 的卷。

portainer: 它是一个docker图形化界面
此外,还定义了 8 个卷,分别是 nginx_conf、nginx_html、nginx_logs、redis_data、mysql_data、nacos_data、es_data 和 kafka_data。

步骤

  1. 先建一个空目录
  2. 创建docker-compose.yml文件
  3. 把以下代码复制到文件中
  4. 在docker-compose.yml文件所在目录下 执行命令:docker-compose up -d
version: '3.5'

services:
  nginx:
    image: nginx:latest
    container_name: my_nginx
    restart: always
    ports:
      - "80:80"
    volumes:
      - type: volume
        source: nginx_conf
        target: /etc/nginx/conf.d
        read_only: false
      - type: volume
        source: nginx_html
        target: /usr/share/nginx/html
        read_only: false
      - type: volume
        source: nginx_logs
        target: /var/log/nginx
        read_only: false

  redis:
    image: redis:latest
    container_name: my_redis
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - type: volume
        source: redis_data
        target: /data
        read_only: false

  mysql:
    image: mysql:latest
    container_name: my_mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - type: volume
        source: mysql_data
        target: /var/lib/mysql
        read_only: false

  nacos:
    image: nacos/nacos-server:latest
    container_name: my_nacos
    restart: always
    ports:
      - "8848:8848"
    environment:
      - PREFER_HOST_MODE=hostname
    volumes:
      - type: volume
        source: nacos_data
        target: /home/nacos/nacos/data
        read_only: false

  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.15.1
    container_name: my_es
    restart: always
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - discovery.type=single-node
    volumes:
      - type: volume
        source: es_data
        target: /usr/share/elasticsearch/data
        read_only: false

  sentinel-dashboard:
    image: bladex/sentinel-dashboard:latest
    container_name: my_sentinel_dashboard
    restart: always
    ports:
      - "8080:8080"

  kafka:
    image: bitnami/kafka:latest
    container_name: my_kafka
    restart: always
    ports:
      - "9092:9092"
    environment:
      - ALLOW_PLAINTEXT_LISTENER=yes
    volumes:
      - type: volume
        source: kafka_data
        target: /bitnami/kafka/data
        read_only: false

  mongodb:
    image: mongo:latest
    container_name: my_mongodb
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
    ports:
      - "27017:27017"
    volumes:
      - type: volume
        source: mongodb_data
        target: /data/db
        read_only: false

  portainer:
    image: portainer/portainer-ce:latest
    container_name: my_portainer
    restart: always
    ports:
      - "9000:9000"
    volumes:
      - type: volume
        source: portainer_data
        target: /data
        read_only: false

volumes:
  nginx_conf:
  nginx_html:
  nginx_logs:
  redis_data:
  mysql_data:
  nacos_data:
  es_data:
  kafka_data:
  mongodb_data:
  portainer_data: