Qu'est-ce que `docker-compose up`?

introduction

Je pense qu'il y a beaucoup de gens qui connaissent Docker et qui sont au niveau de "Est-il temps de développer en utilisant le conteneur d'image Docker du nombre de multiples?"

J'en fais partie, mais même si j'essayais de l'utiliser en lisant la référence, cela ne pouvait pas être bien géré et le développement a été retardé.

Cette fois, j'ai écrit un commentaire sur docker-compose up, qui est le plus basique de tous, et j'y suis assez accro si je ne le comprends pas.

Je suis aussi un débutant, donc j'apprécierais que vous signaliez des erreurs.

supposition

Cette fois, dans le but d'expliquer la commande, supposons un projet simple qui démarre un conteneur.

Structure du répertoire

.
├── Dockerfile
├── docker-compose.yml
├── file.txt
└── file2.txt

Contenu de Dockerfile et docker-compose.yml

FROM ubuntu:18.04

WORKDIR work

ADD ./file.txt /work/file.txt

CMD ["ls"]

docker-compose.yml


version: '3.7'
services:
  test:
    build: .
    image: my-alpine-image
    container_name: my-apline

Let's "up" pour le moment

Voyons ce qui se passe lorsque nous essayons docker-compose up avec la configuration ci-dessus.

$ docker-compose up
Building test
//L'étape est omise

Successfully built ff8e7d96a995
Successfully tagged my-alpine-image:latest
WARNING: Image for service test was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating my-apline ... done
Attaching to my-apline
my-apline | file.txt
my-apline exited with code 0

Les deux points suivants sont importants ici.

En d'autres termes, c'est la même chose que «docker run». Vérifions en fait l'image et le conteneur.

$ docker ps -a     
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
6d14fde119f0        my-alpine-image     "/bin/bash"              10 minutes ago      Exited (0) 10 minutes ago                       my-apline
$ REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
my-alpine-image            latest              ff8e7d96a995        10 minutes ago        64.2MB

Vous pouvez également voir que la console contient file.txt, car elle imprime my-apline | file.txt.

Ce comportement ne change pas même s'il s'agit d'un conteneur multiple. Par conséquent, ** Ici, "Je vois, je comprends Docker Compose", ce qui conduit à un malentendu après cela. ** **

Modifiez le Dockerfile et essayez de le télécharger à nouveau

Ensuite, modifions le Dockerfile afin que test2.txt soit également inclus dans le conteneur.

FROM ubuntu:18.04

WORKDIR work

ADD ./file.txt /work/file.txt
ADD ./file2.txt /work/file2.txt

CMD ["ls"]

Maintenant, essayez d'exécuter docker-compose up. Ensuite, le résultat était le suivant.

$ docker-compose up
Starting my-apline ... done
Attaching to my-apline
my-apline | file.txt
my-apline exited with code 0

Comme vous pouvez le voir dans la sortie, le conteneur (my-apline) ne contient pas test2.txt.

Parce que cette fois, docker-compose up est ** parce que je viens de démarrer le conteneur que j'ai créé précédemment **.

Pour preuve, nous pouvons voir qu'il n'y a pas de différence lors de la vérification du conteneur et de l'image.

$ docker ps -a     
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
6d14fde119f0        my-alpine-image     "/bin/bash"              10 minutes ago      Exited (0) 10 minutes ago                       my-apline
$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
my-alpine-image            latest              ff8e7d96a995        10 minutes ago        64.2MB

Comment ça aurait dû être "up"

Alors, comment obtenir un conteneur avec la dernière image, y compris test2.txt? ** **

La bonne réponse est d'utiliser l'option --build, qui indique explicitement que vous voulez" reconstruire ".

$ docker-compose up --build
Building test
//L'étape est omise

Successfully built 7218cdd4f17a
Successfully tagged my-alpine-image:latest
Recreating my-apline ... done
Attaching to my-apline
my-apline | file.txt
my-apline | file2.txt
my-apline exited with code 0

Vous pouvez voir que l'image et le conteneur sont nouveaux.

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
28c26826bf20        my-alpine-image     "/bin/bash"              2 minutes ago       Exited (0) 2 minutes ago                       my-apline
$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
my-alpine-image            latest              7218cdd4f17a        About a minute ago   64.2MB

Sommaire

En résumé, la commande docker-compose up est

J'ai découvert que.

Au fait, si vous docker-compose up sans image, vous verrez la console.

Image for service test was built because it did not already exist. To rebuild this image you must use docker-compose build or docker-compose up --build. (Il a été construit parce que l'image de test de service n'existait pas. Vous devez utiliser docker-compose build ou docker-compose up --build pour reconstruire cette image.)

J'ai remarqué que c'était fini. Si vous lisez correctement l'anglais, vous n'avez pas à vous perdre autant.

J'espère que cela sera utile pour les personnes qui ont trébuché dans des endroits similaires!

Recommended Posts

Qu'est-ce que `docker-compose up`?
La composition du docker de Laradock est de la mousse
Qu'est-ce que Docker-compose (mémorandum personnel)
Qu'est-ce que Cubby
Qu'est-ce qui est nul? ]
Qu'est-ce que 'java
Qu'est-ce que Keycloak
Qu'est-ce que maven?
Qu'est-ce que Jackson?
Qu'est-ce que soi
Qu'est-ce que Jenkins
Qu'est-ce que ArgumentMatcher?
Qu'est-ce que IM-Juggling?
Qu'est-ce que les paramètres
Qu'est-ce que SLF4J?
Qu'est-ce que la façade? ??
Qu'est-ce que Java <>?
Qu'est-ce que Gradle?
Qu'est-ce que POJO
Qu'est-ce que 'java
Qu'est-ce que centOS
Qu'est-ce que RubyGem?
Qu'est-ce que before_action?
Qu'est-ce que Docker
Qu'est-ce que Byte?
Qu'est-ce que Tomcat
Qu'est-ce que l'assemblage Maven?
Qu'est-ce qu'un constructeur
Qu'est-ce que vue cli
Qu'est-ce qu'une interface
Qu'est-ce que le moi de Ruby?
Qu'est-ce que le codage en dur?
Qu'est-ce qu'un flux
Qu'est-ce que l'attr_accessor de Ruby?
Qu'est-ce que l'encapsulation Java?
Qu'est-ce qu'une permission refusée?
Qu'est-ce que le contrôle d'instance?
Qu'est-ce qu'un initialiseur?
Qu'est-ce que Spring Tools 4
Qu'est-ce qu'un opérateur?
Qu'est-ce que l'orientation objet?
Qu'est-ce que le @VisibleForTesting de Guava?
Qu'est-ce qu'un modèle MVC?
Qu'est-ce qu'une annotation?
Qu'est-ce que la technologie Java?
Qu'est-ce que Java API-java
Qu'est-ce que @ (variable d'instance)?
Qu'est-ce que l'artefact de Gradle?
Qu'est-ce que l'audit JPA?
[Java] Qu'est-ce que flatMap?
Qu'est-ce qu'un servlet?
Qu'est-ce que le développement Web?
[Java] Qu'est-ce que ArrayList?
Qu'est-ce que HttpSession session = request.getSession ();