Docker是一个开源的应用容器引擎,目前分为社区版本(CE)和企业版本(EE),一般使用社区版本。
CentOS系统下Docker目前支持CentOS 7.x 8.x 版本,系统内核版本为Linux 3.10及其以上版本。
一、安装前准备工作
1、CentOS使用rpm包升级系统内核
https://www.osyunwei.com/archives/12038.html
2、CentOS系统关闭selinux
#执行以下命令
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
reboot #重启系统
/usr/sbin/sestatus -v #查看selinux状态,disabled表示关闭
[root@master01 ~]# /usr/sbin/sestatus -v
SELinux status: disabled
3、防火墙设置
一般情况下访问Docker容器内部的应用需要设置宿主机端口映射功能,测试环境下可以开启iptables防火墙并清空防火墙规则,
正式生产环境建议开启防火墙,再按需开启相应端口号。
3.1关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
systemctl mask firewalld
systemctl stop firewalld
yum remove firewalld
3.2安装iptables防火墙
yum install iptables-services #安装
systemctl enable iptables.service #设置防火墙开机启动
iptables -F #清空规则
service iptables save #保存配置规则
systemctl restart iptables.service #启动防火墙使配置生效
[root@localhost ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Fri Dec 3 23:15:39 2021
*filter
:INPUT ACCEPT [13:696]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16:1520]
COMMIT
# Completed on Fri Dec 3 23:15:39 2021
4、关闭交换分区
#执行以下命令
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1960 107 1634 8 217 1703
Swap: 0 0 0
5、调整内核参数
5.1
#执行以下命令
modprobe br_netfilter
modprobe ip_vs
modprobe ip_conntrack
cat >> /etc/rc.d/rc.local << EOF
modprobe br_netfilter
modprobe ip_vs
modprobe ip_conntrack
EOF
chmod +x /etc/rc.d/rc.local
5.2
vi /etc/security/limits.conf #在最后一行添加以下代码
* hard nofile 65535
* soft nofile 65535
* hard nproc 65535
* soft nproc 65535
:wq! #保存退出
#查看hard和soft限制数
ulimit -Hn
ulimit -Sn
5.3
vi /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-arptables=1
net.ipv4.ip_forward = 1
vm.swappiness = 0
vm.overcommit_memory = 1
vm.panic_on_oom = 0
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 1048576
fs.file-max = 52706963
fs.nr_open = 52706963
net.ipv6.conf.all.disable_ipv6 = 1
net.netfilter.nf_conntrack_max = 2310720
:wq! #保存退出
sysctl --system
sysctl -p /etc/sysctl.d/docker.conf
5.4开启IPVS支持
vi /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do
/sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/modprobe ${kernel_module}
fi
done
:wq! #保存退出
#执行以下命令使配置生效
chmod 755 /etc/sysconfig/modules/ipvs.modules
sh /etc/sysconfig/modules/ipvs.modules
lsmod | grep ip_vs
二、CentOS 7.9安装二进制Docker-ce社区版本
1、卸载旧版本(如果没有安装就不需要执行)
yum remove docker docker-common docker-selinux docker-engine
2、安装包下载地址
https://download.docker.com/linux/static/stable/x86_64/
选择最新版本docker-20.10.9.tgz
cd /usr/local/src
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz
3、安装docker
#解压
cd /usr/local/src
tar -zxvf docker-20.10.9.tgz
#将解压出来的docker文件移动到/usr/bin/目录下
mv /usr/local/src/docker/* /usr/bin/
4、设置docker开机启动
#添加docker用户组
groupadd docker
在/usr/lib/systemd/system/目录创建编辑docker.service文件
vi /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
#BindsTo=containerd.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-1000
[Install]
WantedBy=multi-user.target
:wq! #保存退出
#添加执行权限
chmod +x /usr/lib/systemd/system/docker.service
vi /usr/lib/systemd/system/docker.socket
[Unit]
Description=Docker Socket for the API
PartOf=docker.service
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
:wq! #保存退出
systemctl daemon-reload #重新加载配置,修改docker.service文件后要重新加载
systemctl start docker #启动docker
systemctl enable docker.service #添加开机启动
systemctl status docker #查看docker状态
docker version #查看docker版本
5、配置docker镜像加速
由于Docker Hub的服务器在国外,下载docker镜像比较慢,我们可以配置国内的镜像地址,这样下载docker镜像速度就会很快。
国内主要的镜像加速器有:
163:https://hub-mirror.c.163.com
百度:https://mirror.baidubce.com/
阿里云:https://<自己的id>.mirror.aliyuncs.com
#使用阿里云账号登录https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登录成功后,左侧菜单-容器镜像服务-镜像工具-镜像加速器-加速器
#CentOS7.x已使用systemd进行服务管理,对于使用systemd的系统,在/etc/docker/daemon.json文件中进行添加
mkdir -p /etc/docker #创建目录,执行以下操作
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://t1fyrekt.mirror.aliyuncs.com"]
}
EOF
#查看
[root@master01 yum.repos.d]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://t1fyrekt.mirror.aliyuncs.com"]
}
vi /etc/docker/daemon.json #编辑配置文件,可以添加多个docker镜像地址
{
"registry-mirrors": ["https://t1fyrekt.mirror.aliyuncs.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}
:wq! #保存退出
systemctl daemon-reload
systemctl restart docker #重启docker
docker info #检查docker镜像加速器是否配置成功
Registry Mirrors:
https://t1fyrekt.mirror.aliyuncs.com/
https://hub-mirror.c.163.com/
https://mirror.baidubce.com/
Live Restore Enabled: false
Product License: Community Engine
#可以看到Registry Mirrors:下面有我们设置的镜像地址,说明配置成功
6、测试docker是否可用
docker pull hello-world #下载一个镜像实例
[root@localhost ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
docker run hello-world #运行一个镜像实例
docker images hello-world #查看该镜像的信息
[root@localhost ~]# docker images hello-world
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 2 months ago 13.3kB
7、安装Docker-Compose
Docker-Compose是docker提供的一个命令行工具,用来定义和运行由多个容器组成的应用。使用Docker-Compose,我们可以通过yaml文件定义应用程序的各个服务,并由单个命令完成应用的创建和启动。
Docker-Compose依靠Docker进行工作,必须确保已经安装了docker才能安装Docker-Compose
#把docker-compose安装在/usr/local/bin/目录下
#执行一下命令
curl -SL https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
#添加执行权限
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version
[root@localhost bin]# docker-compose --version
Docker Compose version v2.2.2
三、使用docker部署应用
docker search nginx #查找Docker Hub上的nginx镜像
docker pull nginx #拉取官方Nginx镜像
docker images nginx #查看镜像
[root@localhost ~]# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f652ca386ed1 45 hours ago 141MB
#使用NGINX默认的配置来启动一个Nginx容器实例
docker run --rm --name nginx-demo -p 8080:80 -d nginx
浏览器打开http://192.168.21.8:8080/可以看到web页面,说明部署成功。
参数说明:
--rm:容器终止运行后,自动删除容器文件
--name nginx-demo:容器名为nginx-demo,可以自定义设置
-p: 端口进行映射,将本地8080端口映射到容器内部的80端口
-d:容器启动后,在后台运行
docker container ps #查看启动的docker容器
docker stop nginx-demo #停止容器
docker run --restart=always --name nginx-demo -p 8080:80 -d nginx #参数 --restart=always 表示宿主机重启后容器开机自启动
至此,CentOS下安装二进制Docker-ce社区版本安装完成。