文章目录
前置条件:
1、已安装操作系统 OpenEuler 20.03 (LTS-SP3)
一、文件夹创建
##创建文件夹
[root@localhost ~]# mkdir /home/data
##创建符号链接文件
[root@localhost ~]# ln -s /home/data /data
二、配置静态IP
##修改参数
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=7ea10387-2576-4681-bfd0-92e57959a4eb
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.111.197
PREFIX=24
GATEWAY=192.168.111.1
DNS1=114.114.114.114
IPV6_PRIVACY=yes
##使配置生效。华为openeuler系统使用如下命令,其他linux系统可以使用systemctl restart network
[root@localhost ~]# nmcli con reload; nmcli con up ens33
三、关闭Selinux
## 永久配置
[root@localhost ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
## 临时配置
[root@localhost ~]# setenforce 0
## 查看结果
[root@localhost ~]# getenforce
四、关闭防火墙
说明:为了顺利完成所有中间件的安装部署,先关闭防火墙。待安装部署完成后,再启用防火墙,并进行相关配置(具体配置可以详见:Linux系统中配置防火墙-CSDN博客)。
##关闭firewalld
[root@localhost ~]# systemctl stop firewalld
##禁止开机启动firewalld
[root@localhost ~]# systemctl disable firewalld
##关闭iptables
[root@localhost ~]# systemctl stop iptables
##禁止开机启动iptables
[root@localhost ~]# systemctl disable iptables
五、开启包转发功能和修改内核参数
参数说明:
- br_netfilter模块用于将桥接流量转发至iptables链,br_netfilter内核参数需要开启转发。
- net.ipv4.ip_forward=1 将Linux系统作为路由或者VPN服务就必须要开启IP转发功能。当linux主机有多个网卡时,一个网卡收到的信息是否能够传递给其他的网卡 ,如果设置成1 的话 可以进行数据包转发,可以实现VxLAN 等功能。不开启会导致docker部署应用无法访问。
1、动态地向内核中加载br_netfilter模块
[root@localhost ~]# modprobe br_netfilter
2、配置开机自动加载br_netfilter模块
- 新建rc.sysinit文件
[root@localhost ~]# vi /etc/rc.sysinit
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
- 在/etc/sysconfig/modules/目录下新建br_netfilter.modules文件
[root@localhost ~]# vi /etc/sysconfig/modules/br_netfilter.modules
modprobe br_netfilter
- 配置执行权限
[root@localhost ~]# chmod +x /etc/sysconfig/modules/br_netfilter.modules
- 查看br_netfilter模块是否加载成功
[root@localhost ~]# lsmod | grep br_netfilter
br_netfilter 22256 0
bridge 155432 1 br_netfilter
3、修改内核参数
- 修改/etc/sysctl.conf文件
[root@localhost ~]# vi /etc/sysctl.conf
####注意:等号=左右不能有空格####
net.ipv4.ip_forward=1 #修改/新增这一行
#当keepalive打开的情况下,TCP发送keepalive消息的频率,默认值是7200(2小时)
net.ipv4.tcp_keepalive_time=1800
#TCP发送keepalive探测以确定该连接已经断开的次数,默认值是9
net.ipv4.tcp_keepalive_probes=5
#当探测没有确认时,重新发送探测的频度,默认值为75
net.ipv4.tcp_keepalive_intvl=5
#将桥接的IPv4流量传递到 iptables 的链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#调小TCP协议的time_wait超时时间,默认是240秒
net.ipv4.tcp_fin_timeout=30
- 执行生效
##加载指定的文件配置内核参数,-p后通常接一个文件路径
##若为空,默认加载/etc/sysctl.conf中的内核参数
[root@localhost ~]# sysctl -p
##显示所有的内核参数
[root@localhost ~]# sysctl -a
##临时修改内核参数的值,重启后失效
[root@localhost ~]# sysctl -w net.ipv4.tcp_keepalive_time=1800
[root@localhost ~]# sysctl -w net.ipv4.tcp_keepalive_probes=5
[root@localhost ~]# sysctl -w net.ipv4.tcp_keepalive_intvl=5
##加载/etc/sysctl.d/目录下所有conf文件中的内核参数
[root@localhost ~]# sysctl --system
六、修改linux参数(调大最大文件句柄数)
方法一:
sudo vi /etc/security/limits.conf
在最后追加如下内容:
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
含义如下:
1)soft nproc: 可打开的文件描述符的最大数(软限制)
2)hard nproc: 可打开的文件描述符的最大数(硬限制)
3)soft nofile:单个用户可用的最大进程数量(软限制)
4)hard nofile:单个用户可用的最大进程数量(硬限制)
方法二:
sudo vi /etc/profile
#文件末尾添加下面这行,并保存:
ulimit -n 65535
# 重新加载修改的环境变量文件
sudo source /etc/profile
七、添加YUM的Centos源和Docker镜像源
##下载
[root@localhost ~]# wget https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo \
-O /etc/yum.repos.d/CentOS-Base.repo
[root@localhost ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo \
-O /etc/yum.repos.d/docker-ce.repo
##更改名称
[root@localhost ~]# sed -i 's/\$releasever/8/g' /etc/yum.repos.d/docker-ce.repo
##清除缓存
[root@localhost ~]# yum clean all
##刷新缓存
[root@localhost ~]# yum makecache
八、安装JDK
##安装
[root@localhost ~]# yum install java-1.8.0-openjdk* -y
#查看安装是否成功
[root@localhost ~]# java -version
九、安装Docker
- 安装
[root@localhost ~]# yum install docker-ce docker-compose-plugin -y
- 启动
[root@localhost ~]# systemctl start docker
- 配置开机启动
[root@localhost ~]# systemctl enable docker
- 配置国内镜像地址
[root@localhost ~]# cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://9ca7kqhd.mirror.aliyuncs.com",
"https://registry.docker-cn.com"
]
}
EOF
- 重启
[root@localhost ~]# systemctl restart docker
十、安装MySQL
##创建文件夹
[root@localhost ~]# mkdir -p /data/docker/mysql
##运行MySQL容器
[root@localhost ~]# docker run --name 容器名 -p 3306:3306 \
-e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=root账号的密码 \
-v /etc/localtime:/etc/localtime \
-v /data/docker/mysql/conf/:/etc/mysql/conf.d \
-v /data/docker/mysql/logs:/var/log \
-v /data/docker/mysql/data:/var/lib/mysql --restart=always \
-d bitnami/mysql:5.7
##查看MySQL容器是否运行正常
[root@localhost ~]# docker ps
注意:MySQL的docker镜像使用的是bitnami/mysql:5.7
如果MySQL容器运行正常,就可以使用MySQL客户端(如:Heidisql、Navicat)访问MySQL数据库了。
十一、安装Redis
##创建文件夹
[root@localhost ~]# mkdir -p /data/docker/redis
##运行Redis容器
[root@localhost ~]# docker run --name 容器名 -p 6379:6379 -v /etc/localtime:/etc/localtime -v /data/docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /data/docker/redis/data:/data --restart=always -d redis:6.2.6 redis-server /etc/redis/redis.conf --appendonly yes --requirepass 密码
##查看Redis容器是否运行正常
[root@localhost ~]# docker ps
如果Redis容器运行正常,就可以使用Redis客户端(如:RedisDesktopManager)访问Redis了。
十二、安装MongoDB
##创建文件夹
[root@localhost ~]# mkdir -p /data/docker/mongo
##运行MongoDB容器
[root@localhost ~]# docker run --name 容器名 -p 27017:27017 \
-v /data/docker/data/mongo/data:/data/db \
-v /data/docker/data/mongo/conf:/data/configdb \
-v /data/docker/data/mongo/logs:/data/log/ \
-e MONGO_INITDB_ROOT_USERNAME=你的账号 \
-e MONGO_INITDB_ROOT_PASSWORD=你的密码 \
-e MONGO_INITDB_DATABASE=数据库名 \
-v /etc/localtime:/etc/localtime \
--restart=always -d mongo:6.0.4
##查看MongoDB容器是否运行正常
[root@localhost ~]# docker ps
参数说明:
- docker 运行时加上环境变量MONGO_INITDB_ROOT_USERNAME 和MONGO_INITDB_ROOT_PASSWORD 会自动启动授权。
- 默认给MongoDB中的保留库(即:admin)设置账户密码。你可以通过环境变量MONGO_INITDB_DATABASE给具体的数据库启动授权。
如果MongoDB容器运行正常,就可以使用MongoDB客户端(如:Studio 3T)访问MongoDB数据库了。
十三、安装Nacos
##创建文件夹
[root@localhost ~]# mkdir -p /data/docker/nacos
##运行Nacos容器
[root@localhost ~]# docker run -d -p 8848:8848 \
-e MODE=standalone \
-v /data/docker/nacos/logs:/home/nacos/logs \
-v /etc/localtime:/etc/localtime \
--name 容器名 \
--restart=always \
nacos/nacos-server:v2.1.2-slim
##查看MongoDB容器是否运行正常
[root@localhost ~]# docker ps
如果Nacos容器运行正常,就可以使用浏览器访问Nacos页面了。
注意:Nacos的docker镜像使用的是nacos/nacos-server:v2.1.2-slim
URL地址:宿主机IP:8848/nacos
账号密码:nacos/nacos
注意登录后,修改Nacos的默认密码!
十四、安装Nginx
建议:不使用docker安装,而下载tar.gz文件进行编译部署。否则,性能压测时,可能会报错:句柄数不够!
##安装编译工具
[root@localhost ~]# yum install -y gcc pcre-devel openssl openssl-devel make
##下载nginx包
[root@localhost ~]# wget http://nginx.org/download/nginx-1.25.3.tar.gz
##解压
[root@localhost ~]# tar -zxvf nginx-1.25.3.tar.gz
##编译
[root@localhost ~]# cd nginx-1.25.3
[root@localhost ~]# ./configure --prefix=/usr/local/nginx \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-stream --with-ipv6 \
--with-http_ssl_module --with-stream
[root@localhost ~]# make & make install
##若报错,就再执行一遍
[root@localhost ~]# make & make install
Nginx编译部署完成后,进入/usr/local/nginx/conf目录,基于项目实际情况配置nginx.conf。
然后,将项目前端部署包上传到/usr/local/nginx/html目录。
最后,进入/usr/local/nginx/sbin目录,执行如下命令,启动Nginx:
[root@localhost ~]# ./nginx
前端部署包或nginx.conf配置文件若有更新,执行如下命令生效:
[root@localhost ~]# ./nginx -s reload
停止Nginx,执行如下命令:
[root@localhost ~]# ./nginx -s stop
十五、安装MinIO
##创建文件夹
[root@localhost ~]# mkdir -p /data/docker/minio
##配置执行权限
[root@localhost ~]# chmod 777 /data/docker/minio
##运行MinIO容器
[root@localhost ~]# docker run -d --name 容器名 --restart=always -p 9000:9000 -p 9001:9001 -e MINIO_ROOT_USER="账号" -e MINIO_ROOT_PASSWORD="密码" -v /etc/localtime:/etc/localtime -v /data/docker/minio/config:/root/.minio -v /data/docker/minio:/data bitnami/minio
##查看MinIO容器是否运行正常
[root@localhost ~]# docker ps
参数说明:
- -p 9001:9001 // minio控制台端口
- -p 9000:9000 // minio服务API端口
如果MinIO容器运行正常,就可以使用浏览器访问MinIO Web管理页面了。在该页面中,可以创建bucket,配置bucket的Access policy。
注意:MinIO的docker镜像使用的是bitnami/minio:latest
URL地址:宿主机IP:9001
账号密码:运行MinIO容器时设置的账号密码
十六、安装RabbitMQ
##创建文件夹
[root@localhost ~]# mkdir -p /data/docker/rabbitmq
##运行RabbitMQ容器
[root@localhost ~]# docker run --name 容器名 -p 5672:5672 -p 15672:15672 \
-v /etc/localtime:/etc/localtime \
-v /data/docker/rabbitmq/data:/var/lib/rabbitmq \
-e RABBITMQ_DEFAULT_USER=账号 \
-e RABBITMQ_DEFAULT_PASS=密码 \
--restart=always -d rabbitmq:management
##查看MongoDB容器是否运行正常
[root@localhost ~]# docker ps
如果RabbitMQ容器运行正常,就可以使用浏览器访问RabbitMQ Web管理页面了。
URL地址:宿主机IP:15672
账号密码:运行RabbitMQ容器时设置的账号密码
十七、Docker与Firewalld冲突解决
资料参考:docker与firewalld冲突解决_docker firewalld-CSDN博客
说明:Firewall的底层使用iptables进行数据过滤,而Docker也使用iptables来进行网络隔离和管理。这可能导致Firewall与Docker产生冲突。当Firewalld启动或者重启的时候,将会从iptables中移除 Docker的规则,从而影响了 Docker 的正常工作。
##查询iptables链
[root@localhost ~]# iptables -L
##修改docker配置,绕过iptables,添加最后2行
[root@localhost ~]# vi /etc/docker/daemon.json
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://9ca7kqhd.mirror.aliyuncs.com",
"https://registry.docker-cn.com"
],
"experimental" : true, #添加此行
"iptables": false #添加此行
}
##重启docker
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
##重启防火墙
[root@localhost ~]# systemctl restart firewalld
##配置防火墙开机自启
[root@localhost ~]# systemctl enable firewalld
##再次重启Docker
[root@localhost ~]# systemctl restart docker
此时,Docker容器的端口只能由本机(运行Docker容器的宿主机)访问,可以通过firewall-cmd命令开放其他主机访问本机的Docker容器。(详见:Linux系统中配置防火墙-CSDN博客)
十八、配置Docker容器中访问容器外IP
注意:
配置Docker绕过iptables之后,有个弊端:容器内部无法访问外界IP。需要Firewalld防火墙开启NAT转发功能。
##检查是否允许 NAT 转发。若是yes,表示允许
[root@localhost ~]# firewall-cmd --query-masquerade
##开启 NAT 转发
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-masquerade
##重载,使配置生效
[root@localhost ~]# firewall-cmd --reload
1、容器中访问宿主机IP:
宿主机防火墙需要放行Docker容器的网段或IP。(详见:Linux系统中配置防火墙-CSDN博客)。
查看Docker容器的IP,可以使用命令:
[root@localhost ~]# docker inspect -f \
'{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名
2、容器中访问其他主机:
其他主机防火墙需要放行容器所在宿主机IP。(详见:Linux系统中配置防火墙-CSDN博客)
十九、常见问题
【问题一】
问题描述:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
解决办法:
说明当前用户没有权限,给当前用户授权
几种修改方式,思路是一样的,就是给权限:
1.加 sudo 执行
2.把当前用户修改用户组
3.直接改文件归属
[root@localhost ~]# sudo chown $USER /var/run/docker.sock
【问题二】
问题描述:docker运行部分应用容器的时候报内存溢出,或安装docker-mysql的时候出现资源占用大,重启等问题
解决办法:调整docker的nofile、nproc参数
[root@localhost ~]# vi /usr/lib/systemd/system/docker.service
修改LimitNOFILE 和 LimitNPROC 参数为 :
LimitNOFILE=65535
LimitNPROC=65535
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
【问题三】
问题描述:docker: Error response from daemon: driver failed programming external connectivity on endpoint spn-nacos (139722a32ad9b240aac0870d843b5d692cc13c1f17d637584ac9c957353e6861): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8848 -j DNAT --to-destination 172.17.0.8:8848 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1)).
解决办法:重启docker