# 部署中间件

# Tips

  1. -p xxx:xxx 冒号左边为宿主机端口,右边为容器内部端口

# 清单

# MySQL

启动的同时初始化数据库, 并且允许远程连接

当Mysql容器首次启动时,会在容器内部的/docker-entrypoint-initdb.d(启动逻辑在entrypoint.sh中)目录下扫描 .sh,.sql等文件。如果这些类型的文件存在,将执行它们来初始化数据库。

  1. 准备初始化脚本
# 创建存放初始化脚本的文件夹
mkdir -p /opt/app/mysql5.7/init-data/
# 清理历史脚本
rm -rf /opt/app/mysql5.7/init-data/*

# 给预创建的用户除业务库之外的其他库查询权限
cat > /opt/app/mysql5.7/init-data/init.sql << EOF
use mysql;
GRANT SELECT ON *.* TO '<需要预创建的用户名称>'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
flush privileges;
EOF

# 生成修改sql_mode的脚本,往/etc/my.cnf文件追加sql_mode配置
cat > /opt/app/mysql5.7/init-data/init.sh << EOF
echo "sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'" >> /etc/my.cnf
EOF
  1. 部署
# 删除历史数据库,加上-f后,不会因为没有容器而报错停止,而是继续往下执行
docker rm -f mysql-server
# 部署
docker run --name mysql-server \
      -e MYSQL_DATABASE="<需要预创建的数据库名称>" \
      -e MYSQL_USER="<需要预创建的用户名称,推荐和数据库同名>" \
      -e MYSQL_PASSWORD="<数据库密码>" \
      -e MYSQL_ROOT_PASSWORD="<ROOT用户数据库连接密码>" \
      -p 3306:3306 \
      -v /opt/app/mysql5.7/init-data:/docker-entrypoint-initdb.d \
      -d mysql/mysql-server:5.7 \
      --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci \
      --lower_case_table_names=1
  • 数据库管理工具

用Web图形模式直接管理MySQL数据库的工具

docker run --name some-myadmin -d -e PMA_ARBITRARY=1 -p 8082:80 phpmyadmin/phpmyadmin

# RabbitMQ

  • 命令
docker run -d --name some-rabbit \
  -p 5671:5671 \ 
  -p 15671:15671 \
  -p 5672:5672 \
  -p 15672:15672 \
  -p 25672:25672 \
  -p 4369:4369 \
  rabbitmq:3-management
  • 提示 初始化用户名:guest 初始化密码:guest

# Redis

  • 无密码版本
docker run -d --name some-redis -p 6379:6379 redis
  • 有密码版本
docker run -d --name some-redis -p 6379:6379 redis --requirepass <密码>

# MongoDB

  • 命令
docker run -d -p 27017:27017 -e MONGODB_DATABASE=<数据库名称> \
         -e MONGODB_USERNAME=<用户名> \
         -e MONGODB_PASSWORD=<密码> \
         -e MONGODB_ROOT_PASSWORD=<root用户密码> \
         --name some-mongo mongo
Last Updated: 11/13/2022, 8:40:33 PM