1. 确认系统、架构和已有容器环境#
本文以受支持的 Ubuntu Server 为例安装 Docker Engine。先查看系统版本和架构,再按 Docker 官方安装页选择对应发行版;Debian、Rocky 等系统应使用各自的安装说明,不能直接添加 Ubuntu 软件源。
cat /etc/os-release
dpkg --print-architecture
command -v docker
systemctl status docker已有 Docker、Podman 或 containerd 业务时,先列出容器、卷和依赖,不要直接执行“删除冲突包”的批量命令。新服务器可按下一步安装;旧服务器迁移容器引擎需要单独维护计划。
2. 添加官方软件源#
打开文末 Docker 官方 Ubuntu 安装页,使用当前的 apt repository 方法。主要过程是安装证书和 curl、保存 Docker 签名密钥,再创建与本机发行版代号和架构匹配的源文件。
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc接着创建源文件。以下代码从本机读取 Ubuntu 代号和架构,发现已有配置时会停止,适用于尚未配置 Docker 软件源的新服务器。
sudo sh -eu <<'DOCKER_SOURCE'
if [ -e /etc/apt/sources.list.d/docker.sources ] || [ -e /etc/apt/sources.list.d/docker.list ]; then
echo '已有 Docker 软件源,请先核对现有配置。' >&2
exit 1
fi
. /etc/os-release
[ "$ID" = ubuntu ] || { echo '此示例只适用于 Ubuntu。' >&2; exit 1; }
docker_codename=${UBUNTU_CODENAME:-$VERSION_CODENAME}
docker_arch=$(dpkg --print-architecture)
cat > /etc/apt/sources.list.d/docker.sources <<SOURCE_CONFIG
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $docker_codename
Components: stable
Architectures: $docker_arch
Signed-By: /etc/apt/keyrings/docker.asc
SOURCE_CONFIG
apt update
DOCKER_SOURCE确认更新输出没有软件源或签名错误,再继续安装。不要从博客复制其他系统的代号,也不要因为签名失败就关闭验证。
3. 安装引擎与 Compose 插件#
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker version
sudo docker compose version
sudo docker run --rm hello-world看到客户端和服务端版本,并且 hello-world 输出正常后退出,说明基本运行链路成立。它不应该一直保持 Running,因为这个测试容器本来就是一次性程序。
普通用户执行 Docker 命令提示权限不足时,可继续使用 sudo。加入 docker 组等同于授予很高的主机控制能力,不应为了方便把所有用户都加入。
4. 发布端口前确认暴露范围#
容器内部监听端口,与主机公开端口是两层配置。下面把 Nginx 容器的 80 端口仅映射到主机回环地址 8080,适合通过现有反向代理接入。
sudo docker run -d --name web-demo -p 127.0.0.1:8080:80 nginx:stable-alpine
curl -I http://127.0.0.1:8080/
sudo docker logs --tail 30 web-demo这是测试容器,镜像标签应在正式部署时固定到确认过的版本或摘要。使用 -p 8080:80 可能对所有接口开放;Docker 发布端口与 UFW/firewalld 的规则存在交互,不能只看 UFW 状态就判断端口没有暴露。
5. 保存数据并建立更新方式#
容器可以替换,数据库和上传文件必须放到明确的卷或绑定目录中。删除容器前先查看 Mounts,确认数据存放位置。不要把 docker system prune --volumes 当成常规清理按钮。
sudo docker ps -a
sudo docker inspect web-demo
sudo docker system df测试完成后可停止并删除自己创建的 web-demo;上线应用使用Compose 管理,并补齐备份、HTTPS、日志轮转和健康检查。
完成后检查
不要把生产数据只放在容器可写层;删除或重建容器前确认卷与备份。