首先,如果您簡單地將運行命令轉換爲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
中隱藏環境變量不會增加安全性。
希望有所幫助。
太棒了,謝謝你這麼好的回答。我不知道碼頭組成自動停止並刪除現有的容器。太棒了。爲什麼需要該版本? – daniel9x
新Docker撰寫文件格式與舊版Docker撰寫文件格式略有不同(因此需要最新版本的docker-compose來解析它),並且支持只能在docker-engine 1.10(例如docker網絡)中運行的新功能。據推測,版本2格式將是未來唯一支持的格式,因此我回答了它。 – JamesStewy