Centos 安装Docker(含在线和离线)
本次是以Centos7
安装,其他系统请参考官方文档(英文):https://docs.docker.com/engine/install/centos/
系统环境:
系统要求:
Docker 支持 64 位版本 CentOS 7/8,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2
存储层驱动)无法使用,并且部分功能可能不太稳定。
查看系统的内核及其版本:
查看系统的内核:
uname -r
查看系统版本:
cat /etc/redhat-release
or cat /etc/os-release
[root@gzbsc001 ~]# uname -r
3.10.0-1160.36.2.el7.x86_64
[root@gzbsc001 ~]#
[root@gzbsc001 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@gzbsc001 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
总结就是系统环境:docker最低支持centos7且在64位平台上,内核版本在3.10以上,其他可以先不管.....
在线安装步骤:
1.卸载旧的版本
旧版本的 Docker 称为 docker
或者 docker-engine
,使用以下命令卸载旧版本:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.使用 yum 安装
执行以下命令安装依赖包:
sudo yum install -y yum-utils gcc
3.设置镜像的仓库
鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。
# 设置阿里云的Docker镜像仓库
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 官方源
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo
4.更新yum软件包索引
yum makecache fast
5.安装docker相关的配置
sudo yum install docker-ce docker-ce-cli containerd.io
指定版本:
在上面安装前,查询要安装的版本
yum list docker-ce.x86_64 --showduplicates | sort -r
这里一般需要安装指定版本的话,要安装 docker-ce
docker-ce-cli
这里示例需安装 18.09.x
版本的docker
yum list docker-ce.x86_64 docker-ce-cli.x86_64 --showduplicates | sort -r | grep 18.09
yum install -y docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
yum install -y docker-ce-19.03.9 docker-ce-cli-19.03.9 containerd.io
出现了completed即安装成功。
6.启动Docker
systemctl start docker
# 查看当前版本号,是否启动成功
docker version
# 设置开机自启动
systemctl enable docker
7.下载hello-world镜像进行测试
下载的hello world镜像
docker run hello-world
查看下载的hello world镜像
docker images
8.建立 docker 用户组
默认情况下,docker
命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root
用户和 docker
组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root
用户。因此,更好地做法是将需要使用 docker
的用户加入 docker
用户组。
1.建立 docker
组:
sudo groupadd docker
2.将当前用户加入 docker
组:
sudo usermod -aG docker $USER
$USER
为您的当前用户..比如现在登录是glj,则将glj用户加入docker用户组.-->sudo usermod -aG docker glj
Centos 离线安装步骤:
生产环境中一般都是没有公网资源的,所以怎么在生产服务器上离线部署Docker
?
tgz安装包安装
1.下载官方安装包
https://download.docker.com/linux/static/stable/x86_64/
2.上传到服务器/usr/local/
下,并且解压
tar -zxvf docker-20.10.9.tgz
3.将解压出来的docker文件复制到 /usr/bin/
目录下
cp docker/* /usr/bin/
4.进入/etc/systemd/system/目录,并创建docker.service文件
cd /etc/systemd/system/
touch docker.service
vi docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
# ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=ip
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
注意:
如果使用
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=ip
需要把
--insecure-registry=ip
此处改为你自己服务器ip
5.给docker.service文件添加执行权限
chmod +x /etc/systemd/system/docker.service
6.重新加载配置文件(每次有修改docker.service文件时都要重新加载下),并且启动docker
重新加载配置文件:systemctl daemon-reload
启动docker:systemctl start docker
设置开机启动:systemctl enable docker.service
7.测试docker
docker -v
离线YUM本地文件安装(需要同系统,无安装过docker的服务器+装有离线yum源):
1.下载yum的安装包
sudo yum install -y --downloadonly --downloaddir=$PWD/devel yum-utils device-mapper-persistent-data lvm2
2.安装yum依赖:
sudo yum install -y devel/*.rpm
3.设置镜像的仓库
鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。
# 设置阿里云的Docker镜像仓库
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 官方源
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo
yum makecache fast
4.下载docker安装包:
yum install -y --downloadonly --downloaddir=$PWD/docker docker-ce docker-ce-cli containerd.io
5.上传到离线服务器安装,启动测试docker
安装:
sudo yum install -y devel/*.rpm
sudo yum install -y docker/*.rpm
systemctl enable docker
systemctl start docker
测试:
docker -v
修改Docker默认存储路径(重要!否则)
Docker默认的镜像和容器存储位置在/var/lib/docker
中,如果仅仅是做测试,我们可能没有必要修改,但是当大量使用的时候,我们可能就要默认存储的位置了。
1.停止Docker服务
systemctl stop docker.service
systemctl stop docker.socket
2.修改默认存储路径的三种方式:
1.修改docker.service配置文件方式
1.1 修改docker.service配置文件,在EXECStart的后面增加 --graph=/data01/docker(您要更换的存储路径)。
[patrol@owy-bd-c16-21 ~]$ cat /usr/lib/systemd/system/docker.service
...
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --graph=/data01/docker
...
1.2 将当前Docker存储目录复制到/data目录下
cp -R /var/lib/docker/ /data01
1.3 重启docker
systemctl daemon-reload
systemctl restart docker
1.4 查询是否切换成功
docker info
2.修改 /etc/docker/daemon.json 配置文件方式(我常用的方式)
2.1 修改/etc/docker/daemon.json
打开 /etc/docker/daemon.json 输入以下内容(如果没有找到就创建一个)
{
"graph":"/data01/docker"
}
2.2 将当前Docker存储目录复制到/data目录下
cp -R /var/lib/docker/ /data01
2.3 重启docker
systemctl restart docker
2.4 查询是否切换成功
docker info
3.软链接方式(这个通常已经是后期的方式了...)
移动整个/var/lib/docker
目录到目的路径:/data01
mv /var/lib/docker /data01/docker
ln -s /data01/docker /var/lib/docker
重启Docker时发现存储目录依旧是/var/lib/docker,但是实际上是存储在数据盘的,你可以在数据盘上看到容量变化。
系统调优
1.关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
2.关闭swap分区(k8s需要强制,如果不安装可以忽略)
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
3.关闭防火墙(可忽略..)
systemctl stop firewalld && systemctl disable firewalld
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save
4.性能调优(可忽略..)
cat >> /etc/sysctl.conf<<EOF
# 不使用交换分区 如果是k8s 必须开启
# vm.swappiness = 0
# 开启sysq功能
kernel.sysrq = 1
net.ipv4.neigh.default.gc_stale_time = 120
# see details in https://help.aliyun.com/knowledge_detail/39428.html
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
# see details in https://help.aliyun.com/knowledge_detail/41334.html
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.ip_forward=1
EOF
然后加载参数:sysctl -p
配置镜像加速
国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供了国内加速器服务,例如:
- 阿里云的加速器:https://help.aliyun.com/document_detail/60750.html
- 网易加速器:http://hub-mirror.c.163.com
- 官方中国加速器:https://registry.docker-cn.com
- ustc 的镜像:https://docker.mirrors.ustc.edu.cn
- 百度云加速器: https://mirror.baidubce.com
1.查看是否在 docker.service
文件中配置过镜像地址。
systemctl cat docker | grep '\-\-registry\-mirror'
如未输出,那么创建一个daemon.json
文件,并写入内容(如果文件不存在请新建该文件):
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://8i25ptuf.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.baidubce.com"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore":true,
"log-driver":"json-file",
"log-opts": {"max-size":"200m", "max-file":"3"},
"max-concurrent-downloads": 10,
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
注意,一定要保证该文件符合
json
规范,否则 Docker 将不能启动。
阿里云加速的url为系统分配
你们使用我的也没用...可抛弃
2. 检查加速器是否生效
执行 docker info
,如果从结果中看到了如下内容,说明配置成功。
Registry Mirrors:
https://8i25ptuf.mirror.aliyuncs.com/
https://hub-mirror.c.163.com/
https://mirror.baidubce.com/
Docker卸载步骤(可忽略):
1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
2.删除资源目录
/var/lib/docker是docker的默认工作路径
rm -rf /var/lib/docker