1、linux安装docker--二进制安装
1、docker依赖的环境
1、依赖环境
- 64 bits CPU
- Linux Kernel 3.10+ #不要使用centos6安装docker,因为内核版本较低,会出现各种不确定的问题
- Linux Kernel cgroups and namespaces
2、安装环境
]# uname -a
Linux 192.168.248.130 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
2、安装并启动docher
1、下载二进制安装包
https://download.docker.com/linux/static/stable/x86_64/docker-20.10.0.tgz #docker官方镜像
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/docker-20.10.0.tgz #清华大学镜像
https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-20.10.0.tgz #阿里镜像
2、解压docker二进制包
]# tar zvfx ./docker-20.10.0.tgz -C /usr/local/
]# cd /usr/local/
]# mv docker docker-20.10.0
]# ln -s docker-20.10.0 docker
3、添加环境变量
]# vim /etc/profile
export PATH=$PATH:/usr/local/docker
]# source /etc/profile
4、添加启动服务脚本
]# vim /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
[Service]
Type=notify
NotifyAccess=main
Environment=PATH=/usr/local/docker:/usr/bin:/usr/sbin
ExecStart=/usr/local/docker/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
KillMode=process
[Install]
WantedBy=multi-user.target
]# chmod +x /usr/lib/systemd/system/docker.service #给脚本加可执行权限
]# systemctl daemon-reload #重新加载服务的配置文件
- 很多时候在挂载磁盘后不想用docker默认目录,可用 -g 修改目录到指定目录 (docker默认目录是/var/lib/docker,包括pull下来的镜像都在该目录下)
- ExecStart修改为:ExecStart=/usr/bin/dockerd -g /hengha/docker
5、启动docker服务
]# systemctl start docker.service #启动docker服务
]# systemctl enable docker.service #开机自启
]# systemctl status docker.service #查看Docker状态
]# systemctl stop docker.service #关闭docker
]# systemctl restart docker.service #重启docker
6、查看docker相关信息
]# docker version #显示Docker版本信息
]# docker info #显示docker信息详情
2、linux安装docker--yum安装
1、docker依赖的环境
1、依赖环境
- 64 bits CPU
- Linux Kernel 3.10+ #不要使用centos6安装docker,因为内核版本较低,会出现各种不确定的问题
- Linux Kernel cgroups and namespaces
2、安装环境
]# uname -a
Linux 192.168.248.130 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
2、安装并启动docker
1、docker镜像的repo源
https://download.docker.com/linux/centos/docker-ce.repo #docker官方的的centos的repo源
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo #清华大学的centos的repo源,注意此源并指向的是官方源
:%s@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@ #手动修改镜像指向
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #阿里的的centos的repo源
2、下载repo源
]# cd /etc/yum.repos.d/
]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装docker
]# yum install docker-ce-20.10.0
- 注意,centos7镜像仓库extras中有docker镜像(名为:docker,版本:1.13.1)
4、启动docker服务
]# systemctl start docker.service #启动docker服务
]# systemctl enable docker.service #开机自启
]# systemctl status docker.service #查看Docker状态
]# systemctl stop docker.service #关闭docker
]# systemctl restart docker.service #重启docker
5、查看docker相关信息
]# docker version #显示Docker版本信息
]# docker info #显示docker信息详情
3、Docker引擎(Engine)升级
- 升级Docker引擎(Engine)是一项重要的任务,尤其是生产环境。
- 需要重视升级操作的每个前置条件,包括确保容器配置了正确的重启策略;在Swarm Mode模式下使用服务时,需要确保正确配置了draining node。
- 升级Docker引擎的关键步骤如下:
- (1)停止Docker守护程序。
- (2)移除旧版本Docker。
- (3)安装新版本Docker。
- (4)配置新版本的Docker为开机自启动。
- (5)确保容器重启成功。
4、Docker存储驱动的选择
1、Docker存储驱动
1、存储驱动
- 每个Docker容器都有一个本地存储空间,用于保存层叠的镜像层(Image Layer)以及挂载的容器文件系统。默认情况下,容器的所有读写操作都发生在其镜像层上或挂载的文件系统中,所以存储是每个容器的性能和稳定性不可或缺的一个环节。
- 本地存储是通过存储驱动(Storage Driver)进行管理的,有时候也被称为Graph Driver或者GraphDriver。虽然存储驱动在上层抽象设计中都采用了栈式镜像层存储和写时复制(Copy-on-Write)的设计思想,但是Docker在Linux底层支持几种不同的存储驱动的具体实现,每一种实现方式都采用不同方法实现了镜像层和写时复制。虽然底层实现的差异不影响用户与Docker之间的交互,但是对Docker的性能和稳定性至关重要。
- 在Linux上,Docker可以选择的存储驱动包括AUFS(最原始也是最老的)、Overlay2 (可能是未来的最佳选择)、 Device Mapper、Btrfs和ZFS。
- Docker在Windows操作系统上只支持一种存储驱动,即Windows Filter。
- 存储驱动的选择是节点级别的。这意味着每个Docker主机只能选择一种存储驱动,而不能为每个容器选择不同的存储驱动。
2、修改存储驱动
- 选择存储驱动并正确地配置在Docker环境中是一件重要的事情,特别是在生产环境中。
- 在Linux上修改存储引擎配置,修改完成之后需要重启Docker才能够生效。
]# vim /etc/docker/daemon.json #将存储驱动设置为overlay2
{
"storage-driver": "overlay2" #如果不是文件的最后一行,则需要在行尾处增加逗号。
}
- 如果修改了正在运行Docker主机的存储引擎类型,则现有的镜像和容器在重启之后将不可用,这是因为每种存储驱动在主机上存储镜像层的位置是不同的(通常在/var/lib/docker/<storage-driver>/...目录下),修改了存储驱动的类型,Docker就无法找到原有的镜像和容器了。切换到原来的存储驱动,之前的镜像和容器就可以继续使用了。
- 如果希望在切换存储引擎之后还能够继续使用之前的镜像和容器,需要将镜像保存为Docker格式,上传到某个镜像仓库,修改本地Docker存储引擎并重启,之后从镜像仓库将镜像拉取到本地,最后重启容器。
- 选择存储驱动的参考指南(最好参阅最新的docker文档):
- Red Hat Enterprise Linux:4.x版本内核或Docker17.06+,建议使用Overlay2。
- 注意,如果使用overlay2驱动程序,需要4.0或更高版本的Linux内核,或使用3.10.0-514及更高版本的RHEL或CentOS。
- Red Hat Enterprise Linux:低版本内核或低版本的Docker,建议使用Device Mapper。
- Ubuntu Linux:4.x版本内核或更高版本,建议使用Overlay2。
- Ubuntu Linux:更早的版本建议使用AUFS。
- SUSE Linux Enterprise Server: Btrfs。
3、查看存储驱动类型
2、Device Mapper存储驱动
1、Device Mapper配置
- 大部分Linux存储驱动不需要或需要很少的配置。但是,Device Mapper通常需要合理配置之后才能表现出良好的性能。
- 默认情况下,Device Mapper采用loopback mounted sparse file作为底层实现来为Docker提供存储支持。如果需要开箱即用并且对性能没什么要求,那么这种方式是可行的。但这并不适用于生产环境。实际上,默认方式的性能很差,并不支持生产环境。
- 为了达到Device Mapper在生产环境中的最佳性能,需要将底层实现修改为direct-lvm模式。这种模式下通过使用基于裸块设备(Raw Block Device)的LVM精简池(LVM thin pool)来获取更好的性能。
- 在Docker 17.06以及更高的版本中可以配置direct-1vm作为存储驱动。但是在本书撰写时,该方式存在某种限制。其中最主要的一点是,这种方式只能配置一个块设备,并且只有在第一次安装后才能设置生效。
2、让Docker自动设置direct-lvm
- 编辑/etc/docker/daemon.json(配置后服务没有启动成功,原因应该是没有LVM存储卷)
]# vim /etc/docker/daemon.json
{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.directlvm_device=/dev/xdf",
"dm.thinp_percent=95",
"dn.thinp_metapercent=1",
"dm.thinp_autoextend_threshold=80",
"dm.thinp_autoextend_percent=20",
"dm.directlvm_device_force=false"
]
}
-
- dm.directlvm_device:设置了块设备的位置。为了存储的最佳性能以及可用性,块设备应当位于高性能存储设备(如本地SSD)或者外部RAID存储阵列之上。
- dm.thinp_percent=95:设置了镜像和容器允许使用的最大存储空间占比,默认是95%。
- dm.thinp_metapercent:设置了元数据存储( MetaData Storage )允许使用的存储空间大小,默认是1%。
- dm.thinp_autoextend_threshold:设置了LVM自动扩展精简池的阈值,默认是80%。
- dm.thinp_autoextend_percent:表示当触发精简池(thin pool )自动扩容机制的时候,扩容的大小应当占现有空间的比例。
- dm.directlvm_device_force:允许用户决定是否将块设备格式化为新的文件系统。
- 重启Docker。
- 确认Docker已成功运行,并且块设备配置已被成功加载。