数据科学中的Docker入门与实践
立即解锁
发布时间: 2025-08-23 01:11:02 阅读量: 1 订阅数: 2 

### 数据科学中的 Docker 与 Jupyter:入门指南
#### 1. 数据科学面临的挑战与 Docker 的作用
数据科学家常常面临一系列复杂问题,除了数据建模,系统基础设施问题也不可避免。可以简单区分出“建模问题”和“工程问题”,数据科学家更擅长解决前者,而在解决后者时可能力不从心。
Docker 已被系统管理员和 DevOps 社区广泛采用,作为高可用性和高性能计算挑战的现代解决方案。它可用于将遗留应用过渡到基于“微服务”的现代方法、促进新代码的持续集成和部署,以及优化基础设施使用。
结合流行的交互式编程平台 Jupyter,数据科学家可以轻松掌控系统配置和维护,快速原型化可部署和可扩展的数据解决方案,并轻松复制整个系统以实现可重复性和便于交流。
#### 2. “大数据”的定义
“大数据”没有精确的定义,一般认为是在不明确考虑其规模就无法管理的数据范围。这会因个人和开发团队而异。掌握 Docker 的相关概念和技术,将显著扩大读者对“大数据”规模和范围的认知。
#### 3. 学习的推荐实践
为了学习相关内容,建议使用沙盒系统。如果能在孤立的、非关键任务环境中安装 Docker,就可以放心地进行学习,不用担心“弄坏东西”。这里介绍使用亚马逊网络服务(AWS)搭建一个基于云的最小系统来运行 Docker 的过程。
截至目前,AWS 是占主导地位的云服务提供商。虽然不认为其主导地位是使用其服务的先验理由,但它是最容易被大多数人采用的解决方案。而且,这种方法也适用于其他云服务,如 DigitalOcean 或 Google Cloud Platform,前提是读者可以通过安全外壳(ssh)访问这些系统,并且它们运行的是 Linux 变体。
配置 AWS EC2 系统的过程如下:
1. 配置密钥对
2. 创建新的安全组
3. 创建新的 EC2 实例
4. 配置新实例以使用 Docker
##### 3.1 设置新的 AWS 账户
如果还没有 AWS 账户,需要先进行设置。可以在任何区域进行操作,但建议记录所选的工作区域。
##### 3.2 配置密钥对
要与运行在 AWS EC2 上的沙盒系统进行交互,需要一个 ssh 密钥对。Amazon EC2 使用公钥加密来实现与运行中的 EC2 实例的所有连接。具体操作如下:
- 在本地系统使用 `ssh-keygen` 工具创建密钥对。对于沙盒系统,可以留空所有字段,包括 ssh 密钥的密码短语。默认保存位置为 `~/.ssh/id_rsa` ,其中 `~` 表示当前用户的主目录。
```bash
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```
创建完成后会显示如下信息:
```
Your identification has been saved in /home/ubuntu/.ssh/id_rsa.
Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:g5IYNQMf1n1jW5p36Y9I/qSPxnckhT665KtiB06xu2U ubuntu@ip-172-31-43-19
The key's randomart image is:
+---[RSA 2048]----+
| ..*. . |
| + +. . + . |
| . . o * o |
| o . .. + . + .|
| . o . So . + . |
| . +. . = .|
| o oE+.o.* |
| =o.o*+o o|
| ..+.o**o. |
+----[SHA256]-----+
```
- 使用 `cat` 工具验证密钥内容:
```bash
$ cat ~/.ssh/id_rsa.pub
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDdnHPEiq1a4OsDDY+g9luWQS8pCjBmR
64MmsrQ9MaIaE5shIcFB1Kg3pGwJpypiZjoSh9pS55S9LckNsBfn8Ff42ALLj
R8y+WlJKVk/0DvDXgGVcCc0t/uTvxVx0bRruYxLW167J89UnxnJuRZDLeY9fD
OfIzSR5eglhCWVqiOzB+OsLqR1W04Xz1oStID78UiY5msW+EFg25Hg1wepYMC
JG/Zr43ByOYPGseUrbCqFBS1KlQnzfWRfEKHZbtEe6HbWwz1UDL2NrdFXxZAI
XYYoCVtl4WXd/WjDwSjbMmtf3BqenVKZcP2DQ9/W+geIGGjvOTfUdsCHennYI
EUfEEP ubuntu@ip-172-31-43-19
```
##### 3.3 在 AWS 上创建新的密钥对
登录 AWS 控制面板,导航到 EC2 仪表板。先访问“Services”,再访问“EC2”。到达 EC2 控制面板后,通过任意链接访问“Key Pairs”面板。
从“Key Pairs”面板中选择“Import Key Pair”,会弹出一个模态框,用于创建与 AWS 账户中某个区域关联的新密钥对。给密钥对起一个便于计算机识别的名称,如 `from-MacBook-2017` ,然后将公钥(`id_rsa.pub`)的内容粘贴到公钥内容框中。点击“Import”创建新密钥。
需要注意的是,许多 AWS 资产是按区域唯一创建的,在一个区域创建的密钥对在另一个区域不可用。这里 AWS 所说的“密钥对”实际上是上传的公钥,而私钥仍保留在本地系统。
##### 3.4 创建新的安全组
从 EC2 仪表板访问“Security Group”面板,点击“Create Security Group”。给安全组起一个计算机友好的名称,如 `jupyter_docker` ,并给出描述,如“Open access to Jupyter and Docker default ports”。使用默认的 VPC,访问“Inbound”选项卡并配置以下安全规则:
| Port | Service Available |
| ---- | ---- |
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
| 2376 | Docker Hub |
| 8888 | Jupyter |
mermaid 流程图如下:
```mermaid
graph LR
A[开始] --> B[设置新的 AWS 账户]
B --> C[配置密钥对]
C --> D[在 AWS 上创建新的密钥对]
D --> E[创建新的安全组]
E --> F[结束]
```
通过以上步骤,就完成了使用 AWS 搭建基于云的系统来运行 Docker 的前期准备工作。接下来可以继续深入学习 Docker 和 Jupyter 在数据科学中的应用。
#### 4. 拉取并运行 Jupyter 镜像
在完成 AWS 系统的配置后,就可以开始拉取并运行 Jupyter 镜像。
##### 4.1 拉取 `jupyter/scipy-notebook` 镜像
使用以下命令拉取 `jupyter/scipy-notebook` 镜像:
```bash
docker pull jupyter/scipy-notebook
```
##### 4.2 运行 `jupyter/scipy-notebook` 镜像
使用以下命令运行拉取的镜像:
```bash
docker run -p 8888:8888 jupyter/scipy-notebook
```
这里 `-p 8888:8888` 表示将容器内部的 8888 端口映射到主机的 8888 端口,这样就可以通过主机的 8888 端口访问 Jupyter Notebook。
#### 5. 监控内存使用
在运行 Jupyter 镜像的过程中,监控内存使用情况是很有必要的,这样可以了解系统的资源占用情况,避免出现内存异常。
##### 5.1 监控内存使用的方法
可以使用系统自带的监控工具,如 `top`、`htop` 等,也可以使用 Docker 提供的命令来监控容器的内存使用情况:
```bash
docker stats
```
该命令会实时显示所有运行容器的资源使用情况,包括 CPU、内存、网络等。
##### 5.2 确定导致内存异常的数据集大小
不同的数据集大小对内存的占用情况不同,需要通过测试来确定多大的数据集会导致内存异常。可以通过逐步增加数据集的大小,同时监控内存使用情况,当出现内存异常时,记录下此时数据集的大小。
##### 5.3 确定不适合拟合简单模型的数据集大小
同样,不同类型的简单模型对数据集大小有不同的要求,需要通过实验来确定多大的数据集不适合用来拟合不同类型的简单模型。可以选择几种常见的简单模型,如线性回归、逻辑回归等,使用不同大小的数据集进行训练,观察模型的性能表现,当模型性能明显下降时,记录下此时数据集的大小。
#### 6. 总结
通过以上步骤,我们完成了使用 AWS 搭建基于云的系统来运行 Docker 和 Jupyter 的过程,并且了解了如何拉取和运行 Jupyter 镜像,以及如何监控内存使用情况。具体步骤总结如下:
1. 配置 AWS 账户和系统,包括设置新的 AWS 账户、配置密钥对、在 AWS 上创建新的密钥对、创建新的安全组。
2. 拉取并运行 Jupyter 镜像,使用 `docker pull` 命令拉取 `jupyter/scipy-notebook` 镜像,使用 `docker run` 命令运行镜像。
3. 监控内存使用,使用 `docker stats` 命令监控容器的内存使用情况,通过实验确定导致内存异常和不适合拟合简单模型的数据集大小。
表格总结如下:
| 步骤 | 操作 | 命令示例 |
| ---- | ---- | ---- |
| 配置 AWS 账户 | 设置新的 AWS 账户 | - |
| 配置密钥对 | 在本地创建密钥对 | `ssh-keygen -t rsa` |
| 在 AWS 上创建新的密钥对 | 导入公钥 | - |
| 创建新的安全组 | 配置安全规则 | - |
| 拉取镜像 | 拉取 `jupyter/scipy-notebook` 镜像 | `docker pull jupyter/scipy-notebook` |
| 运行镜像 | 运行 `jupyter/scipy-notebook` 镜像 | `docker run -p 8888:8888 jupyter/scipy-notebook` |
| 监控内存使用 | 监控容器内存使用 | `docker stats` |
mermaid 流程图如下:
```mermaid
graph LR
A[配置 AWS 系统] --> B[拉取 Jupyter 镜像]
B --> C[运行 Jupyter 镜像]
C --> D[监控内存使用]
D --> E[确定数据集大小]
E --> F[结束]
```
掌握 Docker 和 Jupyter 在数据科学中的应用,可以让数据科学家更好地掌控系统配置和维护,快速原型化可部署和可扩展的数据解决方案,提高工作效率和数据处理能力。
0
0
复制全文
相关推荐










