docker软件安装笔记
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
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
用户名/密码: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
如上图还需要导入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:
(5)启动
cd /usr/local/server/apache-zookeeper-3.5.8-bin/bin
./zkServer.sh start
kafka安装
(1)下载
(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
(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
内容如下:
#****************= 数据库配置 ****************=#
# 事务会话信息存储方式,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
- 创建临时的nginx
docker run -d --name nginx-test nginx
- 拷贝容器中的配置文件到挂载目录
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
- 删除临时nginx
docker rm nginx-test
- 创建挂载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
- 大功告成访问服务器80端口测试一下
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文件:
上传到/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。
步骤
- 先建一个空目录
- 创建docker-compose.yml文件
- 把以下代码复制到文件中
- 在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: