Docker部署常用中间件

平时自己开发的时候需要部署很多中间件,这里用Docker可以一个虚拟机就能部署多个应用,不用开多台虚拟机了。

一个操作手册,记录大多数常见中间件的部署

Docker 安装

Centos7安装Docker

1、确定版本是centos7以上

1
cat /etc/redhat-release

2、卸载旧版本

1
2
3
4
5
6
7
8
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

3、yum安装gcc相关

1
2
3
4
yum -y install gcc
yum -y install gcc-c++
或者一条
yum -y install gcc gcc-c++

4、安装需要的软件包

1
yum install -y yum-utils

5、设置stable镜像仓库

1
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

6、更新yum软件包索引

1
yum makecache fast

7、安装docker ce

1
yum -y install docker-ce docker-ce-cli containerd.io

8、启动docker

1
systemctl start docker

9、测试

1
docker version

10、卸载

1
2
3
4
systemctl stop docker 
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

阿里云镜像加速

网站

1
https://promotion.aliyun.com/ntms/act/kubernetes.html

自己上阿里云搜索容器镜像服务,然后创建镜像仓库个人版然后创建仓库,复制地址即可。

然后配置镜像加速器,跟着命令复制粘贴即可。

然后测试运行

1
docker run hello-world

然后记得在docker中登录实例。

阿里云镜像加速器目前仅限「阿里云 ECS 实例」在「同地域内网」环境下使用,且只支持拉取部分官方镜像。
如果你在 本地电脑、非阿里云服务器、或通过公网访问即使配置了加速地址,也会被拒绝(返回 403 或超时)

Nacos

注册中心,首先我们前提是已经安装好了Docker,然后拉取Nacos

1
2
docker pull nacos/nacos-server:2.2.3
docker run -d -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODE=standalone --name nacos nacos:2.2.3

单机版启动nacos,然后通过Ifconfig查到centos7的ip地址然后访问http://ip地址:8848/nacos账号和密码都是nacos

然后docker ps 看看是否有没有启动好。

最好用2.2.3版本太新太老都不好,要配置很多别的东西。

Redis

首先有一个redis然后复制一个redis.conf,

1
2
3
4
5
6
7
8
# redis.conf (精简版)
bind 0.0.0.0
protected-mode yes
port 6379
requirepass YourStrongPassword123!
dir /data
appendonly yes
daemonize no

然后就配置好了

Mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
新建mysql容器实例,也就是说mysql这些要挂容器数据卷

权限开启,挂了三个卷,日志卷,数据卷,配置卷
解决中文乱码:
cd /oyyuse/mysql/conf
新建my.cnf,通过容器卷同步给mysql容器实例
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
重新启动mysql容器实例再重新进入并查看字符编码
再新建库新建表再插入中文测试
结论:docker安装完MySQL并run出容器后,建议请先修改完字符集编码后再新建mysql库-表-插数据
1
2
3
4
5
6
7
8
~/uushop/
├── docker-compose.yml
├── mysql/
│ ├── data/
│ ├── log/
│ └── conf/my.cnf
└── redis/
└── redis.conf

最终目录结构

然后可以编排docker-compose.yml

Rocketmq

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
docker pull apache/rocketmq:4.7.1
然后mkdir rocketmq
然后cd rocketmq
然后
version: '3.8'

services:
# ========== Nacos ==========
nacos:
image: nacos:3.0.2
container_name: uushop-nacos
environment:
- MODE=standalone
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=uushop-mysql
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_DB_NAME=nacos_config
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=123456
ports:
- "8848:8848"
- "9848-9849:9848-9849"
depends_on:
- mysql
networks:
- uushop-net

# ========== MySQL ==========
mysql:
image: mysql:5.7
container_name: uushop-mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: nacos_config
volumes:
- ./mysql:/var/lib/mysql
- ./nacos-init.sql:/docker-entrypoint-initdb.d/nacos-init.sql
ports:
- "3306:3306"
networks:
- uushop-net

# ========== Redis ==========
redis:
image: redis:6.0.8
container_name: uushop-redis
ports:
- "6379:6379"
networks:
- uushop-net

# ========== RocketMQ NameServer ==========
rocketmq-nameserver:
image: apache/rocketmq:4.7.1
container_name: uushop-rocketmq-nameserver
command: sh mqnamesrv
ports:
- "9876:9876"
volumes:
- ./rocketmq/logs/nameserver:/home/rocketmq/logs
networks:
- uushop-net

# ========== RocketMQ Broker ==========
rocketmq-broker:
image: apache/rocketmq:4.7.1
container_name: uushop-rocketmq-broker
command: >
sh mqbroker
-n uushop-rocketmq-nameserver:9876
-c /home/rocketmq/conf/broker.conf
ports:
- "10911:10911" # broker 通信端口
- "10909:10909" # HA 端口(VIP 通道)
volumes:
- ./rocketmq/broker.conf:/home/rocketmq/conf/broker.conf
- ./rocketmq/store:/home/rocketmq/store
- ./rocketmq/logs/broker:/home/rocketmq/logs
depends_on:
- rocketmq-nameserver
networks:
- uushop-net

# ========== RocketMQ Console (可选) ==========
rocketmq-console:
image: apacherocketmq/rocketmq-console:2.0.0
container_name: uushop-rocketmq-console
environment:
- JAVA_OPTS=-Drocketmq.namesrv.addr=uushop-rocketmq-nameserver:9876
ports:
- "8080:8080"
depends_on:
- rocketmq-nameserver
networks:
- uushop-net

networks:
uushop-net:
name: uushop_uushop-net
external: true