Ubuntu 上安装 Docker
以下命令默认以 root 进行操作。
另外,开发环境中,简单起见,记得关闭 Linux 防火墙
# 命令 查看状态 sudo ufw status
开启并开机启动 sudo ufw enable
关闭 sudo ufw disable
Ubuntu 的防火墙默认是关闭的。
前期准备工作
Ubuntu 的默认的 apt 软件源中实际上有 docker 的安装包,理论上来说,你直接利用默认软件源中的 docker 安装包进行安装也是可行的。
但是 docker 官方考虑到不同的用户对 docker 的不同版本有不同的需求<small>(有人追求最新,有人追求稳定)</small>,他们专门提供了一个仓库用以提供多个版本的 docker 的下载。
另外,通常 apt 默认软件源中的软件的版本并不一定是最新版。
因此,我们必须『告知』apt 有这样一个仓库的存在,并且未来要求 apt 从这个仓库中下载我们指定版本的 docker 。<small>而非默认的仓库。</small>
-
查看内核版本
Docker 官方要求 Linux 内核版本至少
3.8
以上,建议3.10
以上。Ubuntu 18.04 的内核是符合其要求的。通过以下命令可查看内核版本:
uname -r
-
卸载旧版本
较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
sudo apt remove \ docker \ docker-engine \ docker-ce \ docker.io
-
为配置 docker 软件源作准备
sudo apt install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
<small>这一步操作是为下一步操作作准备工作。</small>
-
为 apt 将要添加的 docker 软件源添加校验
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
<small>这一步操作是为下一步操作作准备工作。</small>
-
为 apt 添加 docker 官方软件源
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
这步操作的最直观的效果就是:你的 /etc/apt/sources.list 文件中会『多出来一行』<small>(一个远程仓库的网址)</small>
sudo sed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/apt/sources.list
记得执行以此 sudo apt update,去更新『软件清单』。
-
验证仓库是否添加成功:查看所有仓库中所有 docker 版本
apt-cache madison docker-ce
安装 docker 并验证
从网络仓库中下载,安装
sudo apt install \
docker-ce \
docker-ce-cli \
containerd.io
在没有指定版本的情况下,apt 下载的是软件源中的最新版。如果想要指定特定版本,则使用如下语法:
sudo apt install \
docker-ce=<VERSION_STRING> \
docker-ce-cli=<VERSION_STRING> \
containerd.io
带入特定版本号,例如:5:19.03.13~3-0~ubuntu-bionic
。
启动 Docker
类似于 MySQL,Docker 也是基于 CS 架构的。你的 Ubuntu 上存在一个 Docker 服务端和一个 Docker 客户端。
要使用 Docker 的前提是:确保 Docker 的服务端启动了。
启动 docker 服务端
sudo systemctl start docker
将 docker 服务端设置为开机启动
sudo systemctl enable docker
验证安装是否成功
Docker 是 CS 架构的,docker 的服务端是以 docker 用户<small>(属于 docker 用户组)</small>身份运行的,因此你去执行 docker 命令时,你的身份<small>(和权限)</small>是不符合的。
当你通过 docker version 命令去验证安装是否成功时,会出现如下信息:
Got permission denied while trying to connect to the Docker daemon socket ...... connect: permission denied
<small>有 client 和 server 两部分表示 docker 安装启动都成功了。</small>
解决办法有 2 个:
-
你所执行的所有的 docker 命令前面都加上 sudo 。将你的身份临时提升为 root,root 自然是有权限执行 docker 命令的。
sudo docker version
-
将你自己添加到 docker 用户组中。你和 docker 用户所属同一个用户组,你的自然就有权限执行 docker 命令。
# 创建名为 docker 的用户组。 # 正常情况下,这条命令的结果会告诉你 docker 用户组已存在。 sudo groupadd docker # 将当前用户(即你所登录系统的账号)添加至 docker 用户组 sudo gpasswd -a $USER docker # 更新 docker 用户组 newgrp docker
验证连接 docker hub 中央镜像仓库
输入 docker search -f is-official=true mysql
命令,会出现类似如下结果:
NAME DESCRIPTION STARS OFFICIAL ...
mysql MySQL is a widely used, open-source relation… 8819 [OK] ...
mariadb MariaDB is a community-developed fork of MyS… 3102 [OK] ...
percona Percona Server is a fork of the MySQL relati… 459 [OK] ...
配置国内镜像
由于 docker hub 的中央镜像仓库在国外,因此有时我们连接 docker hub 从中下载镜像速度会很感人,因此,我们需要配置国内的镜像网址,从国内现在镜像文件。
:::tip
国内的镜像本质上就是 docker hub 中央仓库在国内的一份缓存/备份。
:::
通过 vi 命令编辑相关配置文件:
sudo vi /etc/docker/daemon.json
如果该文件存在,则将其内容清除;如果文件不存在,<small>(打开该文件后,其内容是空白的),</small>编辑结束后保存退出,即创建。
输入如下内容:
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
<small>该配置文件配置了两个镜像,一个是 docker 官方在中国境内的官方镜像,一个是中科大维护的一个镜像。</small>
重新启动 docker 服务:
sudo systemctl restart docker
查看修改结果:
docker info
会有如下内容:
...
Registry Mirrors:
https://registry.docker-cn.com/
https://docker.mirrors.ustc.edu.cn/
...
导入已有的镜像文件
考虑到有些场景下的联网的不方便,docker 提供了将已下载的 images 打包导出,再在别处导入的功能。
导出已有 image 使用命令:
docker save <repository>:<tag> -o <repository>.tar
例如:
docker save mysql:8.0.16 -o mysql-8.0.16.tar
导入 image 使用命令:
docker load -i <repository>.tar
例如:
docker load -i mysql-8.0.16.tar