步骤 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 的优质资源包括:
- Docker 官方文档
- DataCamp 的 Introduction to Docker 与 Intermediate Docker 课程
- Docker 官方频道的 YouTube 教程
- Docker 社区论坛与 GitHub 代码库,用于实操学习与协作
AWS 认证云解决方案架构师、DevOps、云工程师,深谙高可用架构及相关理念。具备云工程与 DevOps 知识,善于利用开源资源交付企业级应用。使用 AWS、AWS CDK、AWS SAM、CloudFormation、Serverless Framework、Terraform 和 Django 构建云端应用。

容器化已经改变了工程团队管理和扩展应用程序的方式,尤其是在数据管理、分析和机器学习领域。通过将应用打包到隔离且轻量的环境中,容器可确保从开发到生产的一致表现。
在众多平台中,Docker 脱颖而出,成为最受欢迎的解决方案。它的灵活性与简洁性,使数据专业人士能够构建可复现、可扩展且高效的工作流,同时促进协作。
在本文中,我们将制定一份实用的 Docker 学习计划,并带您完成首次简单部署。让我们开始吧!
什么是 Docker,为何值得学习?
Docker 是一个开源平台,借助容器化来简化应用的部署、扩展与管理。
容器是轻量、可移植的环境,包含运行应用所需的一切——代码、运行时、库与设置——从而在不同系统上都能获得一致性能。在数据项目中,Docker 用于构建与管理这些容器,使应用能够在任何基础设施上稳定运行。
与需要独立操作系统和管理它们的虚拟机(VM)不同,Docker 仅虚拟化应用层。这使容器启动更快、占用资源更少、配置更容易。
容器化应用与虚拟机对比。图片来源:Docker
对于数据专业人士,Docker 有助于创建可复现的环境,使数据管道从开发到生产都能稳定运行。它可减少依赖问题、简化工作流,并通过标准化、可共享的环境促进团队协作。
此外,Docker 还能与常见的数据工具集成,如 Jupyter、TensorFlow,以及 Apache Hadoop。
掌握 Docker 能提升生产力、优化工作流,并让您的项目具备可扩展与易部署的特性!
从零学 Docker:您的首次部署
学习 Docker 最好的方式就是上手实践。接下来,我将带您完成一次简单的首次部署。之后我们会探讨进阶学习计划。
步骤 1:理解核心概念
在动手实践前,先掌握一些基础概念非常重要。以下是 Docker 的主要概念:
Docker 架构概览。图片来源:Docker
在使用 Docker 部署应用之前,理解这些核心概念至关重要。打好基础将使后续的实操更加高效。
此Introduction to Docker 课程可大幅巩固您的现有知识。
步骤 2:安装 Docker
要开始使用 Docker,您需要在系统上安装它。下面是不同平台的安装说明。更多详细指导请参阅官方文档链接。
1. 在 Windows 上安装 Docker
系统要求:
步骤:
1. 启用 WSL 2(Windows Subsystem for Linux):
2. 安装 Windows 版 Docker Desktop:
3. 启动 Docker Desktop:
4. 验证安装:
官方文档: Docker Desktop for Windows
2. 在 macOS 上安装 Docker
系统要求:
步骤:
1. 下载 macOS 版 Docker Desktop:
2. 安装 Docker Desktop:
.dmg文件。3. 启动 Docker Desktop:
4. 验证安装:
官方文档: Docker Desktop for Mac
3. 在 Linux 上安装 Docker
支持的发行版:
Ubuntu/Debian 步骤:
1. 卸载旧版本:
2. 配置 Docker 的 apt 仓库:
3. 安装 Docker 软件包:
4. 验证安装:
官方文档: Docker Engine on Debian