基于Docker部署全新一套中间件环境 - 命令行极速版
背景
本文是一篇流水账笔记,记录基于命令行和Docker
快速部署一个全新环境的中间件,精通多种中间件的安装(与卸载)。
获取Docker中运行的组件的内网IP【这里指的Docker环境内网,不是宿主机的网络】: docker inspect –format ‘{{ .NetworkSettings.IPAddress }}’ {容器实例名称}
本文基于CentOS7.x
和当前最新的Docker
版本编写,注意其他操作系统不一定合适。
安装Docker
移除已经存在的旧版本Docker
:
- 折叠命令:
sudo yum remove docker \ |
- 单行命令:
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine |
安装基础依赖包:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 |
替换软件源(安装提速):
阿里云源 |
安装(最新版本的Docker Engine-Community
和containerd.io
)Docker
:
sudo yum install -y docker-ce docker-ce-cli containerd.io |
或者指定版本安装:
展示版本 |
如果提示:如果提示您接受GPG密钥?则选择y
(安装完成后默认不会启动Docker
进程,需要手动启动)启动Docker
进程:
sudo systemctl start docker |
Docker
进程管理常用命令:
命令 | 功能 |
---|---|
systemctl start docker |
启动Docker 进程 |
systemctl stop docker |
停止Docker 进程 |
systemctl restart docker |
重启Docker 进程 |
systemctl enable docker |
允许Docker 服务在服务器重启后自启动 |
【可选】修改Docker
镜像和容器的默认存储位置。默认存储位置为/var/lib/docker
目录,此目录一般是系统目录。假设需要迁移到数据目录/data/docker
,迁移的方法有很多,这里推荐使用软链接的方式:
停止Docker进程 |
中间件安装信息
中间件 | 容器名称 | 版本 | 端口映射 | 备注 |
---|---|---|---|---|
MySQL |
mysql8 |
8.0 |
3306 -> 3306 |
- |
RabbitMQ |
rabbitmq |
3.8 |
5672 -> 5672 、15672 -> 15672 |
选用*-management 镜像,默认启用了后台管理的WebUI 插件 |
Redis |
redis |
5.0 |
6379 -> 6379 |
- |
Nacos |
nacos |
1.4.2 |
8848 -> 8848 |
- |
Zookeeper |
zookeeper |
3.6 |
2181 -> 2181 、2888 -> 2888 、3888 -> 3888 |
- |
Kafka |
kafka |
2.13-2.6.0 |
9092 -> 9092 |
需要配置宿主机的IP |
ElasticSearch |
elasticsearch |
7.3.1 |
9300 -> 9300 |
需要修改系统配置 |
如果想安装的中间件容器在服务器重启和Docker
进程重启后自行重启,可以考虑在启动容器的时候添加参数--restart=always
;如果想容器内部的root
用户拥有真正的root
权限,则需要在启动容器的时候添加参数--privileged=true
(此参数有安全性风险,谨慎使用)。
基于Docker安装MySQL
新建MySQL
宿主机目录:
/data/mysql8/conf
:配置目录/data/mysql8/data
:数据目录/data/mysql8/logs
:日志目录
新增配置文件/data/mysql8/conf/my.cnf
,文件内容如下:
[client] |
拉取MySQL8.x
镜像:
最新的MySQL镜像就是8.x的,也可以执行版本拉取 |
基于镜像启动MySQL8.x
容器,脚本如下:
docker run -d -v /data/mysql8/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql8/logs:/var/log -v /data/mysql8/data:/var/lib/mysql -p 3306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0 |
进入MySQL8.x
容器新增可以远程访问的root
用户,修改密码编码方式:
进入容器内部 |
基于Docker安装RabbitMQ
新建RabbitMQ
宿主机目录:
mkdir -p /data/rabbitmq/{conf,data,logs} |
/data/rabbitmq/conf
:配置目录/data/rabbitmq/data
:数据目录/data/rabbitmq/logs
:日志目录
拉取RabbitMQ3.8.x
镜像:
需要拉取带后台管理插件的镜像,否则后台管理插件需要自行安装 |
基于镜像启动RabbitMQ3.8.x
容器:
docker run -d -p 5672:5672 -p 15672:15672 -v /data/rabbitmq/data:/var/lib/rabbitmq -v /data/rabbitmq/conf:/etc/rabbitmq -v /data/rabbitmq/logs:/var/log/rabbitmq --name rabbitmq rabbitmq:3.8-management |
进入RabbitMQ3.8.x
容器内部新增管理员用户和授权:
进入容器内部 |
基于Docker安装Redis
新建Redis5.x
宿主机目录:
mkdir -p /data/redis/{conf,data} |
下载Redis5.x
的默认配置(https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf
)到/data/redis/conf
中,并且对配置文件redis.conf
进行修改:
- 注释掉
bind 127.0.0.1
protected-mode yes
修改为protected-mode no
- 添加
requirepass=密码
拉取Redis5.0
镜像:
docker pull redis:5.0 |
基于镜像启动Redis5.0
容器:
docker run -d --privileged=true -p 6379:6379 -v /data/redis/conf/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data --name redis redis:5.0 redis-server /etc/redis/redis.conf --appendonly yes |
基于Docker安装Nacos
新建Nacos
宿主机目录:
mkdir -p /data/nacos/{logs,conf} |
/data/nacos/logs
:日志目录/data/nacos/conf
:配置目录
拉取Nacos1.4.2
镜像:
docker pull nacos/nacos-server:1.4.2 |
从nacos-1.4.2
的源码中找到建表语句,这个版本的源码链接是https://github.com/alibaba/nacos/archive/refs/tags/1.4.2.tar.gz
,然后基于里面的nacos-db.sql
进行建表,从脚本中观察到,数据库schema
最好命名为nacos_config
。然后基于镜像启动Nacos1.4.2
容器:
docker run -d \ |
拷贝和修改宿主机配置/data/nacos/conf/application.properties
:
server.tomcat.accesslog.enabled=false |
然后重启Nacos1.4.2
容器:
docker restart nacos |
{MySQL容器实例Docker内网IP}是Docker中MySQL实例的Docker环境内网IP,通过本文初提到的命令:docker inspect –format ‘{{ .NetworkSettings.IPAddress }} mysql获取
基于Docker安装Zookeeper
新建Zookeeper
宿主机目录:
mkdir -p /data/zookeeper/{data,logs,conf} |
/data/zookeeper/logs
:日志目录/data/zookeeper/conf
:配置目录/data/zookeeper/data
:数据目录
拉取Zookeeper3.6
镜像:
docker pull zookeeper:3.6 |
随便启动一个Zookeeper
容器并且拷贝其中的zoo.cfg文件到宿主机本地目录:
docker run -d --name zk zookeeper:3.6 |
最后基于镜像启动Zookeeper3.6
容器:
docker run -d --name zookeeper \ |
基于Docker安装Kafka
考虑到一般情况下的Kafka
的存储数据量不会十分大并且很少进行迁移,不做宿主机的目录挂载,这里直接把数据等放在容器实例中。拉取Kafka:2.13-2.6.0
镜像:
docker pull wurstmeister/kafka:2.13-2.6.0 |
注意前提是必须已经启动了Zookeeper
容器,这里使用前一小节的Zookeeper
容器,获取其实例的Docker
内网IP
:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' zookeeper |
最后基于镜像启动Kafka:2.13-2.6.0
容器:
docker run -d --name kafka -p 9092:9092 \ |
基于Docker安装ElasticSearch
新建ElasticSearch
宿主机目录:
mkdir -p /data/es/{data,logs,conf} |
/data/es/logs
:日志目录/data/es/conf
:配置目录/data/es/data
:数据目录
拉取Elasticsearch7.3.1
镜像:
docker pull elasticsearch:7.3.1 |
修改系统配置以满足Elasticsearch
实例运行:
sysctl -w vm.max_map_count=262144 |
随便启动一个Elasticsearch
容器并且拷贝其中的elasticsearch.yml
文件到宿主机本地目录:
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.3.1 |
最后基于镜像启动Elasticsearch7.3.1
容器:
docker run -d --name elasticsearch \ |
未完待续
安装所有中间件完成后的示例如下:
这篇流水账记录的是工作或者日常实验用到的中间件,其他中间件用到后会陆续添加。
(to be continue… f-e-a 20211216 c-2-d)