2015-01-09 33 views
7

我跑碼頭工人一個EC2服務器,我想補充以下爲User Data,所以我的私人Dockerhub圖像會被拉/運行在服務器啓動時,就像這樣:如何從一個私人Dockerhub回購自動執行碼頭運行?

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

但我我不確定如何進行身份驗證以獲得訪問私人回購myusername/hello

使用Github創建並上傳部署密鑰,Dockerhub是否提供了類似的部署密鑰選項?

回答

4

UPDATE: 想通了一個更好的方式,不涉及烘烤你的creds成圖像在所有。請參閱以下問題以獲取適用於解決此問題的信息:Is it secure to store EC2 User-Data shell scripts in a private S3 bucket?

這有助於在任何特定時間保持您的祕密處於最少數量的必要位置。


想出一個更好的辦法:使用

  1. 啓動機器所需的操作系統
  2. 整機
  3. 上安裝多克
  4. 運行sudo docker login一旦驗證成功泊塢窗將在您的主目錄中放置一個.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文件。

希望可以幫助任何人找出這個問題。

2

更新:看我其他的答案,不需要硬編碼的creds到您的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 

這requi請將您的Dockerhub信用卡硬編碼到您的User Data腳本中,但這並不理想,但它確實有效。

2

如果您關心使用ECS(爲您創建EC2實例)並且不想在您的解決方案中使用文件存儲,我想出了一個更好的方法。 我混的@AJB建議的解決方案(「用戶數據」屬性和「泊塢窗登錄」輸出),我將描述該過程:據我可以在你的機器(沒有sudo的需要上

  1. 使用docker login告訴),成功登錄後運行cat .docker/config.json,你會得到這樣的:

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

  • 警察y中的KEYEMAIL一邊
  • 在ECS - 創建一個clusterservicetask definition(設置爲yourusername/hello圖像屬性),這將自動生成EC2菜單上的EC2
  • 配置 - 去啓動配置菜單,並選擇由ECS產生的launch configuration
  • 點擊copy launch configuration按鈕和編輯品嚐(你可以改變AMI雖然我與Amazon Linux AMI建議逗留,除非你有,設置一個新的描述性名稱)
  • 內編輯詳情 - >高級德泰LS編輯用戶數據屬性,並添加以下(替換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 
    
  • 選擇產生開關爲自動縮放組菜單和所述一個由ECS
  • 點擊編輯,並選擇剛纔創建的啓動配置,
  • 開關保存到實例菜單並終止正在運行的實例
  • 大功告成!
  • Auto Scaling Group很快將推出一個新實例,該實例現在使用允許訪問DockerHub帳戶上的私有存儲庫的新配置。

    +0

    這是唯一可行的解​​決方案。 AWS很糟糕。 – harishkashyap 2015-10-13 23:34:20

    +0

    是的,我認爲這是一個錯誤。 我遵循http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html和http://docs.aws.amazon.com/AmazonECS/latest/developerguide/private- auth.html不起作用(同時使用兩種認證類型); 是一個安全的一面,我也將我的碼頭中心憑據寫入/etc/ecs/ecs.config。 – Ethan 2015-10-14 19:48:32