Docker 安装与使用指南

本文是一份面向 Debian / Ubuntu 的 Docker 实战指南,重点讲清楚如何安装 Docker Engine、安装 Compose 插件、验证运行状态、管理镜像和容器、处理权限问题,以及如何在真实服务器上稳定使用。

适用场景

  • 本地开发环境容器化
  • 服务器上运行单个容器或多容器服务
  • 使用 Docker Compose 编排应用
  • 容器化部署 Web、数据库、缓存、任务队列等服务
  • 需要统一运维命令和环境隔离

Docker 是什么

Docker 是一个容器运行平台。它的核心价值是:

  • 把应用和运行环境打包在一起
  • 减少“我本地能跑,服务器不能跑”的问题
  • 更容易进行部署、回滚和隔离

Docker 的主要组件包括:

  • Docker Engine:容器运行时和守护进程
  • Docker CLI:命令行工具
  • Docker Compose:多容器应用编排工具

安装前准备

先确认:

  • 你使用的是 Debian / Ubuntu
  • 有 sudo 权限
  • 系统能够访问 Docker 官方仓库
  • 你不需要先保留旧版冲突安装

如果系统里已经有旧版 Docker 或冲突包,建议先梳理清楚再安装。

安装 Docker Engine

Docker 官方推荐通过其仓库安装 Docker Engine 和 CLI。

1. 卸载旧包

sudo apt remove -y docker docker-engine docker.io containerd runc

2. 更新索引并安装依赖

sudo apt update
sudo apt install -y ca-certificates curl gnupg

3. 添加 Docker 官方 GPG key

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

如果你是 Ubuntu,把 debian 换成 ubuntu

4. 添加 Docker 软件源

Debian 示例:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. 安装 Docker Engine 和 Compose 插件

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动服务并设置开机自启

sudo systemctl enable docker
sudo systemctl start docker

查看状态:

sudo systemctl status docker

正常情况下应显示 active (running)

验证安装

查看版本:

docker version
docker compose version

运行测试容器:

docker run --rm hello-world

如果能输出欢迎信息,说明 Docker 可用。

Docker Compose

Docker Compose 是用 YAML 描述并运行多容器应用的工具。官方推荐使用 docker compose 子命令,也就是 Compose 插件。


常见文件名:

  • compose.yaml
  • docker-compose.yaml

基础命令

docker compose up -d
docker compose down
docker compose ps
docker compose logs -f
docker compose exec app sh

说明

  • up -d:后台启动
  • down:停止并移除容器、网络
  • ps:查看服务状态
  • logs -f:跟随日志
  • exec:进入运行中的容器

常用 Docker 命令

镜像

docker images
docker pull nginx:latest
docker rmi nginx:latest
docker build -t myapp:latest .

容器

docker ps
docker ps -a
docker run --name mynginx -d -p 8080:80 nginx:latest
docker stop mynginx
docker start mynginx
docker restart mynginx
docker rm mynginx

日志与进入容器

docker logs mynginx
docker logs -f mynginx
docker exec -it mynginx sh

卷与网络

docker volume ls
docker volume inspect mydata
docker network ls
docker network inspect bridge

基础运行模型

一个 Docker 容器的典型启动模式包括:

  • 后台运行
  • 端口映射
  • 环境变量
  • 挂载卷
  • 自定义网络

示例:

docker run -d \
  --name web \
  -p 8080:80 \
  -e APP_ENV=prod \
  -v /srv/web/data:/data \
  nginx:latest

Compose 示例

一个简单的 compose.yaml 示例:

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    restart: unless-stopped

启动:

docker compose up -d

数据持久化

容器本身是短生命周期的,重要数据要放到卷或宿主机目录。


推荐方式:

  • 数据库数据使用 volume
  • 应用上传文件使用 volume 或宿主目录
  • 配置文件按需挂载

示例:

docker run -d --name db \
  -v mysql-data:/var/lib/mysql \
  mysql:8.0

网络

Docker 默认会创建桥接网络。常见做法是:

  • 前端服务暴露端口
  • 后端服务只在内部网络通信
  • 数据库不要直接对公网暴露

查看网络:

docker network ls

权限与用户

直接使用 docker 组

把用户加入 docker 组后,可以不用每次都写 sudo

sudo usermod -aG docker $USER

然后重新登录生效。

风险说明

Docker 组权限非常高,接近主机管理员权限。不要把不可信用户加入该组。

Rootless Mode

Docker 官方支持 rootless mode,用非 root 用户运行 Docker daemon 和容器。它更适合对安全隔离要求更高的环境。


适合场景:

  • 开发机
  • 受限环境
  • 希望减少 daemon root 风险

前提条件:

  • 安装 uidmap
  • 系统有 newuidmap / newgidmap
  • 配好 /etc/subuid 和 /etc/subgid

如果你只是一般服务器部署,先用常规模式通常更简单。

清理资源

删除停止的容器

docker container prune

删除无用镜像

docker image prune

删除无用卷

docker volume prune

一次性清理

docker system prune

注意:

  • 卷删除要非常小心,可能会丢数据
  • 清理前先确认数据是否已经备份

日志排查

看容器日志

docker logs -f myapp

看 Docker 服务日志

sudo journalctl -u docker -xe

看容器详细信息

docker inspect myapp

常见问题

1. docker: command not found

说明 Docker 没安装成功,或者 PATH 没刷新。

2. permission denied while trying to connect to the Docker daemon socket

通常是:

  • 没用 sudo
  • 用户不在 docker 组
  • Docker 服务没起来

3. 容器端口访问不到

检查:

  • -p 映射是否正确
  • 宿主机防火墙是否放行
  • 应用是否监听容器内正确端口

4. Compose 启动失败

检查:

  • YAML 缩进
  • 镜像名
  • 环境变量
  • 卷路径

5. 容器退出后立刻停止

常见原因:

  • 主进程已结束
  • 启动命令错误
  • 应用配置异常

先看:

docker logs <container>

安全建议

  • 不要把 Docker 暴露到不可信网络
  • 不要把密钥直接写进镜像
  • 不要把数据库端口直接暴露公网
  • 生产环境尽量使用最小权限容器
  • 持久化数据要做备份

最小可用流程

如果你只想快速安装一遍,顺序可以是:

sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start docker
docker run --rm hello-world
docker compose version

结论

Docker 的核心不是“会拉镜像”,而是:

  • 明确 Engine、CLI、Compose 的关系
  • 正确安装官方仓库版本
  • 学会端口、卷、网络和环境变量
  • 理解权限模型和 rootless 的边界
  • 用 Compose 管理多容器应用
本文地址: https://www.vvcms.cn/blog/docekr-guid
版权所有 © admin 未经授权不得转载