跳至主要内容

从零开始学习 Docker:数据专业人士指南

本指南教您如何从零开始学习 Docker。了解实用技巧、资源以及加速学习的分步计划!
Joel Wembo
Joel Wembo

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

容器化已经改变了工程团队管理和扩展应用程序的方式,尤其是在数据管理、分析和机器学习领域。通过将应用打包到隔离且轻量的环境中,容器可确保从开发到生产的一致表现。

在众多平台中,Docker 脱颖而出,成为最受欢迎的解决方案。它的灵活性与简洁性,使数据专业人士能够构建可复现、可扩展且高效的工作流,同时促进协作。

在本文中,我们将制定一份实用的 Docker 学习计划,并带您完成首次简单部署。让我们开始吧!

什么是 Docker,为何值得学习?

Docker 是一个开源平台,借助容器化来简化应用的部署、扩展与管理。

容器是轻量、可移植的环境,包含运行应用所需的一切——代码、运行时、库与设置——从而在不同系统上都能获得一致性能。在数据项目中,Docker 用于构建与管理这些容器,使应用能够在任何基础设施上稳定运行。

与需要独立操作系统和管理它们的虚拟机(VM)不同,Docker 仅虚拟化应用层。这使容器启动更快、占用资源更少、配置更容易。

容器化应用与虚拟机对比示意图

容器化应用与虚拟机对比。图片来源:Docker

对于数据专业人士,Docker 有助于创建可复现的环境,使数据管道从开发到生产都能稳定运行。它可减少依赖问题、简化工作流,并通过标准化、可共享的环境促进团队协作。

此外,Docker 还能与常见的数据工具集成,如 Jupyter、TensorFlow,以及 Apache Hadoop。

掌握 Docker 能提升生产力、优化工作流,并让您的项目具备可扩展与易部署的特性!

从零学 Docker:您的首次部署

学习 Docker 最好的方式就是上手实践。接下来,我将带您完成一次简单的首次部署。之后我们会探讨进阶学习计划。

步骤 1:理解核心概念

在动手实践前,先掌握一些基础概念非常重要。以下是 Docker 的主要概念:

  • 容器(Containers):容器是轻量、隔离的单元,将应用及其所有依赖打包在一起,确保在不同环境中一致运行。
  • 镜像(Images):Docker 镜像是只读模板,用于创建容器。它包含运行应用所需的一切,如代码、库与系统工具。镜像通常由 Dockerfile 构建。
  • Dockerfile:Dockerfile 是一个文本文件,包含如何构建 Docker 镜像的指令,包括安装软件、复制文件、配置运行应用所需的环境等步骤。
  • Docker Hub: Docker Hub 是一个公共仓库,您可以在此存储、分享和下载 Docker 镜像。它是镜像的中心化存储库,便于分发与复用预配置的环境。
  • 数据卷(Volumes):数据卷用于持久化容器生成和使用的数据。它允许在容器生命周期之外管理与存储数据,确保在容器停止或删除时重要数据不会丢失。
  • 网络(Networks):Docker 网络用于促成容器间通信。每个容器可连接到一个或多个网络,从而在安全的前提下进行交互和共享数据。

Docker 架构概览

Docker 架构概览。图片来源:Docker

在使用 Docker 部署应用之前,理解这些核心概念至关重要。打好基础将使后续的实操更加高效。

此Introduction to Docker 课程可大幅巩固您的现有知识。

步骤 2:安装 Docker

要开始使用 Docker,您需要在系统上安装它。下面是不同平台的安装说明。更多详细指导请参阅官方文档链接。

1. 在 Windows 上安装 Docker

系统要求:

  • Windows 10 64 位:专业版、企业版或教育版(构建 19041 或更高)
  • Windows 11 64 位:家庭版、专业版、企业版或教育版
  • WSL 2 后端

步骤:

1. 启用 WSL 2(Windows Subsystem for Linux):

  • 以管理员身份打开 PowerShell。
  • 运行以下命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart wsl --set-default-version 2

2. 安装 Windows 版 Docker Desktop:

  • 从 Docker 官方网站下载 Docker Desktop。
  • 运行安装程序并按照提示完成安装。
  • 安装时选择使用 WSL 2 作为默认后端。

3. 启动 Docker Desktop:

  • 从开始菜单启动 Docker Desktop。
  • Docker 应自动启动;若未启动,请手动启动。

4. 验证安装:

  • 打开 PowerShell 或命令提示符。
  • 运行以下命令检查 Docker 是否正确安装:
sudo docker --version

官方文档: Docker Desktop for Windows

2. 在 macOS 上安装 Docker

系统要求:

  • macOS 10.15 或更新版本

步骤:

1. 下载 macOS 版 Docker Desktop:

  • 前往 Docker 官方网站并下载 Docker Desktop 安装程序。

2. 安装 Docker Desktop:

  • 打开您下载的 .dmg 文件。
  • 将 Docker 图标拖拽到“应用程序”文件夹。

3. 启动 Docker Desktop:

  • 从“应用程序”文件夹打开 Docker。
  • 按照安装向导完成设置。

4. 验证安装:

  • 打开终端。
  • 运行以下命令验证 Docker 安装:
docker --version

官方文档: Docker Desktop for Mac

3. 在 Linux 上安装 Docker

支持的发行版:

  • Ubuntu
  • Debian
  • Fedora
  • CentOS
  • RHEL

Ubuntu/Debian 步骤:

1. 卸载旧版本:

  • 在安装 Docker Engine 之前,使用以下命令移除冲突的软件包:
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

2. 配置 Docker 的 apt 仓库:

  • 运行以下命令:
sudo apt-get update
sudo apt-get 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
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

3. 安装 Docker 软件包:

  • 安装 Docker Engine 及其他必要组件:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4. 验证安装:

  • 运行以下命令检查是否安装成功:
sudo docker --version

官方文档: Docker Engine on Debian

步骤 3:运行您的第一个容器

现在 Docker 已安装好,是时候运行您的第一个容器了。我们将从简单的 hello-world 镜像开始,非常适合初学者。

1. 打开终端(或 Windows 上的命令提示符)并运行以下命令:

sudo docker run hello-world

该命令会让 Docker 在本地查找 hello-world 镜像。若未找到,Docker 将从 Docker Hub 拉取该镜像并运行。

如果 Docker 安装正确,您将看到“Hello from Docker!”的消息,以及关于 Docker 工作流程的说明。这表明 Docker 已成功拉取镜像、创建新容器并执行其中的代码。

步骤 4:构建您的第一个 Docker 镜像

此步骤中,您将为一个简单的数据科学项目创建自定义 Docker 镜像。该镜像将包含 Python 及常用的数据科学库,如 pandas、NumPy 和 scikit-learn。

1. 新建目录:

    • 先为项目创建一个新目录并进入:
mkdir my-data-science-app
cd my-data-science-app

2. 创建 Dockerfile:

在该目录中创建名为 Dockerfile 的文件(无扩展名):

# Use an official Python runtime as a parent image
FROM python:3.8-slim
 
# Set the working directory in the container
WORKDIR /app
 
# Copy the current directory contents into the container at /app
COPY . /app
 
# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
 
# Make port 8888 available to the world outside this container
EXPOSE 8888
 
# Run a Jupyter notebook server when the container launches
CMD ["jupyter", "notebook", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]

该 Dockerfile 的作用如下:

  • FROM python:3.8-slim:将基础镜像设置为精简版的 Python 3.8,适合构建轻量的数据科学环境。
  • WORKDIR /app:将容器内的工作目录设置为 /app,后续命令都会在此目录中执行。
  • COPY . /app:将宿主机当前目录下的所有文件复制到容器内的 /app 目录,通常包括数据科学脚本与配置文件。
  • RUN pip install --no-cache-dir -r requirements.txt:安装 requirements.txt 中列出的 Python 库。常见库包括 pandas、NumPy 与 scikit-learn。
  • EXPOSE 8888:向宿主机开放 8888 端口,这是 Jupyter Notebook 的默认端口。
  • CMD ["jupyter", "notebook", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]:容器启动时运行 Jupyter Notebook 服务器,您可通过浏览器访问。

3. 创建 requirements.txt 文件:

在同一目录下创建 requirements.txt 文件,列出应用需要的 Python 包:

pandas
numpy
scikit-learn
matplotlib

该文件列出了将在容器内安装的 Python 库。

4. 构建 Docker 镜像:

  • 在准备好 Dockerfile 与 requirements.txt 后,使用以下命令构建镜像:
sudo docker build -t my-data-science-app .

上述命令的含义如下:

  • docker build:启动镜像构建流程。
  • -t my-data-science-app:-t 选项将镜像标记为 “my-data-science-app”。
  • .:末尾的点表示构建上下文为当前目录。Docker 将使用该目录中的文件来构建镜像。

5. 运行 Docker 镜像:

构建完成后,您可以将新镜像作为容器运行:

sudo docker run -p 8888:8888 my-data-science-app

我们来解析该命令:

  • docker run:基于指定镜像运行一个容器。
  • -p 8888:8888:-p 选项将本机的 8888 端口映射到容器内的 8888 端口,您可在浏览器访问 localhost:8888 打开 Jupyter Notebook。
  • my-data-science-app:指定要运行的镜像。

步骤 5:使用 Docker Compose

Docker Compose 是管理多容器应用的必备工具。在数据科学项目中,您可能需要为不同组件分别创建容器,如 Jupyter Notebook、用于存储数据的数据库以及数据可视化工具。

借助 Docker Compose,您可以在一个 YAML 文件中定义这些服务,一条命令即可启动完整的数据科学环境。

1. 创建 docker-compose.yml 文件:

  • 在项目目录中创建名为 docker-compose.yml 的文件,并写入以下内容:
version: '3.8'
services:
  jupyter:
        image: jupyter/scipy-notebook:latest
        volumes:
        - ./notebooks:/home/joelwembo/work
        ports:
        - "8888:8888"
        environment:
        - JUPYTER_ENABLE_LAB=yes
 
  postgres:
        image: postgres:13-alpine
        environment:
        POSTGRES_USER: myuser
        POSTGRES_PASSWORD: mypassword
        POSTGRES_DB: mydatabase
        volumes:
        - postgres_data:/var/lib/postgresql/data
        ports:
        - "5432:5432"
 
  redis:
        image: redis:alpine
        ports:
        - "6379:6379"
 
volumes:
  postgres_data:
 

我们来解析该 Docker Compose 文件的作用:

  • version: '3.8':指定 Docker Compose 文件格式的版本。3.8 是功能完善、常用的版本。
  • services::定义构成应用的各个容器(服务)。
  • jupyter::表示交互式数据分析所需的 Jupyter Notebook 环境。
  • image: jupyter/scipy-notebook:latest:指定用于 Jupyter 的镜像,内含常用的数据科学库,如 NumPy、pandas 与 matplotlib。
  • volumes: - ./notebooks:/home/joelwembo/work:将宿主机的 notebooks 目录挂载到容器内的 /home/joelwembo/work,以便持久化并共享笔记本。 注意:这是我的个人路径,您的路径应有所不同。
  • ports: - "8888:8888":将宿主机 8888 端口映射到容器内 8888 端口(Jupyter 默认端口)。
  • environment: - JUPYTER_ENABLE_LAB=yes:启用 JupyterLab,更强大的交互式界面。
  • postgres::该服务运行 PostgreSQL 数据库,常用于在数据科学项目中存储与管理大规模数据集。
  • image: postgres:13-alpine:指定 PostgreSQL 13 的镜像,基于轻量的 Alpine Linux。
  • environment::通过环境变量配置数据库的用户、密码与数据库名。
  • volumes: - postgres_data:/var/lib/postgresql/data:挂载 Docker 数据卷以持久化数据库数据,避免容器停止后数据丢失。
  • ports: - "5432:5432":将宿主机 5432 端口映射到容器内 5432 端口(PostgreSQL 默认端口)。
  • redis::该服务运行 Redis,可用作快速的内存数据存储或缓存。
  • image: redis:alpine:使用轻量的 Alpine 版本 Redis 镜像。
  • ports: - "6379:6379":将宿主机 6379 端口映射到容器内 6379 端口(Redis 默认端口)。
  • volumes::定义可在服务间共享或在容器重启间持久化数据的命名卷。
  • postgres_data::创建用于持久化 PostgreSQL 数据的命名卷。

要启动多容器应用,只需运行:

sudo docker compose up

该命令会在需要时构建镜像,并启动 docker-compose.yml 中定义的容器。它会同时启动 Web 应用和 Redis 服务,并按定义相互通信。

您已经部署了第一个 Docker 应用!是不是很棒?接下来,我们制定一个持续学习的计划。

Docker 学习示例计划

以下是按周划分的学习计划,您可根据自身需求进行调整。

如果您需要更明确的路径,Containerization and Virtualization with Docker and Kubernetes 技能路径非常适合您。它包含四门核心课程。

第 1 周:熟悉 Docker 基础

  • 目标: 理解 Docker 的核心概念与基本命令。
  • 任务:
    • 安装 Docker 并设置 Docker Desktop。
    • 学习 Docker 命令:docker run、docker ps、docker stop、docker rm 等。
    • 运行用于数据探索工具的简单容器,如 Ubuntu 或 Alpine,并尝试基本命令。
    • 探索官方 Docker 镜像,并运行基础可视化工具的容器(如简单的 matplotlib 容器)。
  • 资源: Containerization and Virtualization Concepts 课程,Introduction to Docker 课程。

第 2 周:为数据工具构建并运行 Docker 镜像

  • 目标: 学会创建与管理自定义 Docker 镜像。
  • 任务:
    • 为基础的数据分析环境编写 Dockerfile(如带有 Pandas 与 NumPy 的 Python)。
    • 使用 docker build 构建镜像。
    • 从自定义镜像运行容器,并测试 Jupyter Notebook 等数据工具。
    • 为 TensorFlow 与 PostgreSQL 编写 Dockerfile,确保正确配置与联通。
  • 资源: Introduction to Docker 课程。

第 3 周:探索 Docker Compose

  • 目标: 理解并使用 Docker Compose 进行多容器部署。
  • 任务:
    • 安装 Docker Compose 并学习其基础。
    • 编写 docker-compose.yml 文件来定义多容器应用。
    • 通过示例进行练习,如搭建带后台数据库的 Web 应用(例如使用 PostgreSQL 的 Flask 应用)。
    • 尝试不同的配置与服务依赖。
  • 资源: Intermediate Docker 课程。

第 4 周:深入 Docker 网络与数据卷

  • 目标: 掌握 Docker 的网络与存储能力。
  • 任务:
    • 了解 Docker 网络并学会创建(bridge、host、overlay)。
    • 练习创建自定义网络并将容器连接到其上。
    • 探索用于持久化存储的 Docker 数据卷,并练习创建与管理。
    • 实现一个容器间通过自定义网络通信、并使用数据卷持久化数据的环境。
  • 资源: Intermediate Docker 课程。

第 5 周:在生产环境中部署与管理 Docker 容器

  • 目标: 理解生产环境中的容器部署与管理。
  • 任务:
    • 学习部署容器的最佳实践(如使用 Docker Hub 或私有镜像仓库)。
    • 探索使用 Docker Swarm 进行编排:创建与管理服务。
    • 了解容器伸缩与日志管理。
    • 尝试将容器化应用部署到预发布或生产环境。
  • 资源: Intermediate Docker 课程。

第 6 周:容器编排之 Kubernetes 入门

  • 目标: 了解 Kubernetes,用于扩展与管理容器化应用。
  • 任务:
    • 安装并设置本地 Kubernetes 环境(如 Minikube 或 Kind)。
    • 学习 Kubernetes 基础:Pod、Service、Deployment 与 Namespace。
    • 在 Kubernetes 上部署一个简单的容器化应用。
    • 探索在 Kubernetes 中扩展与管理应用,重点关注像 Jupyter 这样的容器化数据工具。
  • 资源: Introduction to Kubernetes 课程。

学习 Docker 的技巧与方法

最后,以下是一些建议与最佳实践,帮助您加速 Docker 学习路径。

经常练习

掌握 Docker 的关键在于持续的动手实践。可以从个人项目入手,比如将简单网站容器化或搭建本地开发环境。

随着熟练度提高,挑战更复杂的任务,例如构建多容器应用或部署 Web 服务器。

定期尝试不同的用例——如创建自定义 Docker 镜像,或配置一个 CI/CD 流水线——将加深理解并巩固关键概念。此外,参加在线 Docker 挑战或练习,也是以结构化、目标导向的方式检验与提升技能的绝佳方法。

利用在线资源

在线资源对学习 Docker 非常有帮助。官方的 Docker 文档是极佳的起点,内容权威且更新及时。

除此之外,在 DataCamp 等平台上也有大量系统课程,能够帮助您循序渐进地学习。

对于偏好视觉化学习的人士,Docker 官方频道及其他教育者在 YouTube 上的教程,能提供有用且易于理解的内容,加深您的认识。

加入 Docker 社区

融入 Docker 社区是提升学习的强大方式。参与 Docker 社区论坛与 Reddit 等平台,交流想法、提出问题,并与其他学习者和专业人士分享经验。

参加 Docker 线下聚会、网络研讨会或大会,也有助于把握行业趋势并拓展人脉。

参与开源项目

为使用 Docker 的开源项目做贡献,是获取实践与真实场景经验的绝佳方式。

在 GitHub 等网站上,您可以协作参与与 Docker 相关的项目,从他人身上学习,并在多样化场景中应用技能。开源协作将让您接触到不同思路与解决方案,更深入地理解 Docker 的能力边界。

持续关注更新

最后,紧跟 Docker 的最新发展对保持熟练度至关重要。关注 Docker 官方博客与版本说明,获取新功能或变更信息。加入论坛和社交媒体的社区讨论,也能帮助您了解新趋势与最佳实践,不断精进 Docker 技能。

通过经常练习、积极参与社区和持续学习,您将夯实 Docker 基础,并能从容应对该领域的最新发展。

结语

Docker 通过将应用及其依赖打包到隔离容器中,革新了应用部署与数据管理。这解决了环境不一致等常见难题,确保工作流对数据专业人士而言保持一致、可扩展且高效。

本指南提供了掌握 Docker 的基础步骤,从核心概念到实操部署。若要进一步加深理解,建议探索更多资源,如 DataCamp 上的 Introduction to Docker 与 Intermediate Docker 课程。随着进阶,学习 Kubernetes 等编排工具同样重要——请查看 Introduction to Kubernetes 课程开始入门。

只要经常练习、充分利用资源并与社区保持互动,您就能释放 Docker 在复杂数据环境管理中的全部潜能。

常见问题

学习 Docker 需要多长时间?

学习 Docker 所需时间因您的经验而异。对于初学者,熟悉容器、镜像与 Dockerfile 等基础概念可能需要几天。若要更深入地掌握 Docker Compose 与 Kubernetes 等概念,通常需要数周的定期练习。

学完 Docker 后还需要学习 Kubernetes 吗?

Docker 是容器化的基础,而 Kubernetes 则适用于在多容器的大规模部署中进行管理与编排。在掌握 Docker 之后,若您需要处理复杂应用或自动化扩缩容与容器管理,强烈建议学习 Kubernetes。

有哪些项目可以用来练习 Docker?

要获得 Docker 的实操经验,可以从小项目开始,例如将个人网站容器化,或为 Web 应用搭建本地开发环境。进一步地,尝试使用 Docker Compose 构建多容器应用,或部署一个简单的 CI/CD 流水线。您也可以通过为使用 Docker 的开源项目做贡献来进行练习。

Docker 对数据专业人士是否必要?

是的,Docker 对数据专业人士非常有用。它能创建可复现的环境,确保数据管道从开发到生产都能一致运行。Docker 还简化依赖管理并提升团队协作,是现代数据工作流的必备工具。

学习 Docker 的最佳资源有哪些?

学习 Docker 的优质资源包括:

Joel Wembo

作者

Joel Wembo

AWS 认证云解决方案架构师、DevOps、云工程师,深谙高可用架构及相关理念。具备云工程与 DevOps 知识,善于利用开源资源交付企业级应用。使用 AWS、AWS CDK、AWS SAM、CloudFormation、Serverless Framework、Terraform 和 Django 构建云端应用。

主题