Docker安装常用中间件服务
MySQL
下载MySQL镜像
docker pull mysql
创建文件目录
mkdir -p /home/docker/mysql/{conf,log,data}
创建MySQL配置文件
cd /home/docker/mysql/conf
touch my.cnf
启动MySQL容器实例
docker run -p 3306:3306 --name mysql \
-v /home/docker/mysql/conf:/etc/mysql/conf.d \
-v /home/docker/mysql/log:/var/log/mysql \
-v /home/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=Hard-1234 \
-e TZ=Asia/Shanghai \
--restart=always \
-d mysql:latest
mysql远程连接(需要进入docker本地客户端设置远程访问账号)
docker exec -it mysql bash
mysql -uroot -pHard-1234
修改密码
use mysql;
update user set authentication_string=password('新密码') where user='root' and Host='localhost';
flush privileges;
update user set host='%' where user='root';
flush privileges;
# 或者
ALTER USER 'root'@'%' IDENTIFIED BY 'Hard-1368' WITH GRANT OPTION;
flush privileges;
# 或者
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Hard-1368';
flush privileges
MySQL配置
# 去除group by 语句限制
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIO
注:MySQL(5.7.19)的默认配置文件是 /etc/mysql/my.cnf 文件。如果想要自定义配置,建议向 /etc/mysql/conf.d 目录中 创建 .cnf 文件。新建的文件可以任意起名,只要保证后缀名是 cnf 即可。新建的文件中的配置项可以覆盖 /etc/mysql/my.cnf 中的配置项。 具体操作: 注意!注意!注意!首先需要创建将要映射到容器中的目录以及.cnf文件,然后再创建容器 建立目录映射
命令说明:
-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
添加如下编码相关配置,将编码统一为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
Redis5
下载redis镜像
docker pull redis:5
因为启动Redis容器和其他容器有点区别,Redis启动时是没有默认配置文件的,我们需要在启动时设置一条额外的启动命令,让Redis加载指定的配置文件启动,所以我们要提前在宿主机创建好这个配置文件并映射到容器中。首先在宿主机创建redis配置文件对应的数据卷,然后创建1个空的redis配置文件
创建目录
mkdir -p /home/docker/redis/{conf,data}
创建空的配置文件
touch /home/docker/redis/conf/redis.conf
在配置文件中添加常用的配置
vim /home/docker/redis/conf/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 /home/docker/redis/data:/data \ # 映射容器的redis数据目录到宿主机的数据卷
-v /home/docker/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
以我们指定的配置文件启动
设置docker启动时自动启动redis
docker update redis5 --restart=always
RabbitMQ
相关文献 https://www.cnblogs.com/yy-cola/p/11089800.html https://blog.csdn.net/ClassmateLin/article/details/104559569
拉取RabbitMQ镜像
docker pull rabbitmq:management
在home目录下创建需要映射的目录:
mkdir -p /home/docker/rabbitmq/{lib,log}
创建并启动实例
# 运行容器 映射端口 持久化路径 配置用户名密码
docker run -it --name iot-rabbitmq \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
-p 15672:15672 -p 5672:5672 \
-v /home/docker/rabbitmq/lib:/var/lib/rabbitmq \
-v /home/docker/rabbitmq/log:/var/log/rabbitmq \
--restart=always \
-d rabbitmq:management
注:在最新版本中,不在支持密码和用户设置,以及log没有权限映射出
docker run -it --name iot-rabbitmq \
-p 15672:15672 -p 5672:5672 -p 25672:25672 \
-v /home/docker/rabbitmq/lib:/var/lib/rabbitmq \
--restart=always \
-d rabbitmq:management
运行容器,注意要配置3个端口映射:
5672
:与rabbitmq通信的端口号,建立连接、发送消息等都是用这个端口15672
:访问rabbitmq控制台图形界面的端口25672
:rabbitmq集群通信的端口号
rabbitmq 后台配置
# 配置控制台
docker exec -it iot-rabbitmq bash
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
ElasticSearch7
首先下载ES和kibana的镜像,kibana可以看做是可视化操作ES的工具
docker pull elasticsearch:7.8.0
docker pull kibana:7.8.0
在运行ES之前,要先看一下宿主机内存够不够,ES比较占用内存,默认最大占用内存1G,建议剩余1.5G以上内存
free -h
创建目录
mkdir -p /home/docker/elasticsearch/{conf,data,plugins}
创建并运行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 /home/docker/elasticsearch/conf:/usr/share/elasticsearch/config \ # 映射配置目录
-v /home/docker/elasticsearch/data:/usr/share/elasticsearch/data \ # 映射数据目录
-v /home/docker/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插件目录
运行容器成功后,可以在浏览器测试访问
http://192.168.153.190:9200
创建映射目录–kibana
mkdir -p /home/docker/kibana/{conf,data}
然后我们再创建并运行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
elasticsearch.hosts:["http://192.168.153.190:9200"]
然后重启kibana容器
docker restart kibana7.8
测试kibana
http://192.168.153.190:5601
Nginx
首先拉取镜像
docker pull nginx
创建映射目录
mkdir -p /home/docker/nginx/{conf,log,html}
启动nginx容器
docker run -d --name nginx \
-p 80:80 -p 443:443
-e TZ="Asia/Shanghai" \
-v /home/docker/nginx/conf:/etc/nginx \
-v /home/docker/nginx/html:/usr/share/nginx/html \
-v /home/docker/nginx/log:/var/log/nginx nginx:latest
其中映射的目录介绍如下:
/etc/nginx
:nginx配置文件目录/usr/share/nginx/html
:nginx静态资源文件目录/var/log/nginx
:nginx日志文件目录
docker会自动在宿主机上创建数据卷nginx.conf
、nginx.html
和nginx.log
,并将容器中对应映射目录原有的所有文件拷贝到数据卷中
最后访问宿主机ip+80端口即可看到nginx欢迎页面
MongoDB
首先拉取镜像
docker pull Mongo
创建映射目录
mkdir -p /home/docker/mongodb/db
启动MongoDB容器
docker run -itd --name mongodb \
-v /home/docker/mongodb/db:/data/db \
-p 27017:27017 --restart=always \
-d mongo:latest --auth
配置
# --auth表示连接mongodb需要授权
# 进入MongoDB控制台
docker exec -it mongodb mongo admin
# 创建一个名为admin,密码为123456的用户。
db.createUser({user:'angel',pwd:'Angel#1368',roles:[{role:'userAdminAnyDatabase',db:'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接。
db.auth('angel','Angel#1368')