Amazon ec2 如何从私有Dockerhub回购中自动运行docker?
我有一台运行Docker的EC2服务器,我想将以下内容添加到Amazon ec2 如何从私有Dockerhub回购中自动运行docker?,amazon-ec2,docker,dockerhub,Amazon Ec2,Docker,Dockerhub,我有一台运行Docker的EC2服务器,我想将以下内容添加到用户数据中,这样我的私有Dockerhub映像将在服务器启动时被拉入/运行,如下所示: #!/bin/bash sudo docker run -p 3333:3333 -d --name Hello myusername/hello 但我不确定如何进行身份验证才能访问私人回购myusername/hello 使用Github创建并上传部署密钥,Dockerhub是否提供类似的部署密钥选项?更新:请参阅我的其他答案,以获得一种更好的方
用户数据中
,这样我的私有Dockerhub映像将在服务器启动时被拉入/运行,如下所示:
#!/bin/bash
sudo docker run -p 3333:3333 -d --name Hello myusername/hello
但我不确定如何进行身份验证才能访问私人回购myusername/hello
使用Github创建并上传部署密钥,Dockerhub是否提供类似的部署密钥选项?更新:请参阅我的其他答案,以获得一种更好的方法,该方法不需要将您的凭据硬编码到
用户数据中
要在启动时获取一个实例以拉取私有Dockerhub回购,只需在sudo docker run
命令之前,在User Data
启动脚本中运行sudo docker login
即可进行身份验证:
#!/bin/bash
sudo docker login -u <username> -p <password> -e <email>
sudo docker run -p 3333:3333 -d --name Hello myusername/hello
#/bin/bash
sudo docker登录-u-p-e
sudo docker run-p3333:3333-d——名称Hello myusername/Hello
这需要将Dockerhub代码硬编码到用户数据
脚本中,虽然不太理想,但确实有效
更新:
想出了一个更好的方法,根本不需要把你的信用卡烘焙成一个形象。有关解决此问题的信息,请参见以下问题:
这有助于在任何给定时间将您的秘密保存在最少的必要位置
找到了更好的方法:
使用所需的操作系统启动计算机
安装Docker
在那台机器上运行sudo docker login
认证成功后,Docker将在您的主目录中放置一个.dockercfg
文件(例如/home/yourusername/.dockercfg
)。从现在起,Docker将使用此文件进行所有身份验证
创建要在启动所有新实例时使用的计算机映像。此图像现在将烘焙.dockercfg
文件
将以下内容添加到机器映像的用户数据中:
现在,如果运行docker命令的用户在其主目录中有一个.dockercfg
文件,那么当您基于机器映像启动实例时,您的sudo docker run
命令将成功拉取私有repo
希望这能帮助任何想了解这一点的人。如果您想使用ECS(为您创建EC2实例),而不想在解决方案中使用文件存储,我找到了一种更好的方法。
我混合了@AJB(“用户数据”属性和“docker登录”输出)建议的解决方案,我将描述该过程:
在您的机器上使用docker-login
(据我所知,不需要sudo),成功登录后运行cat.docker/config.json
,您将得到如下结果:
{“auths”:{”https://index.docker.io/v1/“:{“auth”:“KEY”,“email”:“email”}}}
将键
和电子邮件
复制到一边
在ECS上-创建一个集群
、服务
和一个任务定义
(图像属性设置为yourusername/hello
),这将自动生成EC2的配置
在EC2菜单上-进入启动配置菜单,选择ECS生成的启动配置
单击copy launch configuration
按钮并编辑以体验(您可以更改AMI,尽管我建议您继续使用Amazon Linux AMI
,除非您必须设置一个新的描述性名称)
在内部编辑详细信息->高级详细信息编辑用户数据属性并添加以下内容(替换密钥和电子邮件):
切换到自动缩放组菜单,选择ECS生成的组
单击编辑并选择刚刚创建的启动配置,然后保存
切换到“实例”菜单并终止正在运行的实例
你完了李>
Auto Scaling Group不久将启动一个新实例,它现在使用新配置,允许访问DockerHub帐户上的私有存储库。是的,我认为这是一个bug。我遵循了这两种方法,但都不起作用(使用两种身份验证类型);为了安全起见,我还将docker hub凭据写入/etc/ecs/ecs.config。
#!/bin/bash
sudo docker run -p 3333:3333 -d --name Hello yourusername/hello
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