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

1. 更新软件包

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中执行更新命令的效果如下。

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 上测试通过

1
2
# deepin
sudo apt-get install -y docker-ce docker-compose
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

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

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

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。

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

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

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

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

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

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

1
sh get-docker.sh --mirror Aliyun

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

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

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

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的软件源。依照如上博客中的教程,执行如下命令(上方的安装命令中已包含这些命令,此处写出来是告知添加这些命令的原因)

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了。

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命令。

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

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

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

2.5. 安装docker-compose

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

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

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

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

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,安装会出现如下报错,无法成功安装;

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的可执行文件安装。

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的

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,命令执行结果如下;

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

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

image-20231028204647761

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

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

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

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,该代理地址的下载速度很快,完全可用。

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最新版本搞定!

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

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

3. 修改docker镜像源

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

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

1
sudo vim /etc/docker/daemon.json

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

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

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

1
sudo systemctl restart docker

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

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

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;

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的容器镜像版本,应该采用如下命令来操作

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操作,请根据特定容器进行操作,详情百度吧!

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