防火墙
启动: systemctl start firewalld
查状态: systemctl status firewalld
停止: systemctl stop firewall
添加出站规则: firewall-cmd --zone=public --add-port=3306/tcp --add-port=3308/tcp --add-port=6379/tcp --add-port=80/tcp --permanent
firewall-cmd --zone=public --permanent \
--add-port=3306/tcp \
--add-port=3308/tcp \
--add-port=6379/tcp \
--add-port=80/tcp \
--add-port=8848/tcp \
--add-port=3306/tcp \
刷新: firewall-cmd --reload
查看: firewall-cmd --list-port
Docker 安装 MySQL
# 下载最新版Mysql镜像 (其实此命令就等同于 : docker pull mysql:latest )
docker pull mysql
# 下载指定版本的Mysql镜像 (xxx指具体版本号)
docker pull mysql:xxx
# 创建目录
mkdir -p /mnt/docker/mysql8/log
mkdir -p /mnt/docker/mysql8/data
mkdir -p /mnt/docker/mysql8/conf
# 写入以下配置文件内容
命令:vi /mnt/docker/mysql8/conf/my.cnf
-----------------
[client]
# socket = /usr/mysql/mysqld.sock
# 设置客户端默认字符集utf8mb4
default-character-set=utf8mb4
[mysql]
# 设置服务器默认字符集为utf8mb4
default-character-set=utf8mb4
[mysqld]
# 配置服务器的服务号,具备日后需要集群做准备
# server-id = 1
# 开启MySQL数据库的二进制日志,用于记录用户对数据库的操作SQL语句,具备日后需要集群做准备
# log-bin=mysql-bin
# 设置清理超过30天的日志,以免日志堆积造过多成服务器内存爆满 默认30天 = 2592000秒
# 8以下
# expire_logs_days=30
# binlog_expire_logs_seconds=2592000
# 解决MySQL8.0版本GROUP BY问题
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
# 允许最大的连接数
max_connections=1000
# 禁用符号链接以防止各种安全风险
symbolic-links=0
# 设置东八区时区
default-time_zone = '+8:00'
# 设置服务器默认字符集为utf8mb4
character_set_server = utf8mb4
collation_server = utf8mb4_bin
# 权限问题修复
datadir = /mnt/mysql/data
# 导出开启
secure-file-priv= NULL
# Custom config should go here
!includedir /etc/mysql/conf.d/
-----------------
# 常用命令
docker run -d \
-p 3306:3306 \
--privileged=true \
--restart=always \
--name mysql8 \
-v /mnt/docker/mysql8/log/:/var/log/mysql/ \
-v /mnt/docker/mysql8/data/:/mnt/mysql/data \
-v /mnt/docker/mysql8/conf/:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql
命令 |
描述 |
docker run |
创建一个新的容器 , 同时运行这个容器 |
–name mysql5.7 |
启动容器的名字 |
-d |
后台运行 |
-p 3306:3306 |
将容器的 3306 (后面那个) 端口映射到主机的 3306 (前面那个) 端口 |
--privileged=true |
赋予容器权限修改宿主文件权利。 |
--restart unless-stopped |
容器重启策略 |
-v /mnt/docker/mysql/log:/var/log/mysql |
将日志文件夹挂载到主机 |
-v /mnt/docker/mysql/data:/var/lib/mysql |
将mysql储存文件夹挂载到主机 |
-v /mnt/docker/mysql/conf:/etc/mysql |
将配置文件夹挂载到主机 |
-e MYSQL_ROOT_PASSWORD=root |
设置 root 用户的密码 |
mysql:5.7 |
启动哪个版本的 mysql (本地镜像的版本) |
\ |
shell 命令换行符 |
Docker 安装 Redis
# 搜索镜像
docker search redis
# 拉取镜像
docker pull redis:6.2.6
# 创建Redis目录和数据目录
mkdir -p /mnt/docker/redis
mkdir -p /mnt/docker/redis/data
# 官网下载redis.conf,并手动上传到redis目录
# 官网地址:https://redis.io/docs/management/config/ -v6.2.6
# 创建容器:appendonly 是否持久化 requirepass 密码
docker run -p 6379:6379 \
--restart=always \
--name redis \
--log-opt max-size=100m \
--log-opt max-file=2 \
-v /mnt/docker/redis/redis.conf:/etc/redis/redis.conf \
-v /mnt/docker/redis/data:/data \
-d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456
# 如果需外网访问,vim /usr/local/server/redis/redis.conf,将bind修改为0.0.0.0,重启容器
Docker 安装 RebbitMQ
# 搜索镜像
docker search rabbitmq:management
# 拉取镜像
docker pull rabbitmq:management
# 创建容器
docker run -d \
--restart=always \
--name=rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
-v /mnt/docker/rabbitmq/data:/var/lib/rabbitmq \
-e RABBITMQ_DEFAULT_USER=root \
-e RABBITMQ_DEFAULT_PASS=123456 \
rabbitmq:management
# 进入容器
docker exec -it rabbitmq /bin/bash
# 安装插件
rabbitmq-plugins enable rabbitmq_management
# 浏览器访问 http://ip:15672
Docker 安装 MongoDB
mkdir -p /mnt/docker/mongodb/conf/
mkdir -p /mnt/docker/mongodb/data/
mkdir -p /mnt/docker/mongodb/logs/
cd /mnt/docker/mongodb/conf/ && vi mongod.conf
---------------------------------------------------------------------
# 数据库文件存储位置
dbpath = /data/db
# log文件存储位置
logpath = /data/log/mongod.log
# 使用追加的方式写日志
logappend = true
# 是否以守护进程方式运行
# fork = true
# 全部ip可以访问
bind_ip = 0.0.0.0
# 端口号
port = 27017
# 是否启用认证
auth = true
# 设置oplog的大小(MB)
oplogSize=2048
---------------------------------------------------------------------
cd /mnt/docker/mongodb/logs/ && vi mongod.log
##log文件不需要内容##
chmod 777 mongod.log
docker run -it \
--name mongodb \
--restart=always \
--privileged \
-p 27017:27017 \
-v /mnt/docker/mongodb/data:/data/db \
-v /mnt/docker/mongodb/conf:/data/configdb \
-v /mnt/docker/mongodb/logs:/data/log/ \
-d mongo:latest \
-f /data/configdb/mongod.conf \
--auth
##进入容器##
docker exec -it mongo /bin/mongosh
##切换到admin库##
> use admin
##创建账号/密码##
db.createUser({ user: 'root', pwd: '123456', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
Docker 安装 Nginx
# 搜索镜像
docker search nginx
# 拉取镜像
docker pull nginx
# 创建容器
docker run -di --name=nginx -p 80:80 nginx
# 进入容器,并测试
docker exec -it nginx /bin/bash
# 复制nginx配置到宿主机
docker cp nginx:/etc/nginx /mnt/docker/nginx
# 停止nginx
docker stop nginx
# 删除nginx容器
docker rm nginx
# 重新创建容器:上面的步骤主要是为了生成nginx配置文件到宿主机
docker run -d \
-p 80:80 \
--network my-net \
--restart=always \
--name=nginx \
-v /mnt/docker/nginx:/etc/nginx nginx
# 浏览器访问 http://ip:80
Docker 安装 ES
docker run -d \
--restart=always \
--name es \
-p 7200:9200 \
-p 7300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
-v /mnt/docker/es/data:/usr/share/elasticsearch/data \
-v /mnt/docker/es/config:/usr/share/elasticsearch/config \
elasticsearch:7.17.20
docker run -d \
--restart=always \
--name es8 \
-p 8200:9200 \
-p 8300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
-v /mnt/docker/es8/data:/usr/share/elasticsearch/data \
-v /mnt/docker/es8/config:/usr/share/elasticsearch/config \
elasticsearch:8.13.0
Docker 安装 Nacos
docker run -d \
--restart=always \
--name nacos \
-p 8848:8848 \
-v /mnt/docker/nacos/data:/home/nacos/data \
-v /mnt/docker/nacos/logs:/home/nacos/logs \
-e MODE=standalone \
-e JVM_XMS=320m \
-e JVM_XMX=512m \
-e JVM_XMN=128m \
-e JVM_MS=64m \
-e JVM_MMS=100m \
-e MYSQL_SERVICE_HOST=docker0 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
nacos/nacos-server
主机访问虚拟机下的Docker(可选也可不配置) (教程)
docker network create -d bridge my-net
ifconfig
firewall-cmd --permanent --zone=external --change-interface=br-04bbb17c317d
firewall-cmd --permanent --zone=external --add-rich-rule='rule family=ipv4 source address=172.18.0.0/24 masquerade'
firewall-cmd --zone=external --list-all
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 172.18.0.0/24 -j SNAT --to-source 172.18.0.1
firewall-cmd --direct --get-all-passthroughs
firewall-cmd --zone=external --list-all
firewall-cmd --reload