目 录CONTENT

文章目录

Docker 入门系列(2)- Docker 安装

ZERO
2022-06-18 / 0 评论 / 0 点赞 / 53 阅读 / 0 字

文章转载自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安装包下载地址

官方下载地址(国内可能网络较慢)

清华源下载地址

CentOS 7 安装Docker(YUM)

安装方法参考

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)

安装方法参考

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支持https
  • software-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

二进制包下载地址: https://download.docker.com/linux/static/

准备

创建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
...

0

评论区