文章目录

一、文件夹创建 

二、配置静态IP

三、关闭Selinux

四、关闭防火墙

五、开启包转发功能和修改内核参数

六、修改linux参数(调大最大文件句柄数)

七、添加YUM的Centos源和Docker镜像源

八、安装JDK

九、安装Docker

十、安装MySQL

十一、安装Redis

十二、安装MongoDB

十三、安装Nacos

十四、安装Nginx

十五、安装MinIO

十六、安装RabbitMQ

十七、Docker与Firewalld冲突解决

十八、配置Docker容器中访问容器外IP

十九、常见问题


前置条件:
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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐