Em um post anterior, falei sobre como o SSHeller ajuda você a implantar rápida e facilmente um servidor OpenVPN. Na versão 1.1.0 , outro plug-in foi adicionado - Docker .
Quero avisar imediatamente que, se suas mãos estiverem afiadas no console, e o controle do Docker pela linha de comando parecer conveniente e intuitivo, você não precisará ler mais, não precisará escrever nada nos comentários, já sei que não precisa do SSHeller.
E quem precisa disso? Primeiro de tudo, os desenvolvedores de aplicativos da Web, bem como todos que precisam atualizar de forma rápida e fácil algum tipo de serviço, seja um site, um blog ou um serviço de compartilhamento de arquivos improvisado.
Como isso funciona
Precisamos de um servidor com quase qualquer distribuição moderna do Linux. Mas, diferentemente do OpenVPN, no Docker eu recomendaria o Debian 9
ou o Ubuntu 18.04
. Com o Fedora
e o Centos
coisas ficam um pouco piores, pois você precisa instalar mais pacotes, configurar a execução automática adicionalmente e trabalhar com o armazenamento é um pouco diferente.
O mais importante é que seja uma máquina física ou virtual, mas não um contêiner (o LXC, o OpenVZ não funcionará). E você precisa de acesso SSH. Na última publicação, há uma descrição detalhada de como registrar e iniciar o servidor no DigitalOcean e, no final, uma instrução um pouco menos detalhada para o Linode. Ambos os serviços oferecem máquinas simples por US $ 5 / mês e bônus ao se registrar por link de referência. Para começar, isso será suficiente.
Depois de termos o IP, o nome de usuário e a senha do servidor, você pode instalar o SSHeller. Você pode baixá-lo em versões no GitHub , existem versões para macOS, Windows e Linux. Após iniciar, adicione nosso servidor, conecte-se a ele e acesse o plug-in Docker .

Se o Docker ainda não estiver instalado no servidor, você poderá fazer isso clicando no botão Install
.
Em menos de um minuto, a instalação está concluída, um relatório é aberto e você pode não leia e feche e, na janela principal, haverá uma lista de contêineres, volumes e a forma de lançamento de um novo contêiner.

Funções principais
Lançamento de contêiner
Na parte inferior da área de trabalho está o bloco de lançamento do novo contêiner. Exibe:
- volume selecionado na lista acima que será conectado ao contêiner, se ele suportar
- a senha que será definida para o aplicativo no contêiner, novamente, se ele suportar
- seleção de imagem do contêiner
- e seleção de tag de imagem
Você pode escolher qualquer imagem oficial do Docker e mais algumas. Sua lista está definida no arquivo https://github.com/delfer/ssheller/blob/master/plugins/docker-profiles.json e, no momento da publicação, é:
- jwilder / nginx-proxy - Nginx configurado automaticamente para acessar contêineres através de um nome de domínio, não de uma porta
- panubo / vsftpd - servidor FTP
- coderaiser / cloudcmd - interface WEB para acessar arquivos
- webdevops / php-apache-dev - constrói módulos Apache + PHP + para desenvolvimento (exibe erros)
- webdevops / php-apache - constrói módulos Apache + PHP + para "venda" (não exibe erros)
- webdevops / php-nginx-dev - constrói módulos Nginx + PHP + para desenvolvimento (exibe erros)
- webdevops / php-nginx - constrói módulos Nginx + PHP + para "venda" (não exibe erros)
A maioria dos contêineres ignorará o conteúdo do campo Senha , exceto os listados em docker-profiles.json (seção de parâmetros ):
- panubo / vsftpd - senha para conexão FTP como administrador
- coderaiser / cloudcmd - senha para login como administrador
- mysql / mariadb / postgres / influxdb - senha para conectar-se ao banco de dados db como admin
- rabbitmq / couchdb / orientdb - senha para conectar como administrador
Características importantes:
- As tags são carregadas automaticamente após a seleção de uma imagem. Pesquisa disponível
- O contêiner estará disponível na porta indicada por seu autor. Se a porta estiver ocupada, a primeira porta livre será selecionada.
- O contêiner estará disponível no <nome do contêiner>. <Domínio do servidor> se houver entradas correspondentes no DNS
- Os volumes serão criados para o contêiner se forem especificados pelo autor da imagem ou se estiverem especificados em docker-profiles.json ( volumes de seção)
Dicas úteis:
- O jwilder / nginx-proxy precisa ser iniciado primeiro para ocupar a porta 80
- O panubo / vsftpd precisa ser executado por último, porque, quando iniciado, altera as permissões da pasta para ter acesso total a ela
- quase sempre é melhor usar uma imagem com a etiqueta
alpine
ou latest-alpine
- elas funcionam como as normais, mas carregam muito mais rapidamente devido ao menor peso - se você precisar do MySQL - use o MariaDB melhor, a menos que, é claro, não tenha certeza de que o MariaDB não é adequado para você
- se você executa algo com PHP , provavelmente não precisa de
fpm
, mas precisa de apache
Informações Adicionais
Após clicar no botão RUN
, assim que o contêiner for iniciado, uma janela de relatório será exibida, na qual o docker run
concluído será indicado. Ela vai contar muitas coisas interessantes sobre como tudo está realmente organizado.
Acesso a nomes de domínio
Se você executar vários contêineres com uma interface da web, por exemplo, Wordpress e NextCloud, e desejar acessá-los não especificando um IP e uma porta, mas por um nome de domínio, precisará cumprir duas condições simples:
- Seja o primeiro a executar jwilder / nginx-proxy
- Possui registro DNS curinga

I.e. se, por exemplo, você tiver o domínio example.com, precisará adicionar um registro *
tipo A
e especificar o IP do servidor. Nesse caso, o contêiner worpdress em execução estará disponível em http://wordpress.example.com
E se não houver domínio - não há problema, você pode usar o serviço nip.io - não é necessário registrar ou adicionar entradas. Se, por exemplo, seu servidor tiver IP 172.104.129.183 e o jwilder / nginx-proxy e o nextcloud estiverem em execução , o último estará disponível em http://nextcloud.172.104.129.183.nip.io
Executando dois contêineres com um volume
Muitas vezes acontece, por exemplo, que um contêiner publica arquivos ( nginx ) e o segundo é baixado ( panubo / vsftpd ). Ou o segundo é necessário para visualizar / baixar o conteúdo do primeiro.
Por exemplo, Jenkins , após iniciar, solicita a senha registrada no arquivo.

- Lançamento Jenkins
jenkins_var_jenkins_home
seu volume jenkins_var_jenkins_home
- Especifique uma senha para acesso
- Iniciar coderaiser / cloudcmd
- Aberto http: // coderaiser-cloudcmd . <domínio>, digite o login e a senha do
admin
na etapa 3 - Olhamos para a senha de Jenkins


Interações de contêiner
Além disso, pode ser necessário conectar-se a outro de um contêiner. Por exemplo, o wordpress durante a instalação solicitará que você especifique os parâmetros para conectar-se ao banco de dados: endereço do servidor ( host ) e porta.
localhost
não funcionará para interação entre contêineres.
Em geral, você precisa especificar o endereço IP externo do servidor e a porta exibida
antes da seta ( ->
) na lista de contêineres. Por uma questão de simplicidade, foi adicionada a capacidade, em vez do endereço IP do servidor, de especificar apenas a palavra host
.
Além do MySQL, PostgreSQL, MongoDB, Redis, memcached, Tomcat, InfluxDB, CouchDB, etc. podem ser úteis.
Exemplos de uso
Compartilhamento de arquivos
- Execute nginx: alpine
- Digite a senha do administrador para a interface da web
- Selecione o volume
nginx_usr_share_nginx_html
- Inicie o coderaiser / cloudcmd: latest-alpine
Agora você pode acessar http: // <endereço do servidor>: 8000 para baixar arquivos com autorização e links diretos estarão disponíveis em http: // <endereço do servidor> . Você só precisa especificar o caminho completo para o arquivo.
Wordpress
- Inventamos e inserimos uma senha para o banco de dados
- Mariadb lança
- Execute o wordpress: apache
- Vamos para o endereço http: // <endereço do servidor> , iniciamos a instalação e especificamos os parâmetros para conectar ao DBMS:
- Nome do banco de dados:
db
- Nome de usuário:
admin
- Senha - aquela digitada no parágrafo 1
- Servidor de Banco de Dados:
host
- Prefixo da tabela - Qualquer
Lamp
- Inventamos e inserimos uma senha para o banco de dados
- Mariadb lança
- Execute webdevops / php-apache-dev: alpine
- Selecione o volume
webdevops-php-apache-dev_app
- Nós inventamos e inserimos a senha do servidor FTP
- Execute panubo / vsftpd
Agora você pode enviar arquivos .php
para ftp: // <endereço do servidor> e executá-los acessando o endereço http: // <endereço do servidor>
PS
Nem todos os contêineres estão disponíveis no aplicativo, e alguns deles não funcionam sem configurações adicionais - edite o arquivo no GitHub e envie suas solicitações de recebimento. Se você não sabe como - abra o Issue . Isso irá ajudá-lo a desenvolver o projeto.
Outras maneiras de apoiar o projeto, bem como muitas informações úteis, estão no arquivo README .