用Docker安装常用的中间件服务非常方便,本文记录了如何用Docker安装常用的一些中间件服务
MySQL5.7
下载MySQL5.7镜像
docker pull mysql:5.7
启动MySQL容器实例
docker run -p 3306:3306 --name mysql5.7 \
-v mysql.conf:/etc/mysql \ # 映射容器与宿主机的mysql配置目录
-v mysql.log:/var/log/mysql \ # 映射容器与宿主机的mysql日志目录
-v mysql.data:/var/lib/mysql \ # 映射容器与宿主机的mysql数据目录
-e MYSQL_ROOT_PASSWORD=root \
-e TZ="Asia/Shanghai" # 指定容器时区,不指定的话mysql的时间函数执行结果会不正确
-d mysql:5.7
命令说明:
-p 3306:3306
:将主机的3306端口映射到docker容器的3306端口--name mysql5.7
:运行的容器的名字-v mysql.conf:/etc/mysql
:将MySQL容器的/etc/mysql
配置文件目录映射到宿主机的数据卷mysql.conf
,同步配置文件-v mysql.log:/var/log/mysql
:将MySQL容器的/var/log/mysql
日志文件目录映射到宿主机的数据卷mysql.log
,同步日志文件-v mysql.data:/var/lib/mysql
:将MySQL容器的/var/lib/mysql
数据文件目录映射到宿主机的数据卷mysql.data
,同步数据库数据-e MYSQL_ROOT_PASSWORD=root
:配置环境变量,初始化root用户的密码。必须指定,否则无法启动容器-e TZ="Asia/Shanghai"
:配置环境变量,指定容器时区,不指定的话MySQL的时间函数执行结果会不正确-d mysql:5.7
: 后台程序运行MySQL
然后查看宿主机对应的MySQL配置文件数据卷的具体路径
docker volume inspect mysql.conf
进入该目录修改MySQL配置文件
cd /var/lib/docker/volumes/mysql.conf/_data
vim mysql.conf.d/mysqld.cnf
添加如下编码相关配置,将编码统一为UTF-8
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection=utf8_general_ci'
init_connect='SET NAMES utf8'
character_set_server=utf8
collation_server=utf8_general_ci
重启容器,由于主机的配置文件已经同步到容器中,所以新的配置就会生效
docker restart mysql5.7
如果需要,可以设置每次docker启动时自动启动MySQL
docker update mysql5.7 --restart=always
Redis5
下载redis镜像
docker pull redis:5
因为启动Redis容器和其他容器有点区别,Redis启动时是没有默认配置文件的
,我们需要在启动时设置一条额外的启动命令,让Redis加载指定的配置文件启动,所以我们要提前在宿主机创建好这个配置文件并映射到容器中
。首先在宿主机创建redis配置文件对应的数据卷,然后创建1个空的redis配置文件
docker volume create redis.conf
touch /var/lib/docker/volumes/redis.conf/_data/redis.conf
在配置文件中添加常用的配置
vim /var/lib/docker/volumes/redis.conf/_data/redis.conf
# 端口
port 6379
# RDB相关配置
save 900 1
save 300 10
save 60 10000
rdbcompression yes
# 数据目录
dir /data
# AOF相关配置
appendonly yes
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 密码
requirepass baobao
创建容器实例并启动
docker run -p 6379:6379 -d --name redis5 \
-v redis.data:/data \ # 映射容器的redis数据目录到宿主机的数据卷
-v redis.conf:/etc/redis \ # 映射容器的redis配置目录到宿主机的数据卷
-e TZ="Asia/Shanghai" \ # 指定容器时区
redis:5 redis-server /etc/redis/redis.conf # 设置启动时的额外命令,加载容器的/etc/redis/redis.conf配置启动
注意:这里在启动容器时需要添加额外的启动命令
redis-server /etc/redis/redis.conf
以我们指定的配置文件启动
使用客户端连接redis,测试存取数据
设置docker启动时自动启动redis
docker update redis5 --restart=always
RabbitMQ
使用docker下载带有图形化管理页面的rabbitMQ
docker pull rabbitmq:3.7-management
运行容器,注意要配置3个端口映射:
5672
:与rabbitmq通信的端口号,建立连接、发送消息等都是用这个端口15672
:访问rabbitmq控制台图形界面的端口25672
:rabbitmq集群通信的端口号
docker run -d --name rabbitmq3.7 -v rabbitmq.conf:/etc/rabbitmq -e TZ="Asia/Shanghai" -p 5672:5672 -p 25672:25672 -p 15672:15672 rabbitmq:3.7-management
其中/etc/rabbitmq
为rabbitmq配置文件所在目录
登陆图形化管理页面,账号密码都是guest
ElasticSearch7
首先下载ES和kibana的镜像,kibana可以看做是可视化操作ES的工具
docker pull elasticsearch:7.8.0
docker pull kibana:7.8.0
在运行ES之前,要先看一下宿主机内存够不够,ES比较占用内存,默认最大占用内存1G,建议剩余1.5G以上内存
free -h
创建并运行ES容器
docker run -d --name elasticsearch7.8 -p 9200:9200 -p 9300:9300 \ # 指定端口,9200是访问端口,9300是节点通信端口
-e "discovery.type=single-node" \ # 单节点模式
-e TZ="Asia/Shanghai" # 指定时区
-v elasticsearch.conf:/usr/share/elasticsearch/config \ # 映射配置目录
-v elasticsearch.data:/usr/share/elasticsearch/data \ # 映射数据目录
-v elasticsearch.plugins:/usr/share/elasticsearch/plugins \ # 映射插件目录
elasticsearch:7.8.0
其中容器内相关的目录介绍如下:
/usr/share/elasticsearch/config
:ES配置文件目录/usr/share/elasticsearch/data
:ES数据目录/usr/share/elasticsearch/plugins
:ES插件目录
运行容器成功后,可以在浏览器测试访问
然后我们再创建并运行kibana容器
docker run -d --name kibana7.8 -e TZ="Asia/Shanghai" -p 5601:5601 -v kibana.conf:/usr/share/kibana/config kibana:7.8.0
这里/usr/share/kibana/config
是kibana的配置文件目录
启动后修改kibana的配置文件,指定要连接的ES的地址
cd /var/lib/docker/volumes/kibana.conf/_data
vim kibana.yml
然后重启kibana容器
docker restart kibana7.8
测试kibana
Nginx
首先拉取镜像
docker pull nginx:1.16.1
启动nginx容器
docker run -d -p 80:80 -p 443:443 --name nginx1.16 -e TZ="Asia/Shanghai" -v nginx.conf:/etc/nginx -v nginx.html:/usr/share/nginx/html -v nginx.log:/var/log/nginx nginx:1.16.1
其中映射的目录介绍如下:
/etc/nginx
:nginx配置文件目录/usr/share/nginx/html
:nginx静态资源文件目录/var/log/nginx
:nginx日志文件目录
docker会自动在宿主机上创建数据卷nginx.conf
、nginx.html
和nginx.log
,并将容器中对应映射目录原有的所有文件拷贝到数据卷中
最后访问宿主机ip+80端口即可看到nginx欢迎页面
评论区