如何从私有 Dockerhub 存储库自动化 docker 运行?
How to automate a docker run from a private Dockerhub repo?
我有一个 EC2 服务器 运行 Docker,我想将以下内容添加到 User Data
,这样我的私有 Dockerhub 图像将是 pulled/run 当服务器启动时,像这样:
#!/bin/bash
sudo docker run -p 3333:3333 -d --name Hello myusername/hello
但我不确定如何进行身份验证才能访问私人存储库 myusername/hello
。
使用 Github 创建并上传部署密钥,Dockerhub 是否提供类似的部署密钥选项?
更新:请参阅我的其他答案以获得更好的方法,该方法不需要将您的信誉硬编码到您的 User Data
脚本中
要让实例在启动时拉取私有 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
这需要将您的 Dockerhub 凭据硬编码到您的 User Data
脚本中,这不太理想,但它确实有效。
UPDATE:
Figured out an even better way that doesn't involve baking your creds into an image at all. See the following question for information that would be applicable to solving this problem as well:
This helps keep your secrets in the least number of places necessary at any given time.
找到更好的方法:
- 使用您想要的 OS
启动机器
- 安装Docker
- 运行
sudo docker login
在那台机器上
- 身份验证成功后,Docker 将在您的主目录中放置一个
.dockercfg
文件(例如 /home/yourusername/.dockercfg
)。 Docker 从现在开始将使用此文件进行所有身份验证。
- 创建您的机器的图像以在启动所有新实例时使用。此图像现在将包含
.dockercfg
文件。
- 将以下内容添加到机器映像的
User Data
中:
#!/bin/bash
sudo docker run -p 3333:3333 -d --name Hello yourusername/hello
现在,当您基于机器映像启动实例时,您的 sudo docker run
命令将成功拉取私有存储库,前提是您 运行 docker 命令下的用户具有 .dockercfg
文件在他们的主目录中。
希望能帮助任何想解决这个问题的人。
如果您希望使用 ECS(它为您创建 EC2 instance/s)并且不想在您的解决方案中使用文件存储,我想出了一个更好的方法。
我混合了@AJB建议的解决方案('User Data' 属性 和 'docker login' 输出),我将描述过程:
- 在你的机器上使用
docker login
(据我所知不需要 sudo),成功登录后 运行 cat .docker/config.json
你会得到类似的东西:
{"auths":{"https://index.docker.io/v1/":{"auth":"KEY","email":"EMAIL"}}}
- 将
KEY
和EMAIL
复制到一边
- 在 ECS 上 - 创建一个
cluster
、service
和一个 task definition
(图像 属性 设置为 yourusername/hello
),这将自动生成EC2 的配置
- 在 EC2 菜单上 - 转到启动配置菜单并选择由 ECS
生成的 launch configuration
- 单击
copy launch configuration
按钮并进行编辑(您可以更改 AMI,但我建议您继续使用 Amazon Linux AMI
,除非您必须设置一个新的描述性名称)
- 在编辑详细信息 -> 高级详细信息中编辑用户数据 属性 并添加以下内容(替换 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
- 切换到 Auto Scaling Groups 菜单并选择由 ECS 生成的组
- 点击编辑并选择您刚刚创建的启动配置,保存
- 切换到实例菜单并终止 运行ning 实例
- 大功告成!
Auto Scaling Group 将很快启动一个新实例,该实例现在使用允许访问您 DockerHub 帐户上的私有存储库的新配置。
我有一个 EC2 服务器 运行 Docker,我想将以下内容添加到 User Data
,这样我的私有 Dockerhub 图像将是 pulled/run 当服务器启动时,像这样:
#!/bin/bash
sudo docker run -p 3333:3333 -d --name Hello myusername/hello
但我不确定如何进行身份验证才能访问私人存储库 myusername/hello
。
使用 Github 创建并上传部署密钥,Dockerhub 是否提供类似的部署密钥选项?
更新:请参阅我的其他答案以获得更好的方法,该方法不需要将您的信誉硬编码到您的 User Data
脚本中
要让实例在启动时拉取私有 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
这需要将您的 Dockerhub 凭据硬编码到您的 User Data
脚本中,这不太理想,但它确实有效。
UPDATE: Figured out an even better way that doesn't involve baking your creds into an image at all. See the following question for information that would be applicable to solving this problem as well:
This helps keep your secrets in the least number of places necessary at any given time.
找到更好的方法:
- 使用您想要的 OS 启动机器
- 安装Docker
- 运行
sudo docker login
在那台机器上 - 身份验证成功后,Docker 将在您的主目录中放置一个
.dockercfg
文件(例如/home/yourusername/.dockercfg
)。 Docker 从现在开始将使用此文件进行所有身份验证。 - 创建您的机器的图像以在启动所有新实例时使用。此图像现在将包含
.dockercfg
文件。 - 将以下内容添加到机器映像的
User Data
中:
#!/bin/bash sudo docker run -p 3333:3333 -d --name Hello yourusername/hello
现在,当您基于机器映像启动实例时,您的 sudo docker run
命令将成功拉取私有存储库,前提是您 运行 docker 命令下的用户具有 .dockercfg
文件在他们的主目录中。
希望能帮助任何想解决这个问题的人。
如果您希望使用 ECS(它为您创建 EC2 instance/s)并且不想在您的解决方案中使用文件存储,我想出了一个更好的方法。 我混合了@AJB建议的解决方案('User Data' 属性 和 'docker login' 输出),我将描述过程:
- 在你的机器上使用
docker login
(据我所知不需要 sudo),成功登录后 运行cat .docker/config.json
你会得到类似的东西:
{"auths":{"https://index.docker.io/v1/":{"auth":"KEY","email":"EMAIL"}}}
- 将
KEY
和EMAIL
复制到一边 - 在 ECS 上 - 创建一个
cluster
、service
和一个task definition
(图像 属性 设置为yourusername/hello
),这将自动生成EC2 的配置 - 在 EC2 菜单上 - 转到启动配置菜单并选择由 ECS 生成的
- 单击
copy launch configuration
按钮并进行编辑(您可以更改 AMI,但我建议您继续使用Amazon Linux AMI
,除非您必须设置一个新的描述性名称) - 在编辑详细信息 -> 高级详细信息中编辑用户数据 属性 并添加以下内容(替换 KEY 和 EMAIL):
launch configuration
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
- 切换到 Auto Scaling Groups 菜单并选择由 ECS 生成的组
- 点击编辑并选择您刚刚创建的启动配置,保存
- 切换到实例菜单并终止 运行ning 实例
- 大功告成!
Auto Scaling Group 将很快启动一个新实例,该实例现在使用允许访问您 DockerHub 帐户上的私有存储库的新配置。