deepin、ubuntu 虚拟机和 centos 服务器安装 docker

1. 更新软件包

bash
1
2
3
4
# deepin 和 ubuntu
sudo apt-get -y update && sudo apt-get -y upgrade
# centos
sudo yum -y update && yum -y upgrade

安装 docker 之前,先更新一下软件包。在 deepin 中执行更新命令的效果如下。

plaintext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mothra@mothra-PC:~$ sudo apt-get update && sudo apt-get upgrade
请输入密码:
验证成功
命中:1 https://community-packages.deepin.com/deepin apricot InRelease
命中:2 https://community-packages.deepin.com/driver driver InRelease
命中:3 https://pro-driver-packages.uniontech.com eagle InRelease
命中:4 https://community-packages.deepin.com/printer eagle InRelease
命中:5 https://home-store-img.uniontech.com/230506175326447/appstore deepin InRelease
正在读取软件包列表... 完成
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
正在计算更新... 完成
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。

2. 安装 docker

2.1. 在 deepin 或 centos8 上安装 docker

下面给出的安装命令在 deepin v20.9 和 centos 8 上测试通过

bash
1
2
# deepin
sudo apt-get install -y docker-ce docker-compose
bash
1
2
3
4
5
# centos 8
sudo yum install -y https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io

安装之后,用如下命令看看版本,看看是否安装成功;出现版本号就是安装完毕了

plaintext
1
2
$ docker -v
Docker version 19.03.8, build 1b4342cd4c

如下图所示,就是安装成功了,docker 命令能显示出版本号,docker-compose 命令也是正常的。

image-20230507193318278

2.2. 在 Ubuntu 22.04 LTS 上安装 docker

参考该博客在 ubuntu 中安装:容器与云 | 如何在 Ubuntu 22.04 LTS 中安装 Docker 和 Docker Compose

bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 开始前先更新软件源
sudo apt -y update && sudo apt -y upgrade
sudo apt full-upgrade

# 1.安装必要的证书并允许 apt 包管理器使用以下命令通过 HTTPS 使用存储库
sudo apt -y install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release

# 2.运行下列命令添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 3.添加官方docker库的软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4.再次更新软件源仓库
sudo apt -y update

# 5.安装docker
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

上述命令在 WSL2 的 Ubuntu 22.04.03 系统中测试通过,成功安装 docker。

plaintext
1
2
❯ docker -v
Docker version 25.0.2, build 29cf629

在 ubuntu 22.04 上,还可以使用官方提供的脚本快速安装 docker,这样会方便很多。

bash
1
2
3
sudo apt install -y curl
curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh

除了这个脚本,还可以使用下面的脚本,都是等价的

bash
1
2
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

如果因为网络问题安装不了,可以在脚本后填加使用阿里云镜像的选项。如果下载不了脚本,可以在 windows 电脑上下载好脚本,传输到 linux 主机上,再执行脚本。

bash
1
sh get-docker.sh --mirror Aliyun

2.3. CentOS 8 安装报错找不到 docker 软件包

参考 https://www.cnblogs.com/yizhangheka/p/16614941.html

在 centos8 上安装 docker 的时候,发现找不到 docker 的相关信息

plaintext
1
2
3
4
5
6
# sudo yum install docker-ce docker-ce-cli containerd.io
Last metadata expiration check: 0:12:10 ago on Wed 10 May 2023 10:37:43 PM CST.
No match for argument: docker-ce
No match for argument: docker-ce-cli
No match for argument: containerd.io
Error: Unable to find a match: docker-ce docker-ce-cli containerd.io

这是因为我们没有 docker 的软件源。依照如上博客中的教程,执行如下命令(上方的安装命令中已包含这些命令,此处写出来是告知添加这些命令的原因)

bash
1
2
3
4
5
6
7
8
9
10
11
# 下载软件源
yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm

# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 更新docker源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装docker
sudo yum install docker-ce docker-ce-cli containerd.io

这样就能安装成功了,执行 docker version 命令查看版本,出现如下内容就是成功安装 docker 了。

plaintext
1
2
3
4
5
6
7
8
9
> docker version
Client: Docker Engine - Community
Version: 24.0.6
API version: 1.43
Go version: go1.20.7
Git commit: ed223bc
Built: Mon Sep 4 12:33:07 2023
OS/Arch: linux/amd64
Context: default

2.4. 启动和停止 docker 服务

使用如下命令,启动 docker 服务,不同系统启动 docker 的命令可能不同,建议自行百度相关 Linux 系统下的命令。大部分 Linux 系统都可以使用 systemctl 命令。

bash
1
2
3
systemctl start docker   # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务

如果需要,还可以设置开机自启动 docker 服务。

bash
1
2
systemctl enable docker  # 开机自启
systemctl disable docker # 关闭开机自启

2.5. 安装 docker-compose

2.5.1. 使用 Python 安装(可能失败)

需要保证系统内的 python 环境完好

plaintext
1
pip3 install -i https://mirrors.aliyun.com/pypi/simple docker-compose

安装好了之后查看版本,如下便是安装成功了

plaintext
1
2
3
4
5
$ docker-compose version
docker-compose version 1.29.2, build unknown
docker-py version: <module 'docker.version' from '/usr/local/lib/python3.10/site-packages/docker/version.py'>
CPython version: 3.10.5
OpenSSL version: OpenSSL 1.1.1q 5 Jul 2022

参考 https://www.cnblogs.com/yizhangheka/p/16614941.html

但在我的 CentOS8 上,上面的 python 安装方式会失效;我使用的是 python3.10.6,安装会出现如下报错,无法成功安装;

plaintext
1
2
3
4
5
  File "<string>", line 201, in get_source_files
File "/tmp/pip-build-env-v8dnn0u_/overlay/lib/python3.10/site-packages/setuptools/_distutils/cmd.py", line 107, in __getattr__
raise AttributeError(attr)
AttributeError: cython_sources
[end of output]

所以需要尝试其他方式。

2.5.2. 从 Github 安装可执行文件

参考博客 : Install Docker and Compose on CentOS 8 | RHEL 8how-to-install-docker-on-centos-8/

可以使用如下命令,直接下载 docker-compose 的可执行文件安装。

bash
1
2
3
sudo curl -L "https://github.com/docker/compose/releases/download/v1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 修改权限
sudo chmod +x /usr/local/bin/docker-compose

安装完毕后的测试结果如下,也是 OK 的

plaintext
1
2
# docker-compose -v 
docker-compose version 1.29.2, build 5becea4c

但是这个安装的版本实在是太老了,最新版本都已经到 2.23.0 了。又在想办法找最新版本的安装教程;我尝试修改上述 curl 命令中的版本号,但好像没有用。

image-20231028204919726

其实图片里面的问题在于链接中版本号之前少了一个 v,加上去之后就可以了。
下文是我当时找到正确下载链接的过程,思路可供参考。

还是得用老办法,先打开 github 的 release 页面,找找可执行文件的下载地址:github.com/docker/compose/releases

这时候我发现上述的 curl 安装命令其实本质上就是下载一个可执行文件。在 CentOS8 上,uname -slinuxuname -mx86_64,命令执行结果如下;

plaintext
1
2
3
4
> uname -s
Linux
> uname -m
x86_64

所以其实我们需要下载的是 docker-compose-linux-x86_64 这个文件,对应下图中红色箭头所指的位置

image-20231028204647761

右键该文件,即可复制文件下载地址

plaintext
1
https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64

找到最新版本的文件 url 了,将其用相同的方式下载下来不就行了?

bash
1
2
3
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
# 修改权限
chmod +x /usr/local/bin/docker-compose

如果 github 下载实在是太慢,可以尝试用 github 的代理地址下载;截至 20231028,该代理地址的下载速度很快,完全可用。

bash
1
sudo curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose

安装完成,当前 v2.23.0 最新版本搞定!

plaintext
1
2
> docker-compose --version
Docker Compose version v2.23.0

实测该方式在 Ubuntu22.04 虚拟机上也可用。

3. 修改 docker 镜像源

国内下载 docker 的 images 有时候很慢,所以需要我们修改镜像源。可以打开这个网站

用如下办法修改镜像源,编辑 /etc/docker/daemon.json 配置文件。

bash
1
sudo vim /etc/docker/daemon.json

进入该文件后,按 i 进入编辑模式,复制如下内容,用 shift+ins 粘贴到文件内

json
1
2
3
{
"registry-mirrors": ["https://docker.nju.edu.cn"]
}

然后:wq 退出,用如下命令重启 docker 服务,镜像就设置好了

bash
1
sudo systemctl restart docker

国内可用的 docker 镜像有下面这些,更多镜像可以百度看看。南京大学和上海交大的镜像源用的人少,更好用。

plaintext
1
2
3
4
5
6
7
8
科大镜像:https://docker.mirrors.ustc.edu.cn
网易:https://hub-mirror.c.163.com
南京大学: https://docker.nju.edu.cn
上海交大: http://docker.mirrors.sjtug.sjtu.edu.cn

打开下面的地址登录你的阿里云账号获取你的专属镜像源
https://cr.console.aliyun.com/#/accelerator
阿里云:https://<你的ID>.mirror.aliyuncs.com

2024.06.12 更新:因为一些缘故,国内的大部分 docker 镜像站点都已经停止服务,如果有需要,可以考虑购买海外的云服务器,自建 docker 拉取的代理,或者尝试使用 dockerfile 在基础镜像之上构建你需要的容器镜像。

4. 一些 docker 常用命令

4.1. docker cli 命令

因为当前我们用的是 deepin 的用户,而不是 root,所以执行 docker 相关命令的时候都需要带上 sudo

bash
1
2
3
4
5
6
sudo docker ps # 查看当前正在运行的容器
sudo docker ps -a # 查看当前所有容器(包括未运行的)
sudo docker stats # 查看docker运行状态(资源占用)
sudo docker stats 容器名字 # 某一个容器的运行状态
sudo docker rm 容器名字 # 删除容器
sudo docker rmi 镜像hash # 删除镜像

docker-compose 的操作需要根据 docker-compose.yml 进行,具体的请参考不同容器的 yml 文件编写和使用。一般用户量大的开源 docker 都会有 docker-compose.yml 的示例文件的!

4.2. docker-compose 升级容器镜像

如下就是一个部署 memos 服务的简单 docker-compose.yml 文件,使用的镜像版本是 latest;

yaml
1
2
3
4
5
6
7
8
9
10
version: "3.0"
services:
memos:
image: neosmemo/memos:latest
container_name: memos
restart: unless-stopped
volumes:
- ./memos/:/var/opt/memos
ports:
- 14730:5230

假设你需要升级这个 docker 的容器镜像版本,应该采用如下命令来操作

bash
1
2
3
4
sudo docker-compose stop  # 停止当前容器运行
sudo docker rm memos # 先把原有的容器删除掉
sudo docker-compose pull # 拉取最新的latest镜像
sudo docker-compose up -d # 重启容器,此时就会以最新镜像运行。

执行效果如下图

image.png

另外一个办法就是将 yml 文件中的 latest 改成最新 docker 镜像版本的版本编号,再执行 docker-compose up -d 来运行,此时也会自动 pull 指定版本的镜像并启动 docker 容器。

注意:升级容器镜像之前,请备份当前容器的配置、资源文件夹,避免升级失败时某些文件被新镜像修改而无法回退旧版本!备份了容器的配置文件夹,至少升级失败还能保证旧版本可以正常使用。

另外,如果你使用的是 latest 来拉取镜像,那么在升级版本之前请记录下升级之前使用的容器版本号(非 latest 的数字版本号,一般在容器内的服务 / 前端页面中都能看到当前的版本号),或者是当前使用的容器镜像的 hash 值,方便后续回退到能正常使用的旧版本

5. The end

其他的 docker 操作,请根据特定容器进行操作,详情百度吧!

有任何问题,欢迎评论区交流!