2017-09-13 2 views
0

Lorsque je cours docker build je peux utiliser -t ou --tag paramètre à deterimne CONTAINER ID.Comment définir l'ID du conteneur lorsque j'exécute le docker-composer?

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

Mais quand je l'utilise docker-compose alors je ne peux pas trouver cette option.

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

Je sais que docker-composer peut créer de nombreux conteneurs, alors peut-être il y a possibilité de jeu CONTAINER ID dans docker-compose.yml? Comment faire ça?

+0

Impossible de définir l'ID du conteneur, il est possible de définir l'étiquette d'image du docker. tag n'est rien d'autre que le versionnement de l'image. Voici la commande pour créer l'image avec tag. $ docker construction -t nom_fichier: tag cible-dossier-chemin –

+0

Ceci est incorrect si vous utilisez docker-compose, vous pouvez spécifier le nom de l'image lors de la construction et même la version. vous n'avez pas non plus besoin d'exécuter une commande supplémentaire pour construire, build est disponible dans 'docker-compose up' si le fichier docker-composer est structuré avec une commande build. –

Répondre

0

Vous le spécifiez dans votre fichier Docker Compose que docker-compose s'exécute par ex. docker-compose.yaml.

La construction et le déploiement fonctionnent de la même manière. Définissez simplement le nom de l'image et le tag en tant que subset of build ou spécifiez un fichier docker distinct.

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

Étant donné que docker-compose.yaml en cours d'exécution docker-compose up produirait les éléments suivants:

$ 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 

Comme vous pouvez le voir docker-compose up construit à la fois le conteneur et a commencé. Il est également nommé en conséquence. Donc, il n'est pas nécessaire d'aller à la fois docker-compose build et puis docker-compose up car docker-compose up à la fois construire et démarrer le conteneur. Enfin, si le conteneur doit être reconstruit pour une raison quelconque, vous pouvez simplement lancer docker-compose up --force-recreate qui docker pour reconstruire le conteneur et annexant la balise build recréerait l'image: docker-compose up --force-recreate --build

+0

La question nwa est liée à la possibilité de définition du conteneur. –

+0

je ne suis pas d'accord. Ce qui précède indique clairement comment marquer une image et utiliser une image étiquetée. 'image: nom d'utilisateur/repository: tag' –

1

l'option -t pour docker build fait quelque chose de pas défini appelé CONTAINER ID. En fait, cela n'a rien à voir avec un conteneur. La sortie de docker build est une image , nommée en fonction de l'option -t. docker build -t myorg:myimage . crée une image appelée myorg:myimage que vous pouvez utiliser plus tard pour créer des conteneurs, ou sur le répertoire du docker pour l'utiliser ultérieurement pour créer un conteneur.

L'équivalent dans docker-composer est docker-compose build, et non docker-compose up. Pour spécifier une balise d'image dans la construction docker-composer, vous utilisez à la fois les balises build et image sur un service dans le fichier de composition. Dans ce cas, l'utilisation de docker-compose build génère l'image basée sur la directive build et marque la sortie à l'aide de la commande image tag.

+0

vous n'avez pas besoin d'aller' docker-compose build' puis 'docker-compose up' car' docker-compose up' va construire le conteneur si on lui a donné cette directive le 'docker-compose.yaml'. –

+0

C'est ... vrai. Si vous exécutez 'docker-compose up 'ou' docker run' et que l'image requise pour un conteneur n'existe pas actuellement sur la machine, docker passera par un processus pour essayer d'obtenir cette image. Une des choses qu'il fera est d'exécuter 'docker-compose build' s'il y a une directive de construction dans le fichier yaml. Cependant, il ne le fait que si l'image n'existe pas. Si vous avez changé votre dockerfile après la première fois que vous l'avez lancé, vous devrez explicitement appeler 'build' pour obtenir les changements ramassés. Ils sont vraiment deux commandes distinctes et doivent être considérés comme tels. –

+0

est incorrect, si vous avez des changements dans votre dockerfile vous avez seulement besoin d'exécuter 'docker-composer up --force-recreate' pour qu'il trouve les changements et reconstruire l'image, donc encore une fois, il n'y a pas besoin de lancer 2 commandes lorsque la commande docker up couvre les deux. https://docs.docker.com/compose/reference/up/ –