Docker安装
在线安装
添加安装源
# 安装 yum-utils 包
$ yum install yum-utils device-mapper-persistent-data lvm2 -y
# 使用阿里云资源库来加快 Docker 镜像的下载速度
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新本地缓存
$ yum makecache fast
yum-util 提供 yum-config-manager 功能
device-mapper-persistent-data 和 lvm2 是 devicemapper 依赖的,部分说明见下面说明:
Device Mapper是 linux 的内核用来将块设备映射到虚拟块设备的 framework,它支持许多高级卷管理技术。docker 的 devicemapper 存储驱动程序利用此框架的自动精简配置(thin provisioning) 和快照功能来管理 docker 镜像和容器。本文将Device Mapper存储驱动称为devicemapper,将它的内核框架称为Device Mapper。
Device Mapper不同于AUFS、ext4、NFS等,因为它并不是一个文件系统(File System),而是 Linux 内核映射块设备的一种技术框架。提供的一种从逻辑设备(虚拟设备)到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略。当前比较流行的 Linux 下的逻辑卷管理器如
LVM2(Linux Volume Manager 2 version)、EVMS(Enterprise Volume Management System)、dmraid(Device Mapper Raid Tool)等都是基于该机制实现的。值得一提的是 Device Mapper 工作在块级别(
block),并不工作在文件级别(file)。Device Mapper 自 Linux 2.6.9 后编入 Linux 内核,所有基于 Linux 内核 2.6.9 以后的发行版都内置 Device Mapper,但你需要进行一些额外的配置才能在 docker 中使用它。比如在 RHEL 和 CentOS 系统中,docker 默认使用的存储驱动是 overlay。
devicemapper存储驱动使用专用于 docker 的块设备,它运行在块级别上而不是文件级别。使用块设备比直接使用文件系统性能更好,通过向 Docker 的宿主机添加物理存储可以扩展块设备的存储空间。更详细的请自行百度
从高到低列出 Docker 的版本
# 从高到低列出 Docker-ce 的版本
$ yum list docker-ce --showduplicates | sort -r
# Docker 版本号:第二列字符串,从第一个英文冒号(:)开始,直到第一个连字符(-)
# docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable
# docker-ce.x86_64 3:19.03.9-3.el7 docker-ce-stable
# docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable
# docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable
# 从高到低列出 Docker-ce-cli 的版本
$ yum list docker-ce-cli --showduplicates | sort -r安装docker
# 安装指定版本号:例如 19.03.0
$ yum install -y docker-ce-19.03.0 docker-ce-cli-19.03.0 containerd.io
# 安装最新版本
$ yum install -y docker-ce docker-ce-cli containerd.io执行到此步,系统已经成功安装 docker 但并未启动。并且创建了 docker 组,但没有向该组添加用户。
离线安装
tgz包
CentOS等Linux操作系统基本是一样的,根据CPU架构[ARM、AMD|X86]选择对应的tgz包即可
下载地址:https://download.docker.com/linux/static/stable/
安装步骤
步骤一: 选择CPU为ARM架构的tgz包进行下载:
https://download.docker.com/linux/static/stable/aarch64步骤二: 解压tgz包(完成后是一个docker文件夹):
bash$ tar -zxvf docker-23.0.1.tgz步骤三: 将docker目录拷贝到/user/bin下(会提示是否覆盖/usr/bin/runc,覆盖即可):
bash$ mv docker/* /usr/bin && rm -rf docker步骤四: systemd管理docker
red
bash$ cat > /usr/lib/systemd/system/docker.service << EOF [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target EOFdeb
bash$ cat > /etc/systemd/system/docker.service << EOF [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target EOF步骤五: 创建配置文件
bash$ mkdir /etc/docker $ cat > /etc/docker/daemon.json << EOF { "insecure-registries": ["http://registry.founder.com"], "data-root":"/data/docker" } EOF步骤六: 启动并设置开机启动
bash$ systemctl daemon-reload $ systemctl start docker $ systemctl enable docker
卸载步骤
$ systemctl stop docker.service
$ rm -rf /usr/lib/systemd/system/{containerd.service,docker.socket,docker.service}
$ rm -rf /etc/docker/daemon.json
$ rm -rf /usr/bin/{containerd,containerd-shim-runc-v2,ctr,docker,docker-init,docker-proxy,dockerd}
$ systemctl daemon-reloadDocker配置调整
调整数据存储路径
步骤一:
停止 Docker 服务
bash$ systemctl stop docker步骤二:
备份数据存储目录
备份当前的 Docker 数据存储目录 /var/lib/docker,或者直接把/var/lib/docker 移动到新建的目录,一定要先停止docker在操作
bash$ mv /var/lib/docker /var/lib/docker.bak步骤三:
创建新的 Docker 数据存储目录,例如 /data/docker
bash$ mkdir /data/docker步骤四:
修改 Docker 配置文件 /etc/docker/daemon.json,如果该文件不存在,则创建它:
graph与data-root:
graph是docker 19.xx前的产物,在docker 19.xx之后弃用,使用data-root进行设置可以在
/etc/docker/daemon.json中配置,也可以在docker.service中修改,效果一样修改完成后
daemon-reload一下然后restart dockerbash$ vi /etc/docker/daemon.json # 将以下内容复制粘贴到文件中或根据需要修改,并将其中的 /data/docker 替换为实际的数据存储路径: { "data-root": "/data/docker" }步骤五:
启动 Docker 服务
bash$ systemctl start docker步骤六:
测试验证,确认 Docker 数据存储路径是否已经修改成功.
bash$ docker info | grep 'Docker Root Dir'
docker-compose
$ mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose -v问题处理
library initialization failed
library initialization failed - unable to allocate file descriptor table - out of memory处理
$ cat > /etc/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
#LimitNOFILE=infinity
#LimitNPROC=infinity
#LimitCORE=infinity
LimitCORE=65535
LimitNOFILE=65535
LimitNPROC=65535
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF然后
$ systemctl daemon-reload
$ systemctl restart docker