Aplicabilidade do Docker [fechada]

1

Neste momento, tenho um monte de servidores com apenas O / S e software instalados. Os componentes principais são nginx, php-fpm, ffmpeg e algumas outras ferramentas para codificação de vídeo. Cada hora via servidor cron agarra tarefas de conversão de vídeo, faz-as e coloca vídeos prontos para uma pasta que. O Nginx transmite esses vídeos.

O problema é que estou muito cansado de sincronizar os arquivos de configuração, atualizar o software, o software de descriptografia que foi compilado a partir de fontes, etc.

Então eu acho que antes de tudo eu preciso separar arquivos de vídeo e todo o software que eu tenho. Arquivos de vídeo ainda serão mantidos em um servidor. Para um contêiner de software, eu poderia usar o OpenVZ. Então, se eu precisar atualizar o software eu apenas atualizar meu modelo OpenVZ e copiar esta imagem + vzctl destroy + vzctl criar em cada servidor. Mas eu não vejo boas maneiras de montar diretório com arquivos de vídeo para o container OpenVZ. Eu afino o NFS, o iSCSI é ruim no meu caso, pois deveria haver maneiras melhores.

É por isso que achei que talvez o Docker seja uma boa solução. Tanto quanto eu sei, permite montar recursos externos para ele usando apenas uma chamada cli. Então, eu apenas construo um contêiner docker com nginx + fpm + ferramentas de vídeo, distribuo-o entre meus servidores e participo o armazenamento local com arquivos.

Por favor, escreva sua opinião. É uma boa maneira de usar o docker ou a minha solução é outra coisa?

    
por Radium 21.09.2014 / 21:22

2 respostas

1

É difícil responder isso sem mais informações. Mas aqui estão algumas ideias para um mundo Docker.

Primeiro, eu tentaria pensar nas imagens e contêineres do Docker mais como aplicativos do que nas VMs. Gerencie separadamente a infraestrutura do host dos contêineres do Docker. Pode ser perfeitamente aplicável executar o Puppet ou o Chef nos hosts para gerenciar seus contêineres e dependências do Docker. Quando você chega a um mundo totalmente contêiner, você realmente simplifica seus hosts executando uma plataforma como o CoreOS. Mas eu provavelmente não começaria com o CoreOS se você estivesse entrando no Docker.

Separe seus aplicativos e arquivos de vídeo (que você já mencionou). Crie contêineres 'somente de dados' que persistem arquivos de vídeo nos hosts. Eu gosto de usar a imagem tianon/true Docker para isso. Execute a imagem com um volume que pode persistir:

docker run -d --name videodata -v /videodata tianon/true

Parece que em breve você terá pelo menos uma outra imagem para o seu contêiner nginx, PHP-FPM e ffmpeg. No entanto, eu provavelmente tentaria separar esses componentes em imagens separadas. Você pode ter um contêiner PHP-FPM que executa seu código e expõe uma porta ou soquete para o nginx a ser usado para proxy reverso. Esse contêiner também usaria --volumes-from para montar a pasta /videodata persistente.

docker run -d --name application --volumes-from videodata myorg/myappimage

Então você pode ter uma imagem nginx que utiliza o DNS do link do Docker para acessar o PHP-FPM:

docker run -d --name web -p 80:80 --link application:phpfpm myorg/mynginximage

Na configuração do nginx, você pode acessar diretamente o nome DNS phpfpm para resolver o endereço IP do contêiner do aplicativo.

A próxima expansão disso seria cada vez mais na descoberta de serviços. Você pode substituir a imagem do nginx por um dispositivo como o link para adicionar e remover automaticamente os contêineres de aplicativos à medida que eles forem indo e vindo. p>

Uma vez que você começa a entrar em um mundo Docker de vários hosts, ferramentas e conceitos como diretórios de serviços ( link ), embaixadores ( link ), registro de serviço dinâmico em diretórios ( link ) e balanceamento de carga ( link ) será mais interessante.

Portanto, para responder à sua pergunta, acredito que você tenha casos de uso válidos para o Docker. Mas eu não acho que mixar o OpenVZ e o Docker seja uma boa ideia. Você provavelmente quer um ou outro.

    
por 24.09.2014 / 20:55
0

Acho que você está procurando ferramentas de gerenciamento de configuração, como Puppet, Chef, Ansible ou CFEngine.

Com essas ferramentas, você cria modelos de configuração, que podem ser aplicados a vários servidores.

Basicamente, quando você faz o seu sistema de configuração no sistema de gerenciamento de configuração, você executa um único comando em todos os servidores, o que aplica a configuração.

    
por 22.09.2014 / 00:14

Tags