7

我有一个运行 Docker 的 EC2 服务器,我想将以下内容添加到User Data服务器启动时,我的私有 Dockerhub 映像将被拉取/运行,如下所示:

#!/bin/bash
sudo docker run -p 3333:3333 -d --name Hello myusername/hello

但我不确定如何进行身份验证以访问私有 repo myusername/hello

使用 Github 创建和上传部署密钥,Dockerhub 是否提供类似的部署密钥选项?

4

3 回答 3

4

更新: 想出了一个更好的方法,它根本不涉及将你的信用烘焙到图像中。有关适用于解决此问题的信息,请参阅以下问题:将 EC2 用户数据 shell 脚本存储在私有 S3 存储桶中是否安全?

这有助于在任何给定时间将您的秘密保存在最少的必要位置。


想出了一个更好的方法:

  1. 使用所需的操作系统启动机器
  2. 安装 Docker
  3. sudo docker login在那台机器上运行
  4. 验证成功后,Docker 将.dockercfg在您的主目录中放置一个文件(例如/home/yourusername/.dockercfg)。从现在开始,Docker 将使用此文件进行所有身份验证。
  5. 创建要在启动所有新实例时使用的计算机映像。此图像现在将包含.dockercfg文件烘焙。
  6. 将以下内容添加到User Data您的机器映像中:
#!/bin/bash
sudo docker run -p 3333:3333 -d --name Hello yourusername/hello

现在,当您基于您的机器映像启动一个实例时,您的sudo docker run命令将成功提取私有存储库,前提是您运行 docker 命令的用户.dockercfg在其主目录中有一个文件。

希望能帮助任何想弄清楚这一点的人。

于 2015-01-11T01:33:43.030 回答
2

更新:请参阅我的其他答案以获得更好的方法,该方法不需要将您的凭据硬编码到您的User Data脚本中


要让实例在启动时提取私有 Dockerhub 存储库,您只需在命令之前sudo docker loginUser Data启动脚本中运行即可进行身份验证sudo docker run,完全如下:

#!/bin/bash
sudo docker login -u <username> -p <password> -e <email>
sudo docker run -p 3333:3333 -d --name Hello myusername/hello

这需要将您的 Dockerhub 凭据硬编码到您的User Data脚本中,这并不理想,但它确实有效。

于 2015-01-09T22:15:08.797 回答
2

如果您想使用 ECS(为您创建 EC2 实例)并且不想在您的解决方案中使用文件存储,我想出了一个更好的方法。我混合了@AJB 建议的解决方案('User Data' 属性和'docker login' 输出),我将描述这个过程:

  1. 在您的机器上使用docker login(据我所知,不需要 sudo),在成功登录运行后cat .docker/config.json,您将得到如下信息:

{"auths":{"https://index.docker.io/v1/":{"auth":"KEY","email":"EMAIL"}}}

  1. 复制KEYEMAIL放在一边
  2. 在 ECS 上 - 创建 aclusterservicea task definition(将 image 属性设置为yourusername/hello),这将自动生成 EC2 的配置
  3. 在 EC2 菜单上 - 转到启动配置菜单并选择launch configuration由 ECS 生成
  4. 单击copy launch configuration按钮并编辑以品尝(您可以更改 AMI,尽管我建议您继续使用,Amazon Linux AMI除非您必须设置一个新的描述性名称)
  5. 在 Edit Details -> Advanced Details 中编辑 User Data 属性并添加以下内容(替换 KEY 和 EMAIL):
mkdir /home/ec2-user/.docker/
echo '{"auths":{"https://index.docker.io/v1/":{"auth":"KEY","email":"EMAIL"}}}' >> /home/ec2-user/.docker/config.json
sudo stop ecs
sudo start ecs
  1. 切换到 Auto Scaling Groups 菜单并选择 ECS 生成的组
  2. 单击编辑并选择您刚刚创建的启动配置,保存
  3. 切换到 Instances 菜单并终止正在运行的实例
  4. 你完成了!

Auto Scaling Group 将很快启动一个新实例,该实例现在使用新配置,允许访问您的 DockerHub 帐户上的私有存储库。

于 2015-10-06T14:09:45.880 回答