Skip to content

Docker 安装与配置指南

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上。

容器化

Docker 安装

Linux (官方一键安装脚本)

适用于 Ubuntu、Debian、CentOS 等主流发行版。官方脚本会自动检测系统并安装最新稳定版。

bash
curl -fsSL https://get.docker.com | bash

安装完成后,启动 Docker 并设置开机自启:

bash
sudo systemctl start docker
sudo systemctl enable docker

Windows

  1. 确保系统为 Windows 10/11 专业版/企业版/教育版(支持 Hyper-V),或安装了 WSL 2。
  2. 前往 Docker Desktop for Windows 下载安装包。
  3. 运行安装程序,按照提示完成安装。
  4. 安装完成后,重启电脑。

macOS

  1. 前往 Docker Desktop for Mac 下载 .dmg 文件。
  2. 根据芯片类型选择 Mac with Intel chipMac with Apple chip
  3. 拖拽 Docker 图标到 Applications 文件夹。

常用命令速查

命令说明
镜像管理
docker pull <image>拉取镜像
docker images列出本地镜像
docker rmi <id>删除镜像
容器操作
docker run -d -p 80:80 <image>后台运行并映射端口
docker ps查看运行中的容器
docker ps -a查看所有容器(含停止的)
docker stop <id>停止容器
docker rm <id>删除容器
docker logs -f <id>查看容器实时日志
docker exec -it <id> sh进入容器终端

Docker Compose (V2)

新版 Docker Desktop 和 Linux 包已内置 docker compose 命令(注意中间有空格,不再是 docker-compose)。

常用命令:

bash
# 后台启动所有服务
docker compose up -d

# 停止并删除容器
docker compose down

# 查看服务日志
docker compose logs -f

# 更新镜像并重启
docker compose pull && docker compose up -d

⚠️ 常见问题 (FAQ)

1. 权限问题 (Linux)

现象:执行 docker 命令时提示 permission denied解决:将当前用户加入 docker 用户组(无需 sudo 也能运行)。

bash
sudo usermod -aG docker $USER
# 此时需注销并重新登录,或执行以下命令立即生效:
newgrp docker

2. 镜像拉取慢 / 超时 (配置国内源)

由于网络原因,国内直接连接 Docker Hub 经常失败。建议配置镜像加速器。

编辑或创建 /etc/docker/daemon.json

json
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://huecker.io",
    "https://dockerhub.timeweb.cloud",
    "https://noohub.ru"
  ]
}

注:镜像源可能随时间失效,请根据实际情况寻找可用源。

修改后重启服务:

bash
sudo systemctl daemon-reload
sudo systemctl restart docker

3. 容器内部无法联网

现象:容器内无法 ping 通外网或解析域名。 解决:通常是宿主机防火墙或 DNS 问题。

  • 检查防火墙是否拦截了转发。
  • docker run 时添加 --dns 8.8.8.8 尝试。
  • 重建 docker0 网桥:sudo service docker stop -> sudo ip link set dev docker0 down -> sudo brctl delbr docker0 -> sudo service docker start

4. 磁盘空间被占满

Docker 使用久了会产生大量未使用的镜像、容器和卷。

一键清理(慎用)

bash
# 清理所有停止的容器、未使用的网络和挂起的镜像
docker system prune

# 深度清理(包含所有未使用的镜像和卷)
docker system prune -a --volumes