Oi Cesar, tudo bem? Deixa eu tentar te explicar...
1 - Cada entrada do YML abaixo de service é conhecida como serviço, mas para cada um deles você precisa informar o nome do serviço, por isso entra o node-1, 2 e 2. Neste caso, o nome do serviço está fazendo uma referência a tecnologia usada, que é o node.js
Mas você também pode dar um nome para o container, então por isso chamamos cada container de alura-books-1, 2 e 3.
Então na rede em si, o node-1 e o alura-books-1 são basicamente o mesmo container. Porém, na prática, o que temos é um serviço (node-1) que cria containers de nome "alura-books-1".
Você consegue listar os containers usando o comando docker container ls
. Os serviços via docker service ls
.
2 - Por que você (até onde sei) só pode dizer que um serviço depende de outro serviço. Um serviço não pode depender de um container específico.
3 - Você pode sim dar um nome para a rede passando o parâmetro name
:
networks:
production-network:
driver: bridge
name: producao
4 - Isso, não precisa dos dois, apenas um deles. Quando você põe o Dockerfile, o compose faz o build da imagem e cria os containers. Se você usa apenas o image, ele baixa a imagem antes de criar o container.