一、背景
在生產(chǎn)環(huán)境中部署、使用Docker已經(jīng)有很長一段時間了。學(xué)習(xí)的時候大部分環(huán)境、資料都是在Ubuntu14.04、16.04及18.04中實現(xiàn)的。由于某些原因,需要在生產(chǎn)環(huán)境中的CentOS7.2和7.4中部署使用Docker。在這個過程中踩了不少坑,花了很多時間,走了很多彎路。
二、一些常見的坑及解決方案
2.1 SELinux
在Ubuntu系列系統(tǒng)中默認(rèn)是沒有SELinux的。因此也無需配置,如果安裝了SELinux的話,禁用或者進(jìn)行相關(guān)配置那是必須的。在CentOS7.2和7.4中,SELinux默認(rèn)是啟用的,如果不進(jìn)行相關(guān)配置,那么在Docker卷掛載時是無法正常使用的。查看SELinux狀態(tài)及關(guān)閉SELinux可以使用以下命令:
[root@linuxidc ~]# getenforce
Enforcing
[root@linuxidc ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
[root@linuxidc ~]# reboot
[root@linuxidc ~]# getenforce
Disabled
操作過程中,重啟是必須的。不禁用也是可以的,permissive也可以。
2.2 防火墻
CentOS7.2及7.4默認(rèn)情況下使用的firewalld動態(tài)防火墻,并且CentOS7.4防火墻默認(rèn)開機(jī)啟動。Ubuntu系列使用iptables多一些。如果不用的話建議關(guān)閉,一般大型系統(tǒng)都有硬件防火墻,建議關(guān)閉。如果個人小規(guī)模使用就按照最小化原則進(jìn)行配置。關(guān)閉及禁用開機(jī)啟動命令可以參考如下:
[root@linuxidc ~]# systemctl stop firewalld
[root@linuxidc ~]# systemctl disable firewalld
2.3 IP轉(zhuǎn)發(fā)
默認(rèn)情況下,CentOS7.4的ip轉(zhuǎn)發(fā)是關(guān)閉的,需要格外注意,這是造成很多故障的原因之一。這個情況在Ubuntu14.04及以上版本是不存在的,Ubuntu默認(rèn)開啟了的。查看ip轉(zhuǎn)發(fā)是否開啟可以使用以下命令:
[root@linuxidc ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
如果返回值是0,說明ip轉(zhuǎn)發(fā)是關(guān)閉了的,需要開啟。開啟命令可以參考以下內(nèi)容:
[root@linuxidc ~]# sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
命令執(zhí)行后立即生效,重啟之后需要再次操作。如果需要永久生效,那么使用以下命令:
[root@linuxidc ~]# echo “net.ipv4.ip_forward = 1”>>/etc/sysctl.conf
[root@linuxidc ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@linuxidc ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
三、總結(jié)
3.1 Linux的各大發(fā)行版在細(xì)節(jié)方面差異較大,需要格外注意,不能按部就班的隨便套用。
3.2 在使用的過程中需要發(fā)揮自己的思維變通能力,盡量做到觸類旁通。
3.3 目前就發(fā)現(xiàn)這些問題了,其他問題希望諸位多多分享,交流。