Ubuntu 22.04 上 Docker 安装、配置与核心使用指南
1. 项目概述:为什么在Ubuntu 22.04上拥抱Docker?
如果你是一名开发者、运维工程师,或者仅仅是技术爱好者,最近在Ubuntu 22.04 LTS上折腾环境时,大概率会听到“Docker”这个词。它就像一个魔法盒,能把你的应用及其所有依赖——从运行时、系统工具到库文件——打包成一个标准化的单元。这意味着,你再也不用在本地机器上为不同项目安装不同版本的Python、Node.js或者MySQL而头疼,也不用担心“在我机器上好好的,怎么到你那就跑不起来了”这种经典问题。
简单来说,Docker提供了一种轻量级的虚拟化方案,它不像传统虚拟机那样需要模拟整个操作系统,而是直接利用宿主机的内核,通过容器(Container)技术实现隔离。这带来的好处是启动速度极快、资源开销极小。在Ubuntu 22.04这个长期支持、稳定且性能优秀的Linux发行版上部署Docker,可以说是如虎添翼,无论是用于本地开发、测试,还是作为生产环境的基石,都是目前业界的标准做法之一。
我自己的经验是,自从在Ubuntu上系统性地使用Docker后,开发环境的搭建时间从以小时计缩短到了分钟级别,团队协作的摩擦也大大减少。这篇内容,就是为你梳理在Ubuntu 22.04 LTS上从零开始安装、配置到初步使用Docker的完整路径,并分享一些我踩过坑后才明白的实操细节。无论你是刚接触Linux的新手,还是想系统化自己Docker知识的老兵,都能从这里找到可操作的步骤和背后的逻辑。
2. 核心需求解析:我们到底需要Docker解决什么?
在动手安装之前,我们先花点时间想清楚,为什么是Docker,以及我们期望它带来什么。这能帮助你在后续的配置和选择中做出更明智的决定。
2.1 环境一致性与隔离性
这是Docker最核心的价值。想象一下,你正在开发一个基于Python 3.9和PostgreSQL 14的Web应用,而你的同事可能还在用Python 3.7和PostgreSQL 12。如果没有容器,你们要么统一开发环境(这往往很困难),要么各自维护一套复杂的虚拟环境,极易冲突。Docker容器将应用及其环境封装在一起,确保了从开发、测试到生产,应用运行的环境完全一致。每个容器都是相互隔离的沙箱,一个容器里的库版本更新不会影响到其他容器。
2.2 快速部署与弹性伸缩
传统部署应用,需要在新服务器上安装操作系统、配置环境、部署代码,流程繁琐。而使用Docker,你只需要将构建好的镜像(Image)拉到任何安装了Docker引擎的服务器上,一条命令即可运行。这对于微服务架构尤其重要,每个服务都可以独立打包、部署和伸缩。在云原生和DevOps实践中,Docker镜像是CI/CD(持续集成/持续部署)流水线中不可或缺的交付物。
2.3 资源利用效率
与完整的虚拟机(VM)相比,Docker容器共享宿主机的操作系统内核,因此不需要为每个应用加载一个完整的操作系统。这使得容器启动速度极快(秒级甚至毫秒级),并且占用更少的内存和磁盘空间。在同一台物理机上,你可以运行数十个甚至数百个容器,而运行同样数量的VM几乎是不可能的。
2.4 简化复杂应用依赖管理
有些应用依赖关系复杂,比如同时需要特定版本的Java、Redis和Elasticsearch。手动安装和配置这些服务,并确保它们能协同工作,是一项耗时且容易出错的任务。使用Docker Compose,你可以通过一个YAML文件定义所有服务,然后一键启动整个应用栈,极大地简化了本地开发环境的搭建。
基于以上需求,在Ubuntu 22.04上安装Docker,目标就是建立一个稳定、高效、易于管理的容器化基础平台。
3. 安装前准备:系统检查与依赖确认
在Ubuntu 22.04上安装Docker本身并不复杂,但“磨刀不误砍柴工”,做好前期准备能避免很多后续的奇怪问题。很多人安装失败,问题往往就出在这一步。
3.1 系统更新与升级
首先,确保你的系统是最新的。打开终端,执行以下命令:
sudo apt update
sudo apt upgrade -y
apt update 是刷新软件包索引,获取最新的软件源信息。 apt upgrade -y 则是升级所有已安装的软件包到最新版本, -y 参数表示自动确认,避免中途需要手动输入。保持系统更新可以修复已知的安全漏洞和软件缺陷,为Docker提供一个稳定的运行基础。
3.2 卸载旧版本Docker(如有)
如果你的系统上曾经安装过旧版本的Docker(可能叫 docker , docker.io , 或 docker-engine ),为了避免冲突,最好先清理干净。
sudo apt remove docker docker-engine docker.io containerd runc
这条命令会移除这些旧的软件包。 containerd 和 runc 是容器运行时的核心组件,但旧版本的也可能不兼容,一并移除。系统可能会提示这些包未被安装,这是正常的,忽略即可。
3.3 安装必要的依赖工具
我们需要一些工具来帮助后续安装和管理Docker仓库。
sudo apt install -y ca-certificates curl gnupg lsb-release
ca-certificates: 用于验证HTTPS连接的安全性,从Docker官方仓库下载时需要。curl: 命令行工具,用于从网络下载文件或数据。gnupg: GNU隐私卫士,用于添加和验证GPG密钥,确保软件源的可靠性。lsb-release: 一个工具,可以方便地获取LSB(Linux标准基础)和发行版的具体信息,我们用它来获取系统代号。
注意 :有些精简版的Ubuntu Server或云镜像可能默认没有安装
curl或gnupg,这一步可以确保它们存在。
3.4 添加Docker官方GPG密钥
为了确保从Docker仓库下载的软件包是真实且未被篡改的,我们需要添加Docker官方的GPG(GNU Privacy Guard)公钥。
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo mkdir -p /etc/apt/keyrings: 创建目录用于存放密钥环文件,-p参数确保如果目录不存在则创建它。curl -fsSL ...:-f表示静默失败,-s静默模式,-S显示错误,-L跟随重定向。这条命令从Docker官网下载GPG密钥。| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg: 管道符将下载的内容传递给gpg命令。--dearmor选项将ASCII格式的密钥转换为二进制格式(.gpg),-o指定输出文件。
3.5 设置Docker的APT软件源
接下来,我们需要告诉APT包管理器从哪里获取Docker软件包。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
这条命令看起来复杂,我们拆解一下:
deb [...]: 表示这是一个Debian系的二进制软件源。[arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg]: 这是源的选项。arch=$(dpkg --print-architecture): 动态获取当前系统的架构(如amd64, arm64),确保安装对应架构的包。signed-by=...: 指定验证软件包签名的密钥文件,就是我们上一步创建的docker.gpg。
https://download.docker.com/linux/ubuntu: Docker官方仓库的地址。$(lsb_release -cs): 动态获取当前Ubuntu版本的代号,对于Ubuntu 22.04就是jammy。这确保了源地址指向正确的版本仓库。stable: 使用稳定版仓库。| sudo tee /etc/apt/sources.list.d/docker.list: 将前面echo输出的内容,通过tee命令写入到/etc/apt/sources.list.d/docker.list文件中。在/etc/apt/sources.list.d/目录下创建单独的源列表文件是一种好习惯,便于管理。> /dev/null: 将tee命令的标准输出重定向到空设备,避免在终端上显示多余信息。
完成以上步骤后,再次更新APT包索引,让系统识别新添加的Docker源:
sudo apt update
4. Docker引擎的安装与验证
准备工作就绪,现在可以正式安装Docker引擎了。Docker引擎的核心组件包括: docker-ce (社区版), docker-ce-cli (命令行接口), containerd.io (容器运行时),以及一些插件。
4.1 执行安装命令
运行以下命令安装最新稳定版的Docker引擎:
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker-ce: Docker Community Edition,即Docker社区版,是核心引擎。docker-ce-cli: Docker命令行工具,我们通过它与Docker守护进程交互。containerd.io: 一个行业标准的容器运行时,负责管理容器的生命周期(创建、启动、停止等)。Docker底层使用它。docker-buildx-plugin: 一个扩展插件,支持更强大的镜像构建功能,如多平台构建(在AMD64机器上构建ARM64的镜像)。docker-compose-plugin: 这是Docker Compose的插件版本。从Docker v20.10.0+ 开始,推荐使用docker compose(作为插件)而非独立的docker-compose二进制文件。它允许你使用docker compose命令来管理多容器应用。
安装过程会自动处理所有依赖关系。 -y 参数同样用于自动确认。
4.2 验证安装与守护进程状态
安装完成后,Docker服务(守护进程)默认是启动并设置为开机自启的。我们可以通过以下命令验证:
sudo systemctl status docker
你会看到类似下面的输出,其中 active (running) 表示服务正在运行:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since ...
如果状态不是 active ,可以使用 sudo systemctl start docker 启动它。使用 sudo systemctl enable docker 确保开机自启。
4.3 运行测试容器
最直接的验证方法是运行一个测试容器。Docker官方提供了一个轻量级的测试镜像 hello-world 。
sudo docker run hello-world
这条命令会执行以下操作:
- Docker客户端 (
docker) 联系Docker守护进程。 - 守护进程检查本地是否有
hello-world:latest镜像,如果没有,则从默认的Docker Hub仓库拉取(pull)该镜像。 - 拉取成功后,守护进程根据该镜像创建一个新的容器并运行。
- 容器内运行一个简单的程序,输出一段欢迎信息到终端,然后容器自动停止。
如果你看到 “Hello from Docker!” 等字样,恭喜你,Docker已经成功安装并可以正常工作!
4.4 将当前用户加入docker组(重要!)
你可能注意到了,前面的命令都加了 sudo 。这是因为Docker守护进程默认以root用户运行,而Docker CLI通过Unix socket ( /var/run/docker.sock ) 与守护进程通信,该socket默认属于 docker 用户组。为了让普通用户也能直接运行 docker 命令(避免每次输入sudo密码),我们需要将当前用户加入 docker 组。
sudo usermod -aG docker $USER
usermod: 修改用户属性的命令。-aG:-a表示追加(append)用户到组,-G指定组名。合起来就是将用户追加到docker组。$USER: 环境变量,代表当前登录的用户名。
关键一步 :这个组变更不会立即生效于当前已登录的会话。你需要 完全注销并重新登录 ,或者打开一个新的终端窗口(如果使用SSH,需要断开重连),新的组权限才会生效。
验证是否成功:
docker run hello-world
现在,你应该可以不加 sudo 直接运行 docker 命令了。这是一个非常重要的安全与便利性平衡的设置。
5. 核心配置优化与国内镜像加速
默认安装的Docker可以工作,但为了获得更好的体验(尤其是在国内),我们还需要进行一些关键配置。
5.1 配置Docker守护进程(daemon.json)
Docker守护进程的配置主要通过 /etc/docker/daemon.json 文件进行。如果文件不存在,创建它。
sudo nano /etc/docker/daemon.json
你可以使用 vim 或其他你熟悉的编辑器。
5.2 设置国内镜像加速器
从Docker Hub拉取镜像,在国内速度可能很慢甚至失败。配置一个国内的镜像加速器是必做操作。这里以阿里云镜像加速器为例(你需要有自己的阿里云账号获取专属地址),其他服务商(如腾讯云、网易云、中科大等)类似。
-
获取加速器地址 :登录阿里云容器镜像服务控制台,在“镜像工具” -> “镜像加速器”中,找到属于你的加速器地址。格式类似
https://xxxx.mirror.aliyuncs.com。 -
编辑配置文件 :在
/etc/docker/daemon.json中,输入以下内容(将your-mirror-address替换为你的实际地址):{ "registry-mirrors": ["https://your-mirror-address"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }, "storage-driver": "overlay2" }
配置项详解 :
"registry-mirrors": 指定镜像加速器地址,可以配置多个,用逗号分隔。"exec-opts": ["native.cgroupdriver=systemd"]: 将cgroup驱动设置为systemd。对于使用systemd作为初始化系统的Ubuntu 22.04,这能提供更好的兼容性和稳定性,尤其是在与Kubernetes集成时。"log-driver": "json-file"和"log-opts": 配置Docker容器的日志驱动和选项。这里设置为json-file,并限制单个日志文件最大100MB,最多保留3个文件,防止日志无限增长占用磁盘。"storage-driver": "overlay2": 指定存储驱动。overlay2是当前Linux内核推荐且性能较好的存储驱动,适用于Ubuntu 22.04。
5.3 应用配置并重启服务
保存并关闭 daemon.json 文件后,需要重启Docker服务使配置生效。
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl daemon-reload: 重新加载systemd管理器的配置,确保它读取了新的daemon.json配置。sudo systemctl restart docker: 重启Docker服务。
验证配置是否生效:
docker info
在输出的信息中,找到 Registry Mirrors 部分,你应该能看到你配置的镜像加速器地址。同时,检查 Cgroup Driver 是否为 systemd 。
5.4 验证镜像加速效果
可以拉取一个较大的镜像来测试速度,例如:
docker pull ubuntu:22.04
观察下载速度,应该比不配置加速器时有显著提升。
6. Docker基础使用与核心概念实战
安装配置好后,我们来实际操作几个最常用的命令,并理解背后的核心概念:镜像(Image)和容器(Container)。
6.1 镜像(Image)操作
镜像是容器的模板,是一个只读的静态文件层集合。它包含了运行应用所需的代码、运行时、库、环境变量和配置文件。
-
搜索镜像 :在Docker Hub上查找镜像。
docker search nginx这会列出所有包含 “nginx” 关键词的公共镜像,包括官方镜像(OFFICIAL 列为 OK)和用户贡献的镜像。
-
拉取镜像 :从仓库下载镜像到本地。
docker pull nginx:latestnginx是镜像名,latest是标签(Tag),通常代表最新稳定版。不指定标签时默认为latest。建议在生产中指定具体版本标签,如nginx:1.24-alpine,以确保一致性。 -
列出本地镜像 :
docker images # 或使用更详细的格式 docker image ls这会显示镜像仓库名(REPOSITORY)、标签(TAG)、镜像ID(IMAGE ID)、创建时间(CREATED)和大小(SIZE)。
-
删除镜像 :
docker rmi <image_id_or_name> # 例如:docker rmi hello-world # 强制删除(即使有容器基于它):docker rmi -f <image_id>如果镜像有对应的容器(即使已停止)存在,需要先删除容器才能删除镜像,或者使用
-f强制删除(不推荐,可能造成混乱)。
6.2 容器(Container)操作
容器是镜像的运行实例。你可以创建、启动、停止、移动或删除容器。
-
运行容器 :这是最常用的命令。
docker run -d --name my-nginx -p 8080:80 nginx-d: 后台运行(detached mode)。--name my-nginx: 为容器指定一个自定义名称,便于后续管理。如果不指定,Docker会随机生成一个名字。-p 8080:80: 端口映射。将宿主机的8080端口映射到容器的80端口(Nginx默认监听80)。这样,你访问http://localhost:8080就能看到容器内的Nginx欢迎页面。nginx: 使用的镜像名。
-
列出容器 :
docker ps # 查看正在运行的容器 docker ps -a # 查看所有容器(包括已停止的) -
停止容器 :
docker stop my-nginx -
启动已停止的容器 :
docker start my-nginx -
进入运行中的容器 :有时需要进入容器内部执行命令或调试。
docker exec -it my-nginx /bin/bashexec: 在运行的容器中执行命令。-it:-i保持标准输入打开,-t分配一个伪终端。合起来提供交互式Shell体验。my-nginx: 容器名。/bin/bash: 要执行的命令,这里是启动一个Bash Shell。有些精简镜像(如Alpine Linux)可能使用/bin/sh。
-
查看容器日志 :
docker logs my-nginx docker logs -f my-nginx # -f 参数可以持续跟踪(follow)日志输出 -
删除容器 :
docker rm my-nginx # 删除已停止的容器 docker rm -f my-nginx # -f 强制删除运行中的容器
6.3 数据持久化:挂载卷(Volume)
默认情况下,容器内创建的文件都存储在可写的容器层中。当容器被删除时,这些数据也会丢失。为了持久化数据(如数据库文件、配置文件、日志),我们需要使用 卷(Volume) 或 绑定挂载(Bind Mount) 。
-
创建和管理卷 :
docker volume create my-data-volume # 创建一个名为my-data-volume的卷 docker volume ls # 列出所有卷 docker volume inspect my-data-volume # 查看卷的详细信息,包括在宿主机上的存储路径 -
运行容器时使用卷 :
docker run -d --name mysql-db \ -v my-data-volume:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ mysql:8.0-v my-data-volume:/var/lib/mysql: 将名为my-data-volume的卷挂载到容器内的/var/lib/mysql目录。这样,MySQL的数据就持久化存储在卷中,即使容器删除,数据也不会丢失。
-
使用绑定挂载 :直接将宿主机的一个目录挂载到容器内。
docker run -d --name nginx-with-config \ -v /home/user/nginx-config:/etc/nginx/conf.d \ -p 80:80 \ nginx这允许你在宿主机上编辑
/home/user/nginx-config目录下的配置文件,改动会实时反映到容器内的Nginx中,非常适合开发调试。
7. 使用Docker Compose编排多容器应用
对于由多个服务(如Web应用、数据库、缓存)组成的复杂应用,手动用 docker run 启动每个容器并管理它们之间的网络连接非常繁琐。Docker Compose就是为解决这个问题而生的工具。它允许你使用一个YAML文件( docker-compose.yml )来定义和运行多容器应用。
7.1 安装验证与基础语法
我们在安装 docker-compose-plugin 后,可以使用 docker compose 命令(注意是 compose ,不是 docker-compose )。
验证安装:
docker compose version
一个最简单的 docker-compose.yml 示例如下,它定义了一个WordPress应用栈,包含WordPress和MySQL数据库:
version: '3.8' # 指定Compose文件格式版本
services:
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
关键部分解析 :
services: 定义所有需要运行的服务(容器)。db和wordpress: 服务名称。image: 指定使用的Docker镜像。ports: 端口映射,格式为"宿主机端口:容器端口"。volumes: 定义数据卷挂载。示例中使用了命名卷(db_data,wp_data),Compose会自动创建和管理它们。environment: 设置容器内的环境变量,常用于传递配置(如数据库密码)。depends_on: 声明服务依赖关系,确保db服务先于wordpress启动。restart: always: 容器退出时总是重启,确保服务高可用。- 文件底部的
volumes: 声明在Compose级别使用的命名卷。
7.2 常用Compose命令
在包含 docker-compose.yml 文件的目录下执行:
-
启动所有服务(后台运行) :
docker compose up -d-d表示后台运行。 -
查看服务状态 :
docker compose ps -
查看服务日志 :
docker compose logs # 查看所有服务日志 docker compose logs wordpress # 查看指定服务日志 docker compose logs -f wordpress # 跟踪日志 -
停止所有服务 :
docker compose down此命令会停止并删除所有由
up创建的容器、网络,但 默认不会删除卷 。如果你想同时删除卷,需要加-v参数:docker compose down -v。 请谨慎使用,这会删除所有数据! -
在运行的服务中执行命令 :
docker compose exec db mysql -u root -p这会在名为
db的服务容器中执行mysql -u root -p命令。
使用Docker Compose,你可以用一行命令管理整个复杂的应用环境,极大地简化了开发和部署流程。
8. 常见问题与排查技巧实录
即使按照步骤操作,你也可能会遇到一些问题。这里记录了一些我亲身经历过的典型问题和解决方法。
8.1 安装后 docker 命令报错:权限拒绝
问题 :执行 docker ps 等命令时,提示 Got permission denied while trying to connect to the Docker daemon socket... 。
原因 :当前用户不在 docker 用户组中,或者组权限未生效。
解决 :
- 确认已将用户加入
docker组:groups $USER,查看输出中是否包含docker。 - 如果已加入,确保你已 注销并重新登录 ,或者开启一个新的终端会话。
- 如果问题依旧,可以尝试重启Docker服务:
sudo systemctl restart docker。 - 作为临时解决方案(不推荐长期使用),可以用
sudo执行命令,但这违背了便利性的初衷。
8.2 拉取镜像速度极慢或失败
问题 : docker pull 命令卡住或报网络错误。
原因 :网络连接Docker Hub不稳定,或未正确配置镜像加速器。
解决 :
- 首要检查 :确认
/etc/docker/daemon.json中的registry-mirrors配置正确无误,并且已重启Docker服务。 - 测试加速器 :可以
ping一下你的镜像加速器地址,看是否能通。 - 更换加速器 :如果某个加速器不稳定,可以尝试换一个。国内常用的还有:
- 腾讯云:
https://mirror.ccs.tencentyun.com - 网易云:
https://hub-mirror.c.163.com - 中科大:
https://docker.mirrors.ustc.edu.cn可以配置多个镜像地址,Docker会按顺序尝试。
- 腾讯云:
- 检查DNS :有时是DNS解析问题。可以尝试修改宿主机的DNS服务器为
114.114.114.114或8.8.8.8。
8.3 运行容器时端口冲突
问题 : docker run -p 80:80 ... 时报错 Bind for 0.0.0.0:80 failed: port is already allocated 。
原因 :宿主机上的80端口已被其他程序占用(可能是另一个Nginx、Apache或已有的Docker容器)。
解决 :
- 找出占用端口的进程:
sudo netstat -tulpn | grep :80 - 根据PID停止该进程,或者修改你的Docker容器映射到其他端口,例如
-p 8080:80。 - 如果占用端口的是另一个Docker容器,可以使用
docker ps查看,并用docker stop <container_name>停止它,或者修改那个容器的端口映射。
8.4 容器内无法连接外部网络或宿主机
问题 :在容器内 ping www.baidu.com 失败,或者从容器内无法连接宿主机上运行的服务(如数据库)。
原因与解决 :
- 容器内无网络 :检查宿主机的网络连接,以及Docker服务状态。确保
docker run时没有使用--network none参数。 - 连接宿主机服务 :从容器内连接宿主机,不能使用
localhost或127.0.0.1,因为这是容器自己的回环地址。Docker为宿主机在容器网络内创建了一个特殊的主机名host.docker.internal(在Linux上需要Docker 20.10+版本,并在docker run时添加--add-host=host.docker.internal:host-gateway参数)。更通用的方法是使用宿主机的真实IP地址(如192.168.1.100),可以通过ip addr show或hostname -I命令查看。 - 防火墙干扰 :Ubuntu 22.04默认使用
ufw防火墙。如果宿主机防火墙开启,可能会阻止容器与外部或宿主机之间的通信。你可以暂时禁用防火墙测试 (sudo ufw disable),或者为Docker添加规则:sudo ufw allow from 172.17.0.0/16(假设Docker默认网桥是172.17.0.0/16)。更安全的方法是针对特定端口放行。
8.5 磁盘空间不足
问题 :一段时间后,系统提示磁盘空间不足, /var/lib/docker 目录变得非常大。
原因 :Docker的镜像、容器、卷和构建缓存都默认存储在 /var/lib/docker 。如果不定期清理,会占用大量空间。
解决 :
-
查看磁盘使用情况 :
docker system df这个命令会详细显示镜像、容器、本地卷和构建缓存各占用了多少空间。
-
清理无用资源 :
docker system prune -a警告 :这个命令会删除所有已停止的容器、所有未被任何容器使用的网络、所有悬空镜像(未被任何镜像引用的中间层镜像)和所有构建缓存。
-a参数还会删除所有未被容器使用的镜像。执行前请务必确认!对于生产环境,建议有选择性地清理。 -
定期清理 :可以将清理命令加入定时任务(cron job),例如每周日凌晨执行一次
docker system prune -f(-f免确认)。
8.6 Docker Desktop相关错误提示的应对
注意 :本文介绍的是在Linux原生环境(Ubuntu)上安装 Docker Engine ,而非 Docker Desktop 。Docker Desktop是一个包含Docker Engine、GUI管理工具等的桌面应用程序,主要用于macOS和Windows。在Linux上,通常直接安装Docker Engine即可。
如果你在网络上看到类似 “virtualization support not detected” 、 “docker desktop failed to start” 或 “WSL2” 相关的错误,那都是针对在Windows或macOS上安装Docker Desktop的。在纯Ubuntu系统上,只要你的CPU支持虚拟化(VT-x/AMD-V)并且在BIOS中已开启,安装Docker Engine一般不会遇到这些问题。如果遇到内核模块问题,可以尝试更新内核或检查 linux-modules-extra 包是否已安装。
在Ubuntu上,如果你需要图形化管理界面,可以考虑安装Portainer(一个基于Web的Docker管理UI),而不是Docker Desktop。
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
然后通过浏览器访问 http://localhost:9000 即可。
更多推荐
所有评论(0)