2017-09-13 57 views
0

當我運行docker build我可以使用-t--tag參數來威懾CONTAINER ID如何在運行docker-compose時設置容器ID?

https://docs.docker.com/engine/reference/commandline/build/

但是當我使用docker-compose話,我無法找到這個選項。

https://docs.docker.com/compose/reference/up/

我知道docker-composer可以創建許多容器,所以可能存在docker-compose.ymlCONTAINER ID的可能性?這個怎麼做?

+0

無法設置容器標識,可能設置泊塢窗圖片標籤。 標記不過是圖像的版本。這是用標籤創建圖像的命令。 $ docker build -t imagename:tag target-folder-path –

+0

這是不正確的,如果你使用docker-compose你可以在構建上指定圖像名稱,甚至是它的版本。如果docker-compose文件是使用build命令構建的,則您也不需要運行額外的命令來構建,可以在'docker-compose up'中使用構建。 –

回答

0

您可以在您的Docker撰寫文件中指定它,例如docker-compose正在執行。 docker-compose.yaml

構建和部署工作方式相同。只需將圖像名稱和標記設置爲subset of build或指定單獨的dockerfile即可。

version: '2' 
services: 
    webapp: 
    build: 
     context: ./dir 
    image: username/repository:tag 

鑑於docker-compose.yaml運行docker-compose up將產生如下:

$ docker-compose up 
Building webapp 
Step 1/1 : FROM hello-world 
latest: Pulling from library/hello-world 
5b0f327be733: Pull complete 
Digest: sha256:1f1404e9ea1a6665e3664626c5d2cda76cf90a4df50cfee16aab1a78f58a3f95 
Status: Downloaded newer image for hello-world:latest 
---> 05a3bd381fc2 
Successfully built 05a3bd381fc2 
Successfully tagged myusername/myimagename:1.0 
WARNING: Image for service webapp was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`. 
Creating dockercompose_webapp_1 ... 
Creating dockercompose_webapp_1 ... done 
Attaching to dockercompose_webapp_1 
webapp_1 | 
webapp_1 | Hello from Docker! 
webapp_1 | This message shows that your installation appears to be working correctly. 
webapp_1 | 
webapp_1 | To generate this message, Docker took the following steps: 
webapp_1 | 1. The Docker client contacted the Docker daemon. 
webapp_1 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 
webapp_1 | 3. The Docker daemon created a new container from that image which runs the 
webapp_1 |  executable that produces the output you are currently reading. 
webapp_1 | 4. The Docker daemon streamed that output to the Docker client, which sent it 
webapp_1 |  to your terminal. 
webapp_1 | 
webapp_1 | To try something more ambitious, you can run an Ubuntu container with: 
webapp_1 | $ docker run -it ubuntu bash 
webapp_1 | 
webapp_1 | Share images, automate workflows, and more with a free Docker ID: 
webapp_1 | https://cloud.docker.com/ 
webapp_1 | 
webapp_1 | For more examples and ideas, visit: 
webapp_1 | https://docs.docker.com/engine/userguide/ 
webapp_1 | 
dockercompose_webapp_1 exited with code 0 

$ docker ps -a 
CONTAINER ID  IMAGE      COMMAND     CREATED    STATUS      PORTS    NAMES 
da057afd3277  myusername/myimagename:1.0 "/hello"     3 minutes ago  Exited (0) 3 minutes ago      dockercompose_webapp_1 

$ ls 
Dockerfile   docker-compose.yaml 

正如你可以看到docker-compose up兩個內置容器啓動它。它也被相應地命名。因此,不需要同時使用docker-compose builddocker-compose up,因爲docker-compose up都將生成並啓動容器。最後,如果容器需要重建以任何理由,你可以簡單地運行docker-compose up --force-recreate將泊塢窗重建容器和附加構建標籤將重新創建圖像:docker-compose up --force-recreate --build

+0

問題nwa與Container Id設置可能性有關。 –

+0

我不同意。上面清楚地指出瞭如何標記圖像並使用標記的圖像。 'image:username/repository:tag' –

1

-t選項docker build沒有設置什麼稱爲CONTAINER ID。事實上,它與容器無關。 docker build的輸出是圖片,它是基於-t選項命名的。 docker build -t myorg:myimage .會創建一個名爲myorg:myimage的圖像,您可以使用後面的來構建容器,或者推送到碼頭註冊表,以便稍後使用它來構建容器。

碼頭構成中的等價物是docker-compose build,而不是docker-compose up。要在docker-compose版本中指定圖片標籤,您可以在撰寫文件的服務中使用buildimage標籤 - 在這種情況下,使用docker-compose build將根據build指令構建圖像,並使用image標籤。

+0

你不需要去'docker-compose build'然後'docker-compose up',因爲'docker-compose up'會建立容器,如果它已經被賦予該指令的話'docker-compose.yaml'。 –

+0

這是......真的。如果您運行'docker-compose up'或'docker run',並且目前機器上沒有容器所需的映像,則docker將通過一個進程嘗試獲取該映像。如果在yaml文件中有構建指令,它將執行的一件事是運行'docker-compose build'。但是,只有在圖像不存在的情況下才會執行此操作 - 如果在第一次啓動後更改了dockerfile,則必須顯式調用'build'以獲取所做的更改。他們真的是兩個單獨的命令,應該這樣想。 –

+0

這是不正確的,如果您在dockerfile中有任何更改,您只需運行docker-compose up --force-recreate來讓它找到所做的更改並重新構建映像,所以再次運行時不需要運行2當docker up命令覆蓋這兩個命令時。 https://docs.docker.com/compose/reference/up/ –