2016-02-19 51 views
2

我有三條命令用於通過我們的CI工具(Jenkins)「更新」,「重新運行」,然後「清理」當前的碼頭圖像。爲了簡單起見,我不包括我的「容器停止和刪除」命令。需要將這個相對簡單的docker pull和run命令轉換成docker-compose.yml文件嗎?

docker pull my.private.registry:443/my-awesome-app 

docker run -d --env-file ./env.list -i -p 8080:8080 -p 9990:9990 my.private.registry:443/my-awesome-app 

docker rmi $(docker images -f "dangling=true" -q) 

我是新來泊塢窗,撰寫和我理解這些最拉/運行步驟或許可以泊塢窗,compose.yml文件內完成。我希望有經驗的人能夠給我一個例子,因爲我發現的那些似乎與我的需求有點分歧。

此外,將docker-compose給我一個更好的方式來傳遞我的環境變量比列出的方法?

env.list是我傳遞給容器的環境變量的列表。這似乎工作,但我注意到,執行docker檢查$ {CONTAINER_ID}會顯示我傳入的變量值。我覺得這種做法首先破壞了從配置文件中提取值的目的。

回答

2

首先,如果您簡單地將運行命令轉換爲docker-compose.yml文件,您將獲得以下內容。爲了舉例,我打電話給服務my-awesome-app,但您可以將其命名爲您想要的。 (注意:這個docker-compose文件和下面的文件夾是新版本2格式,需要docker-engine 1.10和docker-compose 1.6才能運行)。

version: '2' 
services: 
    my-awesome-app: 
    image: my.private.registry:443/my-awesome-app 
    ports: 
     - "8080:8080" 
     - "9990:9990" 
    env_file: 
     - ./env.list 

爲了實現你的命令包括停止並移除舊包含但碼頭工人,譜寫你可以運行(在您的工作目錄docker-compose.yml文件):

docker-compose pull 

docker-compose up -d 

docker rmi $(docker images -f "dangling=true" -q) 

docker-compose pull - 做什麼它說在錫上,拉出docker-compose.yml中的所有圖像。

docker-compose up -d - 相當於docker run-d將以分離模式運行(與docker run -d相同)。在啓動新的命令之前,該命令也會停止並刪除以前版本的容器。

docker rmi $(docker images -f "dangling=true" -q) - 與以前相同。 Docker-compose沒有任何清理圖像的功能。

環境變量

上面docker-compose.yml實現用於添加環境變量運行docker run --env-file ./env.list相同的方法。如果你有一個非常少的環境變量(比如說高於3),這是最好的方法。

另一種方法是將環境變量放在docker-compose.yml文件中,相當於運行docker run -e KEY1=value -e KEY2=value

version: '2' 
services: 
    my-awesome-app: 
    image: my.private.registry:443/my-awesome-app 
    ports: 
     - "8080:8080" 
     - "9990:9990" 
    environment: 
     - KEY1=value 
     - KEY2=value 

最後ENV文件解決是有大量的環境變量,並沒有一一列舉出你的搬運工,撰寫文件,或者作爲搬運工運行-e標誌的問題。它也可以被多個容器使用。無論環境變量是來自env文件還是直接列出,它們仍然是容器配置的一部分,因此應該預期它們出現在docker inspect。此外,如果您擔心其他應用程序可能會看到此信息,應用程序首先必須有權訪問docker守護程序(以便它可以調用檢查)。如果應用程序可以訪問docker守護進程,那麼它也可以運行docker exec echo $YOUR_ENV_VAR並以任何方式檢索它,因此在docker inspect中隱藏環境變量不會增加安全性。

希望有所幫助。

+0

太棒了,謝謝你這麼好的回答。我不知道碼頭組成自動停止並刪除現有的容器。太棒了。爲什麼需要該版本? – daniel9x

+0

新Docker撰寫文件格式與舊版Docker撰寫文件格式略有不同(因此需要最新版本的docker-compose來解析它),並且支持只能在docker-engine 1.10(例如docker網絡)中運行的新功能。據推測,版本2格式將是未來唯一支持的格式,因此我回答了它。 – JamesStewy

相關問題