目录
1. 离线二进制包下载
docker安装包下载,根据自己的操作系统,选择合适的版本。
阿里镜像 http://mirrors.aliyun.com/docker-ce/linux/static/stable
官方下载 https://download.docker.com/linux/static/stable/
查看系统版本:
lsb_release -a
查看系统架构:
uname - p
我是x86_64架构,下载了docker-20.10.24.tgz
2. Docker安装
1. 解压
将下载tgz包上传至服务器,执行 tar -xvf docker-20.10.24.tgz 进行解压,解压后目录如下
tar -xvf docker-20.10.24.tgz
chmod 755 -R docker //赋可执行权限
2. 将docker下内容复制到usr/bin目录下
注意一定要将doker目录下的所有文件复制到usr/bin路径下,不要自行添加目录哦,否则启动报错,我就是踩坑,心酸血泪史,最后再说
mv docker/* /usr/bin/
3. 启动docker
cd /usr/bin/
./dockerd &
输出如下,则说明docker启动成功。可执行docker -v检验。
docker已经启动,但是使用 & ,关闭终端后会停止运行,为了更好的管理,我们使用systemctl控制
3. 配置systemctl 运行docker
systemctl命令是Linux操作系统中用于管理系统服务的命令行工具,尤其在RHEL 7及更高版本上,它替代了之前的service和chkconfig命令,将两者的功能整合在一起。systemctl的主要功能包括查询或发送相应的控制命令给systemd、管理unit以及启动或禁止相应的服务等。
1. 编辑docker.service
cd /etc/systemd/system --也可放置在/usr/lib/systemd/system
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
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
重新加载系统控制器,
systemctl daemon-reload
- 启动docker
systemctl start docker
使用docker info查看是否成功启动
到这里最基础版本的docker就安装好了!!
如果启动docker时需要设置额外的参数,可以通过/etc/docker/daemon.json 文件设置,设置好后再启动docker。官方参考文档:https://docs.docker.com/engine/install/binaries/
4. 踩坑记录
之前第2节提到说将docker文件夹下中的内容要全部复制到/usr/bin下面,不要自己添加目录。当时我就是手贱,想着目录结构清晰一点,多建了一层目录,dockerd文件存储路径为:/usr/bin/docker/dockerd
- 执行 /usr/bin/docker/dockerd & 时报错:failed to start containerd: exec: “containerd”: executable file not found in $PATH
这个报错是说containerd服务没有找到。然后执行which containerd ,确实没有这个服务,那么containerd这个服务在哪里呢?观察docker文件下,刚好有一个containerd可执行文件,于是我就把它启动了。 - 启动containerd之后。再次执行 /usr/bin/docker/dockerd & 好家伙,不报之前的错了,报了新的 failed to start runc: exec: “runc”: executable file not found in $PATH
再看眼docker文件夹,好家伙,runc不也在这里么!!
灵光一现,dockerd启动依赖于其他服务,离线包中的每个文件都需要被启动,那怎么解决呢,有以下几个思路
- 将docker文件夹下的文件老老实实放置在usr/bin中。
- 采用软链。
- 修改$PATH变量,将/usr/bin/docker也加进去。
方法1 没啥好说的,方法3网上教程也很多,我采用的是方法2,步骤如下:
如果想统一管理docker文件,可以将docker文件夹放置在其他路径,使用软连接的形式,将所有文件链到/usr/bin下。假设放置在/program/docker
cd /usr/bin
//将上图中所有文件创建软连接
ln -s /program/docker/containerd containerd
ln -s /program/docker/runc runc
ln -s /program/docker/dockerd dockerd
ln -s /program/docker/docker docker
...
5 总结
- 一定要按教程中走!!!没有把握的情况下什么都不要改,按教程中一步一步走,不要自己发挥,不然踩坑浪费时间。
- 缺乏linux相关知识,对linux不熟悉,对于服务启动机制不了解,导致踩坑。
参考:
https://editor.csdn.net/md?articleId=144830469