De acordo com a documentação do arquivo de composição do Docker Compose :
depends_on
- Expressar dependência entre serviços.links
- Vincule a contêineres em outro serviço e também expresse dependência entre serviços da mesma maneira que depende_on .
Eu não entendo o propósito de vincular a outros contêineres, portanto a diferença entre duas opções ainda parece bastante difícil para mim.
Seria muito mais fácil se houver um exemplo, mas não consigo encontrar nenhum.
Notei que, quando vinculo o contêiner B ao contêiner A, o contêiner B será "pingável" dentro do shell do contêiner A.
Corri ping B
dentro do container A bash
e obtive resultados como este (apenas para referência, imagem da Internet)
docker
docker-compose
dockerfile
itsjef
fonte
fonte
--link
sinalizador agora é um recurso herdado obsoleto do Docker e a documentação sugere "Ele pode ser removido eventualmente" links do contêiner Docker: Legacy . É recomendável não usar o recurso de redes do Docker ou o método de composição do Docker. Achei que isso seria útil para quem está aprendendo sobre esse recurso.Respostas:
A postagem precisa de uma atualização após a
links
opção ser descontinuada.Basicamente,
links
não é mais necessário porque seu objetivo principal, tornar o contêiner acessível por outro adicionando variável de ambiente, está incluído implicitamentenetwork
. Quando os contêineres são colocados na mesma rede, eles podem ser alcançados usando o nome do contêiner e outro alias como host.Pois
docker run
,--link
também está obsoleto e deve ser substituído por uma rede personalizada.depends_on
expressa a ordem inicial (e implicitamente a ordem de puxar a imagem), o que foi um bom efeito colateral delinks
.fonte
Esta resposta é para a versão 2 do docker-compose e também funciona na versão 3
Você ainda pode acessar os dados quando usar o Depend_on.
Se você olhar para o docker docs Docker Compose e Django , ainda poderá acessar o banco de dados assim:
Qual é a diferença entre links e depende_on?
links:
Quando você cria um contêiner para um banco de dados, por exemplo:
E você pode encontrar
Isso significa que você pode conectar o banco de dados a partir da porta 32777 do host local (3306 no contêiner), mas essa porta será alterada toda vez que você reiniciar ou remover o contêiner. Portanto, você pode usar links para garantir que você sempre se conecte ao banco de dados e não precise saber qual é a porta.
depende de:
Encontrei um bom blog de Giorgio Ferraris Docker-compose.yml: de V1 a V2
E
Atualizar
depende de
Expressar dependência entre serviços, que tem dois efeitos:
docker-compose up
iniciará os serviços em ordem de dependência. No exemplo a seguir, db e redis serão iniciados antes da web.docker-compose up SERVICE
incluirá automaticamente as dependências do SERVIÇO. No exemplo a seguir, a docker-compose up web também criará e iniciará db e redis.Exemplo simples:
fonte
https://docs.docker.com/compose/compose-file/compose-versioning/
docker run
aqui é completamente irrelevante, não é assim que o contêiner será executado de qualquer maneira. o que estou perdendo?docker run
exemplo quer mostrar por que precisamos usar o Depend_on ou os links, em vez de codificar um número de porta. Apenas porque, se você não o especificar, ele será alterado sempre. Eu acho que isso permitirá que as pessoas entendam mais sobre dependências ou links.[Atualizar em setembro de 2016]: esta resposta foi planejada para o arquivo de composição docker v1 (conforme mostrado pelo exemplo de arquivo de composição abaixo). Para a v2, consulte a outra resposta de @Windsooon.
[Resposta original]:
É bastante claro na documentação.
depends_on
decide a dependência e a ordem de criação do contêiner elinks
não apenas isso, mas tambémPor exemplo, supondo o seguinte
docker-compose.yml
arquivo:Com
links
, o código internoweb
poderá acessar o banco de dados usandodb:5432
, assumindo que a porta 5432 esteja exposta nadb
imagem. Sedepends_on
fosse usado, isso não seria possível, mas a ordem de inicialização dos contêineres estaria correta.fonte
links
oudepends_on
ou qualquer um deles está ok? Meusdocker-compose.yml
usosdepends_on
e coisas atuais parecem funcionar bem. :)name:port
entãodepends_on
está ok.db
noweb
nome de host usando bancos de dados.