【问题标题】:Install Python Wheel when starting Docker Containers with docker-compose使用 docker-compose 启动 Docker 容器时安装 Python Wheel
【发布时间】:2021-03-26 13:45:26
【问题描述】:

我们目前正在开发一个 python 包,它将通过 AzureDevOps Pipeline 构建,结果包将存储在 Azure Artifacts 中。

在生产中,我们直接从 Azure Artifacts 将该包直接安装到一些数据块集群。 Benfit 是,只要有新版本的软件包可用,就会在启动集群时安装它

为了开发,我想在本地 spark 环境中使用 docker 容器做类似的事情。我们已经设置了 docker 容器,这些容器除了一件事外工作正常。

当我运行 docker-compose 命令时,我想从 AzureArtifacts 安装最新版本的包。 因为我们需要访问令牌才能在我们的设置中获取这个包,所以我不能在 git Repo 中提供这个令牌。因此,我需要一种将令牌安全地提供给 docker-compose 命令并从启动安装包的方法。

另外,如果使用 Dockerfile 作为命令,每次我们会得到一个新版本的包,我必须重新构建 docker-images。

所以这些任务需要在我的脑海中由用户完成(假设 DockerImages 已经构建):

  1. 有一个存储令牌的本地文件
  2. 使用我的 Docker-compose 命令启动本地环境(顺便说一下,使用 spark-master 和 worker 以及 jupyter-notebook)
  3. 自动:从本地文件获取令牌,将其提供给 docker 容器中的任何启动脚本,然后从 Azure Artifacts 安装包。

由于我不是 Docker 方面的真正专家,因此我发现了一些关于 ENTRYPOINT 和 CMD 的主题,但不明白这些以及具体要做什么。

有没有人提示我们可以通过哪种方式轻松实现上述逻辑?

PS:为了测试,我尝试使用命令安装软件包:在使用纯文本令牌进行 docker-compose 期间,安装工作正常,但无法再访问 juypter notebook :-(

希望有人对我的目标有想法或更好的方法。

最好的问候

【问题讨论】:

    标签: docker apache-spark docker-compose jupyter-notebook


    【解决方案1】:

    你可以使用build-args:

    docker-compose build --build-arg ARTIFACTORY_USERNAME=<your_username> --build-arg ARTIFACTORY_PASSWORD=<your_password> <service_to_build>
    

    那么您的 Dockerfile 可能如下所示:

    FROM <my_base_image>
    
    ARG ARTIFACTORY_USERNAME
    ARG ARTIFACTORY_PASSWORD
    
    RUN pip install <your_package_name> --extra-index-url https://$ARTIFACTORY_USERNAME:$ARTIFACTORY_PASSWORD@pkgs.dev.azure.com/<org>/_packaging/<your_package_name>/pypi/simple/
    ...
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      相关资源
      最近更新 更多