2023年4月在LinuxMint上安装Docker
2023年4月在LinuxMint上安装Docker
为了以后少浪费一些时间在配环境上(上次的惨痛经历真是历历在目),另外也是学习一下先进的虚拟化技术,我打算在自己的开发用软件系统里面安装一个Docker。
安装软件一般要遵循官方给出的说明,Docker的说明文档
(少看那些上来就让人从源码编译Docker的教程,搞坏环境从无视包管理器开始)
但是这里有个很坑爹的地方,Docker.com默认诱导读者去安装"Docker Desktop",我粗略看了一遍说明,这东西是一个VM,当然Docker组织也给出了一些解释——为何Docker Desktop要使用VM的形式:为了平台移植性、为了使用最新的内核(以便享受新特性)、为了提升保全性,为了最小化变更带来的不良效应;
以及,这个所谓的Docker Desktop支持的桌面环境仅仅包含KDE、Gnome、MATE,虽然他估计到了Mint用户这让人挺开心,但是这并没有照顾到我这个xfce用户啊!(摔)
越读这个说明越觉得不对劲。花了大概有二十分钟,我搞明白了,虽然这东西虽然看起来很美好,但他不是我需要的那个容器管理器Docker,仔细在页面里找了一下,传统意义上的非VM的Docker现在应该是叫Docker-Engine了
这个应该就是我要找的东西了
首先这个页面特地强调了一下,适用于Debian的安装与适用于Ubuntu的安装不一样,虽然不太明白为什么,
不过既然LinuxMint是从Ubuntu那边衍生出来,而非直接从Debian衍生的,那么应该是按照Ubuntu的做法来的,
(顺便了解了一下,原来还有一个LMDE项目,这个项目让Mint摆脱了Ubuntu,直接使用Debian构造Mint。但是“目前”而言应该和我没什么关系,但是假如某公司继续做让用户不高兴的事情以至于影响到这边,可能很快就和我有关系了)
通过官方指导安装
先研究一下官方文档怎么说的,之后再通过镜像站安装
第一步,卸载旧版本的Docker
1 | sudo apt-get remove docker docker-engine docker.io containerd runc |
由于没有安装过Docker,所以这一步对我没有意义。
此外
Images, containers, volumes, and networks stored in /var/lib/docker/ aren’t automatically removed when you uninstall Docker. If you want to start with a clean installation, and prefer to clean up any existing data, read the uninstall Docker Engine section.
懒得翻译,反正就是关于/var/lib/docker/
里面的文件,自己决定要不要保留
第二步,准备GPG的安装环境
GPG是一套密钥方案,Ubuntu下的APT使用它来管理软件包的密钥,Mint也不例外。
1 | sudo apt-get update |
第三步,安装Docker组织的密钥
下载
1 | sudo mkdir -m 0755 -p /etc/apt/keyrings |
安装
1 | echo \ |
FAQ:GPG权限错误
如果GPG密钥文件的权限错误,可能会有问题,这通常是由于umask设置错误导致的
通过下列命令解决文件没有读取权限的问题
1 | sudo chmod a+r /etc/apt/keyrings/docker.gpg |
第四步,安装Docker
1 | sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
最后,检查安装情况
1 | sudo docker run hello-world |
输出部分应当首先开始下载一个容器
之后应当展示一个欢迎页面
按照官方给出的指导,到这一步安装就算完成了
通过国内的镜像站安装
事实上这一部分才是国内用户需要看的。
参阅tuna协会关于docker-ce镜像的说明,整理如下
卸载旧版本的docker
1 | sudo apt remove docker docker-engine docker.io containerd runc |
安装必要的工具
1 | sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common |
gnupg和gnupg2应该是有一个就足够的
创建钥匙环保存目录(如果已有keyrings/
就不用创建)
1 | sudo mkdir -m 0755 -p /etc/apt/keyrings |
下载并安装docker.com的gpg密钥
1 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg |
前一个指令下载了来自"docker.com"的密钥
后一个指令生成了二进制密钥,并将二进制密钥以名称docker.gpg
存放在了之前建立的钥匙环保存目录中。
(名字只是一个代号,不过,如果这里不用docker.gpg
这个名字,待会sourcelist里面也要对signed-by
的参数做对应的修改)
在sources.list.d
目录中创建一个镜像源配置文件
用tuna协会提供的一条命令搞定
1 | echo \ |
手动创建方式
目前阶段我不是很喜欢上一种方式,作为一个希望尽可能多了解这个系统的人,我需要尽可能搞清楚这条命令中每个部分的含义,然后手动完成
在熟练之后,我会使用尽可能节省时间的方式完成这样的任务
但是tuan提供的这条命令给了很多参考,可以直接拿来使用
手动创建源列表的步骤如下:
在/etc/apt/sources.list.d/
中创建一个文件,命名为docker.list
(名字只是一个代号,但是建议命名为docker.list
方便之后查找和修改)
然后查询:
正在使用的计算机系统CPU架构
1
dpkg --print-architecture
正在使用的操作系统代号
1
lsb_release -cs
前一个一般为amd64
,当然,如果对于当年惨兮兮没有趁手计算机用的我来说也有可能是i386
或者i686
;
对于Ubuntu用户,后一个可能是trusty
xenial
bionic
focal
jammy
kinetic
但是对于我这样的LinuxMint 21.1用户,这个选项的输出是vera
,稍稍回忆一下,LinuxMint版本vera
对应的Ubuntu版本是jammy
然后在docker.list
中输入以下内容,注意替换其中的带引号的中文字符为对应的内容(连左右两侧的引号一起替换,替换后的内容不再带引号),然后保存
1 | deb [arch="CPU架构" signed-by=/etc/apt/keyrings/docker.gpg] https://"你所使用的镜像源网站docker-ce的目录/linux/你所使用的发行版" "操作系统代号" stable |
特别地,对于Mint用户,请使用ubuntu的仓库,并且"操作系统代号"使用对应的ubuntu代号
比如一个来自XDU的学子,恰巧也是Mint21.1、或者Mint21用户,那么这里就应该写
1 | deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://linux.xidian.edu.cn/mirrors/docker-ce/linux/ubuntu jammy stable |
来自Mint参考文件的版本对应表格
VERSION | CODENAME | PACKAGE BASE |
---|---|---|
21.1 | Vera | Ubuntu Jammy |
21 | Vanessa | Ubuntu Jammy |
20.3 | Una | Ubuntu Focal |
20.2 | Uma | Ubuntu Focal |
20.1 | Ulyssa | Ubuntu Focal |
20 | Ulyana | Ubuntu Focal |
19.3 | Tricia | Ubuntu Bionic |
19.2 | Tina | Ubuntu Bionic |
19.1 | Tessa | Ubuntu Bionic |
19 | Tara | Ubuntu Bionic |
5 | Elsie | Debian Bullseye |
软件源文件中的代号一律使用小写字母
对于LMDE用户,则需要使用Debian仓库以及对应的Debian代号,
比如一个XDU的LMDE5用户在文件里就应该写
1 | deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://linux.xidian.edu.cn/mirrors/docker-ce/linux/debian bullseye stable |
更新源数据库并安装docker
1 | sudo apt update |
检查安装是否成功
1 | sudo docker run hello-world |
这将会打印一条很长的提示信息
至此,docker(非VM)安装就完成了。
注意,每运行一次上面这个命令,都会创建一个新的容器
如果想要清理这些运行docker run
后创建的容器文件,可以先
1 | docker container ls -a |
检查目前所有容器的列表
然后运行 1
docker container rm $容器名称
Docker的可用性配置
Docker镜像设置
由于我使用的是基于Debian的Ubuntu的LinuxMint,使用systemd
那么对应需要修改的镜像配置文件是
1 | /etc/docker/daemon.json |
这是一个json文件(若无需要新建),加入以下内容
1 | { |
重启docker守护进程
1 | sudo systemctl daemon-reload |
注意,对于systemd操作系统而言,并不是修改/etc/default/docker
反正我改了没效果
修改Docker组成员
由于我们是通过系统的包管理器安装的Docker
默认存储目录的所有者都是root
,需要将我们自己加入用户组docker
之后,才可以不借超级用户身份就执行操作
1 | sudo usermod -aG docker $USER |
之后需要登出登入一遍,让针对用户组文件的修改生效
然后,以本用户的身份使用docker应该就畅行无阻了
Knighthana
2023/04/11 动笔
2023/04/13 完稿
2023/05/15 第一次更新
2023/05/18 第二次更新