文章转载自:https://www.skynemo.cn/archives/02-docker-install
Docker安装简介
Docker支持在Mac、Windows、Linux上安装,生产环境中一般只会在Linux上进行安装
Docker版本
Stable:稳定版本
Test:预发布版本
Nightly:最新版本(非稳定)
通常情况下都是使用Stable版本
Docker支持的Linux操作系统
安装方式
Docker在Linux上安装方式主要有以下两种
- 二进制安装包安装
- 包管理器安装(目前支持
.deb
和.rpm
)
包管理器安装支持的操作系统
为方便在一些常用的Linux发行版快速安装,Docker提供了.deb
和.rpm
安装包,其支持的Linux发行版和架构列表如下(更新时间:2022年4月21日;最新支持可以查询官网:https://docs.docker.com/engine/install/)
Platform | x86_64/amd64 | arm64/aarch64 | arm(32-bit) | s390x |
---|---|---|---|---|
CentOS | ||||
Debian | ||||
Fedora | ||||
Raspbian | ||||
RHEL | ||||
SLES | ||||
Ubuntu | ||||
Binaries |
二进制安装的操作系统要求
Docker也为手动安装Docker Engine提供了二进制文件,这些二进制文件是静态链接的,理论上可以在任何Linux发行版上使用。但是受限于Docker依赖的相关技术栈版本,例如namespace等技术,需要操作系统满足如下要求:
- 64位的操作系统(可以用
uname -a
命令查看) - Linux内核版本3.10以上(可以用
uname -a
命令查看) - 适配iptables版本1.4以上(可以安装后用
iptables -V
命令查看) - 适配git版本(可以安装后用
git --version
命令查看) - 适配XZ工具版本4.9以上(可以安装后用
xz --version
命令查看) - 可以使用
ps
命令,该命令通常由procps或类似软件包提供(可以直接输入ps
命令验证) - 一个正确安装的cgroupfs层次结构(可以使用cgroupfs-mount脚本验证并正确挂载)
通常情况下,操作系统只需要满足64位、Linux内核版本3.10+这两个条件,其余条件均可以满足
Docker安装包下载地址
官方下载地址(国内可能网络较慢)
- Linux:https://download.docker.com/linux/static
- MacOS: https://download.docker.com/mac/static
- Windows: https://download.docker.com/win/static
清华源下载地址
- Linux: https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/
- MacOS: https://mirrors.tuna.tsinghua.edu.cn/docker-ce/mac/static/
- Windows: https://mirrors.tuna.tsinghua.edu.cn/docker-ce/win/
CentOS 7 安装Docker(YUM)
安装方法参考
- 清华源安装文档: https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
- 官方安装文档: https://docs.docker.com/engine/install/centos/
CentOS 7 版本
操作系统版本
[root@docker ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
内核版本
[root@docker ~]# uname -a
Linux docker 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
准备
清除原有的docker
如果过去安装过docker,需要先卸载
[root@docker ~]# yum remove -y docker-ce docker-common docker-selinux docker-engine
推荐安装的依赖
device-mapper-persistent-data
:Linux 2.6内核中支持逻辑卷管理的通用设备映射机制(CentOS 7 内核位3.10,可以不安装)lvm2
: 逻辑卷管理工具(CentOS 7系统默认有安装)
yum install -y device-mapper-persistent-data lvm2
下载仓库文件(CentOS/RHEL)
[root@docker ~]# curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
替换仓库为国内源
官方源在国内访问速度较慢,可以替换为国内源(此处列举 清华源 和 阿里源,选一即可)
# 替换软件仓库为 TUNA
[root@docker ~]# sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# 替换软件仓库为 ali
[root@docker ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
更新缓存
[root@docker ~]# yum makecache fast
安装
安装最新稳定版本
# 安装 docker latest stable(最新稳定)版本
[root@docker ~]# yum install -y docker-ce docker-ce-cli containerd.io
安装指定版本
# 查看版本
[root@docker ~]# yum list docker-ce.x86_64 --showduplicates | sort -r
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
docker-ce.x86_64 3:20.10.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable
.......
# 安装指定版本 yum -y install docker-ce-[VERSION]
[root@docker ~]# yum -y install docker-ce-3:20.10.5-3.el7
Ubuntu 20 安装 Docker(APT)
安装方法参考
- 清华源安装文档:https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
- 官方安装文档: https://docs.docker.com/engine/install/ubuntu/
Ubuntu 20 版本
操作系统版本
root@docker:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
内核版本
root@docker:~# uname -a
Linux docker 5.4.0-100-generic #113-Ubuntu SMP Thu Feb 3 18:43:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
准备
清理原有的docker
如果你过去安装过docker,需要先卸载
root@docker:~# sudo apt remove -y docker-ce docker-ce-cli containerd.io
安装依赖
ca-certificates
:证书管理工具(Ubuntu 20默认已安装)gnupg2
:GNU Privacy Guard(GnuPG或GPG),是一种加密软件,有多个版本(Ubuntu 20默认已安装gnupg
)apt-transport-https
:使apt支持httpssoftware-properties-common
:提供了apt的一些简便工具,例如:add-apt-repository
root@docker:~# sudo apt -y install apt-transport-https ca-certificates software-properties-common gnupg2
配置仓库
此处使用了阿里云的镜像源
信任Docker的GPG公钥
root@docker:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
添加软件仓库
root@docker:~# echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新缓存
root@docker:~# apt update
安装
安装最新稳定版本
root@docker:~# sudo apt install -y docker-ce docker-ce-cli containerd.io
安装指定版本
# 查找docker版本
root@docker:~# apt-cache madison docker-ce
docker-ce | 5:20.10.14~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
docker-ce | 5:20.10.13~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
docker-ce | 5:20.10.12~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
......
docker-ce | 5:19.03.15~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
docker-ce | 5:19.03.14~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
docker-ce | 5:19.03.13~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
......
# 安装指定版本的 docker-ce: sudo apt-get -y install docker-ce=[VERSION]
# (VERSION 为上面的 5:19.03.15~3-0~ubuntu-focal)
sudo apt install -y containerd.io \
docker-ce=5:19.03.15~3-0~ubuntu-focal \
docker-ce-cli=5:19.03.15~3-0~ubuntu-focal
二进制方式安装Docker
准备
创建docker用户组
[root@docker ~]# groupadd docker
下载安装
下载二进制包
[root@docker ~]# curl -O https://download.docker.com/linux/static/stable/x86_64/docker-20.10.14.tgz
解压复制
[root@docker ~]# tar -xf docker-20.10.14.tgz
# 直接复制到/usr/bin,让普通用户也可以使用docker命令
[root@docker ~]# \cp ./docker/* /usr/bin
安装后配置
创建docker.service
docker.service用于systemd管理docker程序
[root@docker ~]# vi /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service
[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 -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3
# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s
# 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
# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity
# 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
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target
创建containerd.service文件
docker的运行依赖于containerd,containerd.service用于systemd管理containerd程序
[root@docker ~]# vi /usr/lib/systemd/system/containerd.service
# Copyright The containerd Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
创建docker.socket
docker.socket是docker client 和 docker deamon 在本地进行通信的socket文件
[root@docker ~]# vi /usr/lib/systemd/system/docker.socket
[Unit]
Description=Docker Socket for the API
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
相关的系统参数配置
Docker运行时需要各种系统底层配置支持,推荐按一下参数设置系统
pam_limits.so限制(limits.conf
)
root@docker:~# vi /etc/security/limits.conf
# 配置单个用户 core 文件(程序崩溃时的内存镜像)大小,,单位 KB
* soft core unlimited
* hard core unlimited
# 配置单个用户的最大运行线程数
* soft nproc 1000000
* hard nproc 1000000
# 配置单个用户能打开的最大文件数
* soft nofile 1000000
* hard nofile 1000000
# 配置单个用户最大内存锁定地址空间大小,单位 KB
* soft memlock 32000
* hard memlock 32000
# POSIX 消息队列使用的最大内存,单位 bytes
* soft msgqueue 8192000
* hard msgqueue 8192000
系统参数(sysctl.conf
)
root@docker:~# vi /etc/sysctl.conf
# 开启路由转发
net.ipv4.ip_forward=1
# 配置系统单个进程可以拥有的 VMA (虚拟内存区域)的数量,ES的最低要求为 262144
vm.max_map_count=262144
# Linux 的最大进程数
kernel.pid_max=4194303
# 系统能够打开的文件句柄的数量(整个系统的限制),注意与 ulimit 的区别
fs.file-max=1000000
# timewait 的数量,默认 180000
net.ipv4.tcp_max_tw_buckets=6000
# 防火墙表大小,默认65536
net.netfilter.nf_conntrack_max=2097152
# 二层的网桥在转发包时是否被 iptables 的 FORWARD 规则所过滤
# 部分 K8S 网络插件依赖于 iptables,所以需要开启
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# 尽量不使用 swap
vm.swappiness=0
应用参数
root@docker:~# sysctl -p
swap设置
swap会影响docker的运行(读写内存命中swap时,速度较慢),一般都会禁止swap
临时禁止
# 临时禁止,重启后恢复,适用于不能重启的主机
root@docker:~# swapoff -a
永久禁止
# 永久禁止,注释 /etc/fstab 中与 swap 相关的行,重启依旧有效
root@docker:~# vi /etc/fstab
...
# /swap.img none swap sw 0 0
...
评论区