安装配置与常用命令详解

前言

Docker 已经成为现代软件开发和部署的标配工具。无论是本地开发环境搭建、CI/CD 流水线,还是生产环境部署,Docker 都能提供一致且可靠的容器化解决方案。

这篇文章将从零开始,带你掌握 Docker 的核心概念和常用操作。


Docker 核心概念

在开始之前,先理解几个核心概念:

概念 说明
镜像 (Image) 只读的应用模板,包含运行应用所需的代码、依赖、配置
容器 (Container) 镜像的运行实例,可以启动、停止、删除
仓库 (Registry) 存储和分发镜像的服务,如 Docker Hub、阿里云镜像服务
Dockerfile 定义镜像构建步骤的文本文件
数据卷 (Volume) 持久化容器数据的机制

简单类比:

  • 镜像 = 类(Class)
  • 容器 = 实例(Instance)
  • Dockerfile = 构造函数

安装 Docker

macOS

推荐使用 Docker Desktop:

# 使用 Homebrew 安装
brew install --cask docker

# 或者直接下载 DMG
# https://www.docker.com/products/docker-desktop/

安装后启动 Docker Desktop,等待状态变为 “Running”。

Ubuntu / Debian

# 1. 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 2. 安装依赖
sudo apt-get update
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 3. 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 4. 添加 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

# 5. 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 6. 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
newgrp docker

CentOS / RHEL

# 1. 卸载旧版本
sudo yum remove docker docker-client docker-client-latest docker-common \
    docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 2. 安装依赖
sudo yum install -y yum-utils

# 3. 添加 Docker 软件源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 4. 安装 Docker Engine
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 5. 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker

# 6. 将当前用户加入 docker 组
sudo usermod -aG docker $USER

验证安装

# 查看版本
docker --version
# Docker version 24.0.7, build afdd53b

# 运行测试容器
docker run hello-world

配置镜像加速

国内访问 Docker Hub 较慢,建议配置镜像加速器。

阿里云镜像加速

  1. 登录 阿里云容器镜像服务
  2. 获取你的专属加速地址

配置方法

macOS / Windows (Docker Desktop)

Settings → Docker Engine,添加:

{
  "registry-mirrors": [
    "https://your-id.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}

Linux

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://your-id.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

验证配置:

docker info | grep -A 5 "Registry Mirrors"

镜像操作

搜索镜像

# 在 Docker Hub 搜索
docker search nginx

# 限制结果数量
docker search --limit 5 nginx

拉取镜像

# 拉取最新版本
docker pull nginx

# 拉取指定版本
docker pull nginx:1.24

# 拉取指定平台镜像(M1/M2 Mac 可能需要)
docker pull --platform linux/amd64 nginx:1.24

查看本地镜像

# 列出所有镜像
docker images

# 按大小排序
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | sort -k3 -h

# 查看镜像详情
docker inspect nginx:latest

删除镜像

# 删除指定镜像
docker rmi nginx:1.24

# 删除所有未使用的镜像
docker image prune

# 删除所有镜像(谨慎!)
docker rmi $(docker images -q)

导出/导入镜像

# 导出镜像为 tar 文件
docker save -o nginx.tar nginx:latest

# 从 tar 文件导入镜像
docker load -i nginx.tar

容器操作

创建并启动容器

# 基本启动
docker run nginx

# 后台运行 (-d)
docker run -d nginx

# 指定容器名称 (--name)
docker run -d --name my-nginx nginx

# 端口映射 (-p 宿主机端口:容器端口)
docker run -d -p 8080:80 --name my-nginx nginx

# 环境变量 (-e)
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql:8

# 数据卷挂载 (-v 宿主机路径:容器路径)
docker run -d -v /data/nginx:/usr/share/nginx/html nginx

# 交互式启动 (-it)
docker run -it ubuntu:22.04 /bin/bash

常用运行参数

参数 说明 示例
-d 后台运行 docker run -d nginx
-p 端口映射 -p 8080:80
-v 数据卷挂载 -v /host/path:/container/path
-e 环境变量 -e KEY=value
--name 容器名称 --name my-app
--rm 退出时自动删除 docker run --rm nginx
--restart 重启策略 --restart=always
--network 指定网络 --network my-network
-m 内存限制 -m 512m
--cpus CPU 限制 --cpus=1.5

查看容器

# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止)
docker ps -a

# 只显示容器 ID
docker ps -q

# 查看容器详情
docker inspect my-nginx

# 查看容器日志
docker logs my-nginx

# 实时查看日志
docker logs -f my-nginx

# 查看最近 100 行日志
docker logs --tail 100 my-nginx

# 查看容器资源使用
docker stats

# 查看指定容器资源使用
docker stats my-nginx

容器生命周期管理

# 停止容器
docker stop my-nginx

# 启动已停止的容器
docker start my-nginx

# 重启容器
docker restart my-nginx

# 暂停容器
docker pause my-nginx

# 恢复暂停的容器
docker unpause my-nginx

# 强制停止容器
docker kill my-nginx

# 删除容器
docker rm my-nginx

# 强制删除运行中的容器
docker rm -f my-nginx

# 删除所有已停止的容器
docker container prune

进入容器

# 在运行中的容器内执行命令
docker exec my-nginx ls /etc/nginx

# 进入容器的交互式终端
docker exec -it my-nginx /bin/bash

# 如果容器没有 bash,使用 sh
docker exec -it my-nginx /bin/sh

# 以 root 用户进入
docker exec -it -u root my-nginx /bin/bash

容器与宿主机文件传输

# 从容器复制到宿主机
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf

# 从宿主机复制到容器
docker cp ./index.html my-nginx:/usr/share/nginx/html/

数据卷管理

数据卷是 Docker 持久化数据的首选方式。

创建和管理数据卷

# 创建数据卷
docker volume create my-data

# 查看所有数据卷
docker volume ls

# 查看数据卷详情
docker volume inspect my-data

# 删除数据卷
docker volume rm my-data

# 删除所有未使用的数据卷
docker volume prune

使用数据卷

# 使用命名数据卷
docker run -d -v my-data:/var/lib/mysql mysql:8

# 使用绑定挂载(宿主机目录)
docker run -d -v /home/user/data:/app/data my-app

# 只读挂载
docker run -d -v /config:/app/config:ro my-app

网络管理

网络类型

类型 说明
bridge 默认网络,容器间通过 IP 通信
host 容器直接使用宿主机网络
none 禁用网络
自定义 bridge 容器间可通过容器名通信

网络操作

# 查看网络列表
docker network ls

# 创建自定义网络
docker network create my-network

# 查看网络详情
docker network inspect my-network

# 容器加入网络
docker run -d --network my-network --name app my-app

# 将运行中的容器连接到网络
docker network connect my-network my-container

# 断开容器与网络的连接
docker network disconnect my-network my-container

# 删除网络
docker network rm my-network

容器间通信示例

# 创建网络
docker network create app-network

# 启动数据库
docker run -d --network app-network --name db mysql:8

# 启动应用(可以通过 "db" 这个名字访问数据库)
docker run -d --network app-network --name app \
    -e DATABASE_HOST=db \
    my-app

实用技巧

清理系统

# 清理所有未使用的资源(镜像、容器、网络、缓存)
docker system prune

# 包括未使用的数据卷
docker system prune --volumes

# 查看 Docker 磁盘使用情况
docker system df

批量操作

# 停止所有容器
docker stop $(docker ps -q)

# 删除所有容器
docker rm $(docker ps -aq)

# 删除所有镜像
docker rmi $(docker images -q)

# 删除所有 <none> 镜像
docker rmi $(docker images -f "dangling=true" -q)

查看容器 IP

# 查看容器 IP 地址
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-nginx

设置容器自动重启

# 总是重启
docker run -d --restart=always nginx

# 失败时重启(最多 3 次)
docker run -d --restart=on-failure:3 nginx

# 更新已有容器的重启策略
docker update --restart=always my-nginx

常用命令速查表

# 镜像
docker pull <image>          # 拉取镜像
docker images                # 列出镜像
docker rmi <image>           # 删除镜像
docker build -t <tag> .      # 构建镜像

# 容器
docker run <image>           # 创建并启动容器
docker ps                    # 列出运行中的容器
docker ps -a                 # 列出所有容器
docker stop <container>      # 停止容器
docker start <container>     # 启动容器
docker rm <container>        # 删除容器
docker logs <container>      # 查看日志
docker exec -it <container> /bin/bash  # 进入容器

# 数据卷
docker volume create <name>  # 创建数据卷
docker volume ls             # 列出数据卷
docker volume rm <name>      # 删除数据卷

# 网络
docker network create <name> # 创建网络
docker network ls            # 列出网络
docker network rm <name>     # 删除网络

# 系统
docker system df             # 磁盘使用
docker system prune          # 清理未使用资源

下一步

掌握了 Docker 基础操作后,下一篇文章将介绍如何将 Golang 项目打包成 Docker 镜像,实现从开发到部署的完整流程。


参考资料

版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:《 Docker 系列——基础入门 》

本文链接:http://localhost:3015/ai/Docker%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8.html

本文最后一次更新为 天前,文章中的某些内容可能已过时!