目录
1 安装依赖
2 安装docker
3 测试
目前docker分为三类 Docker-CE(社区版),Docker-EE(企业版)和Moby。Moby是docker社区用户自己写的,所以Moby我们一般用不上
每一类的每一个版本中都有Edge与Stable版,Stable维护4个月,Edge维护1个月。目前官网中只能看到Stable版
一般我们将docker安装在Linux上,下面我在Ubuntu Jammy 22.04上安装docker-CE
- 安装社区版与企业版在过程上差异不大,如果你想安装企业版一般得花钱,花完钱找客服问怎么安装就行了
docker一般是安装在服务器上,服务器一般没有图形化界面,所以我们也不使用图形化界面安装
这个是docker的安装文档 Install Docker Engine | Docker Docs
文档中显示了目前docker对linux的支持情况
- x86_64/amd64 大多是台式机的架构。arm64/aarch64 大多是小型设备的架构,比如树莓派
由于我们要安装在ubuntu系统上,你可以看一眼支持情况
- 这个其实也没用,到时输入命令能装就装,不能装再看也不迟
下面是写在老版本docker的方法,我们之前没有老的docker,所以在这就不看了
再往下看有安装的方法,我们有样学样
1 安装依赖
先 sudo apt-get update 更新一下
然后输入 sudo apt-get install ca-certificates curl gnupg 安装 ca-certificates curl gnupg 这三个东西
之后输入sudo install -m 0755 -d /etc/apt/keyrings ,这个命令的意思是 如果没有 /etc/apt/keyrings 这个目录就创建一个,并将这个目录的权限置为755
之后输入 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 获取docker的GPG密钥。docker的GPG密钥每一个机器独一份
我们详细说一下这个命令的意思,首先中间的管道符的意思是 把前一个命令的输出当作后一个命令的输入
curl你可以理解为发送请求的指令。后面的-fsSL是curl的参数,其中f表示失败也输出结果,s表示静默模式(不显示除结果外的一切东西),S表示如果可以显示速度就显示速度(与小s搭配表示只显示结果与速度),L表示限制输出到一行。参数后面就是请求的地址
gpg是专门操作gpg密钥的指令。--dearmor是gpg的参数,表示将已加密的密文解码为原始二进制数据。-o是gpg的参数,表示将解码后的二进制数据保存到指定的位置
输入 sudo chmod a+r /etc/apt/keyrings/docker.gpg 给docker.gpg这个文件 所有用户(a)的可读(r)权限
下面你要输入这些东西
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
这句话的作用就是在 /etc/apt/sources.list.d/docker.list 写入如下内容
我们拆解一下这条命令,斜杠是换行,这里用斜杠单纯就是写不开了,你不用斜杠也行(在一个新的机器上你没办法复制,不用复制的情况下不用写斜杠)
中间的|将命令拆成了两个部分,前面是echo,后面是tee,最后的>是tee部分的内容
先看echo,echo本身的作用是在终端上打印一些东西,这里由于后面有管道符,所以就不在终端显示了。echo从deb打印到stable,其中有变量用$表示,在上面的命令中出现了三个$符号
- $(dpkg --print-architecture) 这个是当前系统的架构信息,比如amd,aarch等
- $VERSION_CODENAME 是版本的系统信息,比如Ubuntu的22.04版本代号是Jammy,但VERSION_CODENAME并不是系统的环境变量,而是os-release这个文件中的
- $(. /etc/os-release && echo "$VERSION_CODENAME") 这里用括号括起来表示括号内的东西是一个整体。一开始的.没有用,可写可不写。&&表示执行完左面的再执行右面的,相当于下图
执行 . /etc/os-release 就相当于在该终端中有 VERSION_CODENAME 这个变量了,你可以直接打印它
到上面 echo的部分就解释完了,下面是 sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
tee就是把前面echo的内容写到 /etc/apt/sources.list.d/docker.list 中,最后的 > /dev/null 是禁止终端输出,我们做个对比看一下
你加不加 > /dev/null 都会将指定的内容写在指定的文件中
执行了上述内容之后,最后更新一下
2 安装docker
我们直接安装最新的,输入 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 这里我们安装的是ce(社区版),如果是企业版这里会有所不同
3 测试
官方给的测试是 docker run hello-world,但我们docker的本地没有hello-world这个东西,所以实际上你进入管理员身份,然后看一下docker images能不能打开就行了
目前安装docker不用再执行别的,每次重启后也不用执行别的语句就能启动