Gravação de vídeo de Docker para desenvolvedores Java webinar já está disponível:
Aqui estão as respostas para as perguntas feitas:
- O que você acha do Kubernetes em comparação com Docker e Docker Swarm? Kubernetes ou Docker Swarm? Qual caminho seguir?Depende ;)O Docker Swarm tem uma curva de aprendizado muito mais simples do que o Kubernetes. O Kubernetes é muito opinativo, mas pode ser muito poderoso quando você entende como ele funciona. Alguns dos pontos que vale a pena considerar são:
- Fácil de configurar/iniciar
- Necessidade de aprender novos conceitos ou alinhamento com o Docker
- Como ele pode ser alinhado com seu fluxo de trabalho atual?
- Mestre único ou múltiplo
- Suporte para várias nuvens
- Agrupamento em várias nuvens
- Aumento/diminuição de escala dinâmica
- Reprogramação de contêineres em caso de falha de nó/contêiner
- Estratégias de agendamento com capacidade de conexão (se você quiser ser sofisticado)
- Descoberta de serviços
- Volumes persistentes
Se essa pergunta foi feita há alguns meses, então Kubernetes teria sido a escolha óbvia. Mas o Docker Swarm está realmente lançando versões e recursos e está bem atualizado. Dê uma olhada em O Docker Swarm supera o desempenho do Kubernetes em escala. Hackernews também tem algumas discussões interessantes sobre esse tópico. Leia também Avaliação de plataformas de contêineres em escala.
Além disso, você também deve observar Mesos+Marathon ou DC/OS.
Aqui estão alguns blogs para começar:
- Qual é a prática recomendada para desenvolver em um contêiner do docker WildFly se você não quiser agrupar o arquivo WAR após cada alteração, mas usar um arquivo explodido para apenas reempacotar recursos estáticos, por exemplo? O Docker permite mapeamento de diretórios em seu sistema de arquivos como volumes no contêiner. Isso pode ser usado para desenvolver seu aplicativo em um contêiner do WildFly sem a necessidade de agrupar o WAR a cada alteração. Isso é explicado com mais detalhes em Implantar no WildFly Docker a partir do Eclipse.
- O IntelliJ Idea é compatível com a janela de encaixe nativa no Mac OS/Windows?Andrey: Ainda não, mas está no roteiro.
- Quais são os prós e os contras de fornecer uma variável de ambiente em vez de um link como consul:consul? Os Docker Links são legados e, portanto, as variáveis de ambiente e Rede Docker são a maneira recomendada de criar novos aplicativos. Leia mais detalhes em outra resposta abaixo.
- Como podemos anexar um depurador a um processo Java em execução em um contêiner? Leia este excelente artigo do blog de Daniel Bryant sobre Depuração de aplicativos Java em execução no Docker.
- Qual é a relação entre o Docker e o Vagrant? Ambos podem trabalhar juntos? O Docker é um substituto do Vagrant?O Docker e o Vagrant resolvem problemas diferentes. O Vagrant permite que você provisione máquinas virtuais independentemente da máquina host. Isso é feito com o uso de um hipervisor, como o VirtualBox. A definição da VM é armazenada em um arquivo
Vagrantfile
e define como configurar a VM e quais scripts devem ser usados para provisionar o ambiente. Essas VMs podem ser criadas no Linux, Windows ou Mac. O Docker permite a criação de contêineres. É uma tecnologia nativa do Linux baseada emlxc
e chegará ao Windows Server 2016 neste verão. O Docker para Mac oferece um ambiente de desenvolvimento para Mac.Vagrantfile
que provisiona o Ubuntu ou o CentOS usando o Virtual Box. Em seguida, executeapt get
ouyum install
para instalar o Docker Engine. Se uma nova versão do Docker Engine estiver disponível, você será responsável por atualizar também a imagem do Vagrant ou executar o script novamente. Outra opção é usar o Docker Machine e o driver do VirtualBox para criar uma máquina que terá o Docker Engine instalado. Omáquina de encaixe
O script tem comandos como upgrade, que simplesmente atualiza o Docker Engine. Algumas discussões mais interessantes estão em StackOverflow e QuoraPara tornar toda essa equação ainda mais interessante, O Vagrant pode ser apoiado por contêineres do Docker em vez de VMs! - A janela da ferramenta Docker está faltando no meu IntelliJ IDEA 15. O plug-in está instalado.Andrey: A janela de ferramentas separada foi adicionada na versão 2016.1. Antes disso, o Docker fazia parte da janela de ferramentas dos Servidores de aplicativos.
- É possível alterar o index.jsp e ver a alteração no navegador sem criar a imagem novamente? No espírito da ação de atualização de recursos no IntelliJ IDEA? Andrey: Parece uma ótima ideia. Envie-a como uma solicitação de recurso para o rastreador: https://youtrack.jetbrains.com/issues/IDEA.
- Há um aumento de desempenho no uso do xhyve/Hyper-V em relação ao VirtualBox? O Docker para Mac executa o Docker Engine na distribuição Alpine Linux em cima da Máquina Virtual xhyve para Mac OS X ou no Hyper-V no Windows.
Hypervisor.framework
no OS X 10.10+. Algumas das principais vantagens de usar uma tecnologia nativa em vez de um hipervisor Tipo 2 são a aparência nativa, o melhor desempenho e o melhor gerenciamento de volume. benchmarks de driver xhyve vs VirtualBox. Essa área está evoluindo rapidamente e fique de olho blog.docker.com para obter mais detalhes. - Em Docker ComposeComo faço para atualizar apenas um contêiner? Ele perde o "link" e eu preciso reimplantar tudo? Os links do Docker agora são legados. É altamente recomendável migrar seu aplicativo para usar Rede Docker. O Principal diferença entre links e redes são:
- Conecte os contêineres uns aos outros em diferentes hosts físicos ou virtuais
- Os contêineres que usam o Networking podem ser facilmente interrompidos, iniciados e reiniciados sem interromper as conexões com outros contêineres
- Não é necessário criar um contêiner antes de se vincular a ele. Com o Networking, os contêineres podem ser criados em qualquer ordem e descobrir uns aos outros usando seus nomes de contêineres
- Como é possível expor uma porta de host a um contêiner em execução no host? As portas em um contêiner são expostas no host usando
-p
com a execução do docker. As portas no host podem ser acessadas usando:
diretamente. - A imagem oficial do Java Docker (baseada no OpenJDK) não é certificada pelo TCK. O que você sugere nesse caso? O OpenJDK é a implementação de referência do Java SE e, portanto, é compatível com o TCK. Imagem oficial do Java Docker é baseado no OpenJDK.Azul Systems fornecer suporte comercial para o OpenJDK. Outra opção é usar Imagens do OpenJDK disponíveis nos sistemas da Azul. São compilações totalmente testadas e com compatibilidade verificada das versões mais recentes das plataformas OpenJDK 8, 7 e 6. A Oracle publica o Dockerfile para o JDK, mas não publica as imagens. Observe que essa definição usa
oraclelinux:latest
como a imagem base e você pode querer usarubuntu
,centos
oualpino
. Nesse caso, você pode criar seu próprio Dockerfile. Executando Java no Docker? Você está infringindo a lei fornece um bom resumo de por que a imagem baseada em Oracle JDK não deve ser enviada para o Docker Hub. - Como fazer com que um contêiner com o WildFly use um contêiner com o banco de dados em outro servidor? Links do Docker são legados e só permitem que os contêineres se comuniquem entre si no mesmo host. A maneira recomendada de dois contêineres se comunicarem é usando Redes DockerPor padrão, o cluster do Docker Swarm cria um rede de sobreposição que permite que vários contêineres se comuniquem entre hosts.Aplicativos com vários contêineres e vários hosts usando WildFly e Couchbase mostra como conectar o WildFly ao Couchbase, onde cada contêiner é executado em dois hosts separados em um cluster do Docker Swarm. Aqui está o arquivo Compose para referência:
123456789101112131415mycouchbase:nome_do_contêiner: "db"imagem: couchbase/servidorportos:- 8091:8091- 8092:8092- 8093:8093- 11210:11210mywildfly:imagem: arungupta/mosca selvagem-administradorambiente:- COUCHBASE_URI=dbportos:- 8080:8080- 9990:9990
Aqui estão mais algumas referências:
- Saiba tudo sobre o IntelliJ e o Docker em jetbrains.com/idea/docker/
- Workshop individualizado sobre Docker para desenvolvedores Java
- Docker para desenvolvedores Java Slides introdutórios
- Script para demonstração do Docker e do IntelliJ mostrado no vídeo
- Documentos do Docker
- Couchbase em contêineres