

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 开始使用本地模式
<a name="studio-updated-local-get-started"></a>

以下各节概述了在 Amazon SageMaker Studio 中开始使用本地模式所需的步骤，包括：
+ 满足先决条件
+ 设置 `EnableDockerAccess`
+ Docker 安装

## 先决条件
<a name="studio-updated-local-prereq"></a>

要在 Studio 应用程序中使用本地模式，请完成以下先决条件：
+ 要从 Amazon Elastic Container Registry 存储库中提取映像，托管 Amazon ECR 映像的账户必须为用户的执行角色提供访问权限。此域的执行角色也必须允许 Amazon ECR 访问。
+ 使用以下命令验证您使用的是最新版本的 Studio Python SDK： 

  ```
  pip install -U sagemaker
  ```
+ 要使用本地模式和 Docker 功能，请使用 AWS Command Line Interface (AWS CLI) 设置域的 `DockerSettings` 以下参数： 

  ```
  EnableDockerAccess : ENABLED
  ```
+ 使用 `EnableDockerAccess`，您还可以控制域中的用户是否可以使用本地模式。默认情况下，Studio 应用程序不允许使用本地模式和 Docker 功能。有关更多信息，请参阅 [设置 `EnableDockerAccess`](#studio-updated-local-enable)。
+ 按照 [Docker 安装](#studio-updated-local-docker-installation) 中的步骤在 Studio 应用程序中安装 Docker CLI。
+ 对于 [无根 Docker 配置](#studio-updated-local-rootless)，请确保 VPC 已为所需的 Docker 注册表配置适当的端点和路由。

## 设置 `EnableDockerAccess`
<a name="studio-updated-local-enable"></a>

以下各节将介绍如何在域可访问公共互联网或处于 `VPC-only` 模式时设置 `EnableDockerAccess`。

**注意**  
对 `EnableDockerAccess` 的更改仅适用于域更新后创建的应用程序。您必须在更新域后创建新的应用程序。

**公共互联网访问**

以下示例命令显示了在可以访问公共互联网的情况下创建新域或更新现有域时如何设置 `EnableDockerAccess`：

```
# create new domain
aws --region region \
    sagemaker create-domain --domain-name domain-name \
    --vpc-id vpc-id \
    --subnet-ids subnet-ids \
    --auth-mode IAM \
    --default-user-settings "ExecutionRole=execution-role" \
    --domain-settings '{"DockerSettings": {"EnableDockerAccess": "ENABLED"}}' \
    --query DomainArn \
    --output text

# update domain
aws --region region \
    sagemaker update-domain --domain-id domain-id \
    --domain-settings-for-update '{"DockerSettings": {"EnableDockerAccess": "ENABLED"}}'
```

**`VPC-only` 模式**

在 `VPC-only` 模式下使用域时，Docker 映像推送和拉取请求将通过服务 VPC 而不是客户配置的 VPC 进行路由。由于此功能，管理员可以配置用户可以向其中发出 Amazon ECR Docker 拉取和推送操作请求的受信任 AWS 账户 列表。

如果向不在可信列表中的用户发出Docker AWS 账户 图像推送或拉取请求 AWS 账户，则请求将失败。 Docker模式下不支持亚马逊弹性容器注册表 (Amazon ECR) Container Registry 之外的拉取和推送操作。`VPC-only`

默认情况下，以下内容 AWS 账户 是可信的：
+ 托管 SageMaker AI 域的账户。
+ SageMaker 托管以下 SageMaker 图片的 AI 账户：
  + DLC 框架映像
  + sklearnSpark， XGBoost 处理图像

要配置其他可信列表 AWS 账户，请按以下方式指定`VpcOnlyTrustedAccounts`值：

```
aws --region region \
    sagemaker update-domain --domain-id domain-id \
    --domain-settings-for-update '{"DockerSettings": {"EnableDockerAccess": "ENABLED", "VpcOnlyTrustedAccounts": ["account-list"]}}'
```

**注意**  
启用 [无根 Docker 配置](#studio-updated-local-rootless)后，`VpcOnlyTrustedAccounts` 将被忽略，并且 Docker 流量会通过 VPC 配置进行路由，从而允许访问 VPC 可触达的任何注册表。

## 无根 Docker 配置
<a name="studio-updated-local-rootless"></a>

启用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DockerSettings.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DockerSettings.html) 后，Studio 将使用[无根 Docker 进程守护程序](https://docs.docker.com/engine/security/rootless/)，通过 VPC 路由流量。这将增强安全性，并允许访问其他 Docker 注册表。与 `RootlessDocker` 之间的主要区别是：
+ 容器端口可通过 Docker 网关 IP（`172.17.0.1`）而非 localhost 进行访问。
+ VPC 配置将决定 Docker 操作可访问的注册表。`VpcOnlyTrustedAccounts` 将被忽略，并且 Docker 流量会通过 VPC 配置进行路由。

要使用无根 Docker，您需要为 `DockerSettings` 将 `EnableDockerAccess` 和 `RootlessDocker` 都设置为 `ENABLED`。例如，在上面的 [设置 `EnableDockerAccess`](#studio-updated-local-enable) 示例中，您可以修改域设置以包括：

```
'{"DockerSettings": {"EnableDockerAccess": "ENABLED", "RootlessDocker": "ENABLED"}}'
```

## Docker 安装
<a name="studio-updated-local-docker-installation"></a>

要使用 Docker，您必须在 Studio 应用程序的终端手动安装 Docker。如果域可以访问互联网，安装 Docker 的步骤则有所不同。

### 互联网访问
<a name="studio-updated-local-docker-installation-internet"></a>

如果域是在可以访问公共互联网或在访问互联网受限的 `VPC-only` 模式下创建的，请使用以下步骤安装 Docker。

1. （可选）如果您的域是在互联网访问受限的 `VPC-only` 模式下创建的，请创建一个可访问 Docker 网站的公共 NAT 网关。有关说明，请参阅 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。

1. 导航到要安装 Docker 的 Studio 应用程序的终端。

1. 要返回应用程序的操作系统，请在终端运行以下命令：

   ```
   cat /etc/os-release
   ```

1. Docker按照 [Amazon A SageMaker I 本地模式示例存储库](https://github.com/aws-samples/amazon-sagemaker-local-mode/tree/main/sagemaker_studio_docker_cli_install)中应用程序操作系统的说明进行安装。

   例如，Docker按Ubuntu照 [https://github.com/aws-samples/amazon-sagemaker-local-mode/blob/main/sagemaker\$1studio\$1docker\$1cli\$1install/sagemaker-ubuntu-focal-docker-cli-install.sh](https://github.com/aws-samples/amazon-sagemaker-local-mode/blob/main/sagemaker_studio_docker_cli_install/sagemaker-ubuntu-focal-docker-cli-install.sh) 的脚本进行安装，注意以下几点：
   + 如果链接命令失败，请逐个运行命令。
   + Studio 仅支持 Docker 版本 `20.10.X.` 和 Docker Engine API 版本 `1.41`。
   + 在 Studio 中使用 Docker CLI 不需要安装下列软件包，因此可以跳过它们的安装：
     + `containerd.io`
     + `docker-ce`
     + `docker-buildx-plugin`
**注意**  
您无需在应用程序中启动 Docker 服务。托管 Studio 应用程序的实例默认运行 Docker 服务。所有 Docker API 调用都会自动通过 Docker 服务进行路由。

1. 在 Studio 应用程序中使用公开的 Docker 套接字进行 Docker 交互。默认情况下，以下套接字处于公开状态：

   ```
   unix:///docker/proxy.sock
   ```

   以下 Studio 应用程序环境变量默认 `USER` 使用此公开的套接字：

   ```
   DOCKER_HOST
   ```

### 无法访问互联网
<a name="studio-updated-local-docker-installation-no-internet"></a>

如果域是在无法访问互联网的 `VPC-only` 模式下创建的，请使用以下步骤安装 Docker。

1. 导航到要安装 Docker 的 Studio 应用程序的终端。

1. 从终端运行以下命令，返回应用程序的操作系统：

   ```
   cat /etc/os-release
   ```

1. 将所需的 Docker `.deb` 文件下载到本地计算机。有关为 Studio 应用程序的操作系统下载所需文件的说明，请参阅[安装 Docker 引擎](https://docs.docker.com/engine/install/)。

   例如，在 Ubuntu 上按照[从软件包安装](https://docs.docker.com/engine/install/ubuntu/#install-from-a-package)中的第 1-4 步安装 Docker，并注意以下事项：
   + 从软件包安装 Docker。使用其他方法安装 Docker 会失败。
   + 安装与 Docker 版本 `20.10.X` 相对应的最新软件包。
   + 在 Studio 中使用 Docker CLI 不需要下列软件包。您无需安装以下程序：
     + `containerd.io`
     + `docker-ce`
     + `docker-buildx-plugin`
**注意**  
您无需在应用程序中启动 Docker 服务。托管 Studio 应用程序的实例默认运行 Docker 服务。所有 Docker API 调用都会自动通过 Docker 服务进行路由。

1. 将 `.deb` 文件上传到应用程序的 Amazon EFS 文件系统或 Amazon EBS 文件系统。

1. 从 Studio 应用程序终端手动安装 `docker-ce-cli` 和 `docker-compose-plugin` `.deb` 软件包。有关更多信息和说明，请参阅 Docker 文档网站上的[从软件包安装](https://docs.docker.com/engine/install/ubuntu/#install-from-a-package)中的第 5 步。

1. 在 Studio 应用程序中使用公开的 Docker 套接字进行 Docker 交互。默认情况下，以下套接字处于公开状态：

   ```
   unix:///docker/proxy.sock
   ```

   以下 Studio 应用程序环境变量默认 `USER` 使用此公开的套接字：

   ```
   DOCKER_HOST
   ```