Docker 零基础入门到实战:一文带你玩转容器化部署!

Docker Logo
图片来源:Docker 官网

在现代软件开发和运维中,Docker 已经成为一项不可或缺的技术。它通过容器化技术,极大地简化了应用的部署、测试和分发过程。无论你是开发者、运维工程师,还是仅仅对新技术充满好奇,这篇 Docker 操作指南都将带你从零开始,一步步掌握 Docker 的核心操作。

📖 Docker 是什么?为什么选择它?

简单来说,Docker 就像一个神奇的“集装箱”,它可以将你的应用程序及其所有依赖(库、运行时、系统工具等)打包在一起,形成一个轻量级、可移植的“容器”。这个容器可以在任何安装了 Docker 的机器上运行,而不用担心环境差异导致的问题。

选择 Docker 的理由:

  1. 环境一致性:告别“在我电脑上明明是好的!”的尴尬。
  2. 快速部署:秒级启动,加速开发、测试、部署流程。
  3. 资源隔离:容器间互不影响,更安全、更稳定。
  4. 轻量高效:相比传统虚拟机,Docker 容器更小、更快、占用资源更少。
  5. 易于迁移和扩展:轻松将应用从开发环境迁移到生产环境,并根据需求快速扩展。

🛠️ 安装 Docker

Docker 支持主流的操作系统,包括 Windows, macOS 和各种 Linux 发行版。

  • Windows: 下载并安装 Docker Desktop for Windows (建议开启 WSL2 后端)。
  • macOS: 下载并安装 Docker Desktop for Mac
  • Linux: 根据你的发行版,参考官方文档进行安装。例如,对于 Ubuntu:
    1
    2
    3
    4
    5
    6
    7
    sudo apt update
    sudo apt install apt-transport-https ca-certificates curl software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt update
    sudo apt install docker-ce
    sudo systemctl status docker # 验证 Docker 是否运行

安装完成后,可以通过运行 docker --version 来验证是否安装成功。

核心概念解析

在深入学习命令之前,我们先了解几个 Docker 的核心概念:

  1. 镜像 (Image):

    • 一个只读的模板,包含了运行应用程序所需的文件系统和配置。
    • 镜像是分层的,每一层都是在前一层的基础上构建的。
    • 可以把镜像理解为面向对象编程中的“类”。
  2. 容器 (Container):

    • 镜像的运行实例。
    • 容器是可读写的,可以在镜像层之上创建一个可写层。
    • 可以把容器理解为面向对象编程中的“对象实例”。
    • 容器之间是相互隔离的。
  3. 仓库 (Registry):

    • 集中存放和分发镜像服务。
    • 最著名的公共仓库是 Docker Hub
    • 你也可以搭建私有仓库。
  4. Dockerfile:

    • 一个文本文件,包含了一系列指令,用于自动化构建 Docker 镜像。
    • 通过 docker build 命令,Docker 可以读取 Dockerfile 中的指令并自动构建镜像。

🚀 Docker 常用命令实战

接下来,让我们通过实际操作来学习 Docker 的常用命令。

1. 镜像操作

  • 搜索镜像: 从 Docker Hub 搜索镜像。

    1
    2
    3
    docker search <image_name>
    # 例如: 搜索 nginx 镜像
    docker search nginx
  • 拉取镜像: 从仓库下载镜像到本地。

    1
    2
    3
    4
    5
    docker pull <image_name>:<tag>
    # 例如: 拉取最新版的 nginx 镜像 (latest 是默认 tag)
    docker pull nginx
    # 拉取指定版本的 nginx
    docker pull nginx:1.21
  • 查看本地镜像: 列出本地已有的镜像。

    1
    2
    3
    docker images
    # 或者
    docker image ls
  • 删除本地镜像:

    1
    2
    3
    4
    5
    docker rmi <image_id_or_name>
    # 或者
    docker image rm <image_id_or_name>
    # 强制删除 (即使有容器正在使用它,但不推荐)
    docker rmi -f <image_id_or_name>

    如果镜像被容器使用,需要先停止并删除容器。

2. 容器操作

  • 运行容器: 基于镜像创建一个新的容器并启动它。

    1
    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

    常用 OPTIONS:

    • -d: 后台运行容器 (detached mode)。
    • -p <host_port>:<container_port>: 端口映射,将主机的端口映射到容器的端口。
    • --name <container_name>: 给容器指定一个名称。
    • -v <host_path>:<container_path>: 数据卷挂载,将主机的目录挂载到容器的目录。
    • -it: 以交互模式运行容器,通常与 /bin/bash 等命令结合使用。
    • --rm: 容器停止后自动删除。

    示例:运行一个 Nginx 容器

    1
    2
    # 后台运行 nginx,将主机 8080 端口映射到容器 80 端口,并命名为 my-nginx
    docker run -d -p 8080:80 --name my-nginx nginx

    现在访问 http://localhost:8080 应该能看到 Nginx 的欢迎页面。

  • 查看运行中的容器:

    1
    docker ps
  • 查看所有容器 (包括已停止的):

    1
    docker ps -a
  • 停止容器:

    1
    2
    3
    docker stop <container_id_or_name>
    # 例如: 停止名为 my-nginx 的容器
    docker stop my-nginx
  • 启动已停止的容器:

    1
    2
    3
    docker start <container_id_or_name>
    # 例如: 启动名为 my-nginx 的容器
    docker start my-nginx
  • 重启容器:

    1
    docker restart <container_id_or_name>
  • 删除容器: 容器必须是停止状态才能删除。

    1
    2
    3
    4
    5
    docker rm <container_id_or_name>
    # 例如: 删除名为 my-nginx 的容器 (需先停止)
    docker rm my-nginx
    # 强制删除运行中的容器 (不推荐)
    docker rm -f <container_id_or_name>
  • 查看容器日志:

    1
    2
    3
    docker logs <container_id_or_name>
    # 实时查看日志
    docker logs -f <container_id_or_name>
  • 进入运行中的容器:

    1
    2
    3
    4
    docker exec -it <container_id_or_name> <command>
    # 例如: 进入 my-nginx 容器的 bash shell
    docker exec -it my-nginx /bin/bash
    # 退出容器 shell,输入 exit

3. 清理资源

  • 删除所有已停止的容器:

    1
    2
    3
    docker container prune
    # 或者更暴力的,删除所有容器(无论状态)
    # docker rm $(docker ps -aq) -f
  • 删除所有未被使用的镜像 (dangling images):

    1
    docker image prune
  • 删除所有未被使用的资源 (容器、网络、镜像等):

    1
    docker system prune -a

    注意prune 命令会要求确认,请谨慎操作。

国内镜像源

为了提高下载速度,可以使用国内的镜像源,例如阿里云、DaoCloud、网易云等提供的 Docker 镜像加速服务。

阿里云镜像加速

  1. 登录阿里云控制台,找到容器镜像服务。
  2. 在左侧导航栏选择镜像加速器。
  3. 复制加速器地址,并按照以下步骤配置 Docker 镜像加速器。

对于 Ubuntu 系统,编辑 /etc/docker/daemon.json 文件,添加以下内容:

1
2
3
{
"registry-mirrors": ["https://<your-mirror-id>.mirror.aliyuncs.com"]
}

然后重启 Docker 服务:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

其他一些国内镜像源

📄 Dockerfile:构建自己的镜像

Dockerfile 是一个文本文件,用于定义如何构建 Docker 镜像。它包含一系列指令,Docker 会按照这些指令一步步执行来创建镜像。