You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS中通过终端Python会话或Jupyter使用自定义Docker镜像开发?

自定义Jupyter Docker镜像在AWS多服务中复用的实践建议

一、Docker镜像构建核心步骤

1. 选择合适的基础镜像

优先选适配目标AWS服务的官方镜像,减少重复配置:

  • 通用数据科学场景:用jupyter/scipy-notebook(内置常用数据分析包)
  • SageMaker适配:用AWS官方SageMaker Notebook基础镜像,比如763104351884.dkr.ecr.us-east-1.amazonaws.com/sagemaker-notebook-instance:tensorflow-2.13-cpu-py310(需替换对应区域和框架版本)

2. 编写Dockerfile示例

# 基于SageMaker兼容的基础镜像
FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/sagemaker-notebook-instance:tensorflow-2.13-cpu-py310

# 切换root安装系统依赖(按需添加)
USER root
RUN apt-get update && apt-get install -y --no-install-recommends \
    git \
    curl \
    && rm -rf /var/lib/apt/lists/*  # 清理缓存减小镜像体积

# 切回Jupyter默认用户jovyan,安装Python包
USER jovyan
WORKDIR /home/jovyan

# 从本地requirements.txt安装依赖(推荐方式,便于版本管理)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 或者直接指定包版本(适合少量包的场景)
# RUN pip install --no-cache-dir pandas==2.1.0 scikit-learn==1.3.0

# 保留Jupyter默认启动命令,确保服务正常启动
CMD ["start-notebook.sh"]

3. 本地构建与验证

  • 构建镜像:docker build -t my-custom-jupyter:v1 .
  • 本地运行测试:docker run -p 8888:8888 my-custom-jupyter:v1,打开浏览器访问Jupyter,验证目标包是否安装成功。

二、适配不同AWS服务的配置

1. SageMaker Notebook Instance

  • 推送镜像到ECR:
    1. 在AWS控制台创建ECR私有仓库
    2. 本地登录ECR:aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <你的AWS账号ID>.dkr.ecr.us-east-1.amazonaws.com
    3. 打标签:docker tag my-custom-jupyter:v1 <账号ID>.dkr.ecr.us-east-1.amazonaws.com/my-custom-jupyter:v1
    4. 推送:docker push <账号ID>.dkr.ecr.us-east-1.amazonaws.com/my-custom-jupyter:v1
  • 创建SageMaker Notebook:
    在创建实例时,选择“自定义镜像”,从ECR中选择刚才推送的镜像即可。如果要用于训练任务,需额外在Dockerfile中添加训练入口配置(比如指定ENTRYPOINT ["python", "/opt/ml/code/train.py"],并将训练代码复制到/opt/ml/code目录)。

2. EC2实例

  • 前提:EC2实例已安装Docker和AWS CLI
  • 登录ECR后拉取镜像运行:
    docker run -d -p 8888:8888 \
      -v /ec2-local-data:/home/jovyan/data \  # 挂载EC2本地目录,持久化数据
      <账号ID>.dkr.ecr.us-east-1.amazonaws.com/my-custom-jupyter:v1
    
  • 开机自启:编写systemd服务文件(/etc/systemd/system/jupyter-container.service),内容如下:
    [Unit]
    Description=Custom Jupyter Notebook Container
    After=docker.service
    Requires=docker.service
    
    [Service]
    Restart=always
    ExecStart=/usr/bin/docker run --rm -p 8888:8888 -v /ec2-local-data:/home/jovyan/data <账号ID>.dkr.ecr.us-east-1.amazonaws.com/my-custom-jupyter:v1
    ExecStop=/usr/bin/docker stop -t 2 %n
    
    [Install]
    WantedBy=multi-user.target
    
    然后执行systemctl daemon-reload && systemctl enable --now jupyter-container。

3. ECS/EKS(容器集群场景)

  • ECS:创建Fargate或EC2类型的任务定义,指定镜像、端口映射(8888)、资源限制,然后启动服务,通过Application Load Balancer暴露Jupyter访问地址。
  • EKS:部署Deployment管理Pod副本,创建Service暴露端口,用Ingress配置域名访问,适合多用户协作或高可用需求。

三、镜像维护与优化技巧

  • 版本化管理:给镜像打语义化标签(如v1.0.0、v1.1.0),记录每个版本的依赖变更,方便回滚和追踪。
  • 减小镜像体积:
    • 用--no-cache-dir安装pip包,避免缓存文件残留
    • 清理系统包管理缓存(如rm -rf /var/lib/apt/lists/*)
    • 多阶段构建:将依赖编译和运行环境分离,仅复制必要的文件到最终镜像
  • 自动化构建:用AWS CodePipeline或GitHub Actions,当requirements.txt更新时自动触发镜像构建、测试并推送到ECR,减少手动操作。
  • 定期更新基础镜像:每月基于最新的官方基础镜像重新构建,修复依赖漏洞,保持环境安全性。

内容的提问来源于stack exchange,提问作者Vidya S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:10:30