如何从私有Dockerhub仓库自动运行docker?

时间:2015-01-09 21:18:45

标签: amazon-ec2 docker dockerhub

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

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

但我不确定如何进行身份验证才能访问私人仓库myusername/hello

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

3 个答案:

答案 0 :(得分:4)

  

<强>更新   想出了一个更好的方法,它根本不涉及将你的信誉融入图像中。请参阅以下问题,以获取适用于解决此问题的信息:Is it secure to store EC2 User-Data shell scripts in a private S3 bucket?

     

这有助于在任何给定时间将您的秘密保存在所需的最少数量的地方。


想出更好的方法:

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

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

    希望能帮助任何想要解决这个问题的人。

答案 1 :(得分:2)

更新:请参阅我的其他答案,了解更好的方法,不需要将您的信用卡硬编码到User Data脚本中


要启动实例以在启动时提取私有Dockerhub存储库,您只需在sudo docker login命令之前运行User 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脚本中,这不太理想,但确实有效。

答案 2 :(得分:2)

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

  1. 在您的计算机上使用docker login(据我所知,不需要sudo),成功登录后运行cat .docker/config.json,您将得到以下内容:
  2.   

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

    1. KEYEMAIL放在一边
    2. 在ECS上 - 创建clusterservicetask definition(图片属性设置为yourusername/hello),这将自动生成EC2的配置< / LI> 在EC2菜单上
    3. - 转到启动配置菜单,然后选择由ECS生成的launch configuration
    4. 点击copy launch configuration按钮并进行编辑以尝试(尽管我建议您继续使用Amazon Linux AMI,除非必须,请设置新的描述性名称)
    5. 内编辑详细信息 - &gt;高级详细信息编辑用户数据属性并添加以下内容(替换KEY和EMAIL):
    6. 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. 你已经完成了!
      5. Auto Scaling Group将很快推出一个新实例,现在使用新配置允许访问DockerHub帐户上的私有存储库。