
Ajuste do servidor
Instalando Docker Engine no servidor
A sobrecarga do docker no Linux é mínima. O Docker no Mac é executado em uma máquina virtual Linux, enquanto no Linux ele usa diretamente o kernel do host. Você pode ler mais sobre isso aqui .
Como um pequeno ping é importante para nós, faz sentido comprar um hosting em Moscou, mas não há muita diferença.
Total: Linux, Moscou, as características dependem de suas necessidades.
Existe apenas uma tarifa pré-fabricada barata para isso em ruvds.com . Também em ruvds.com é possível solicitar uma configuração imediatamente com Docker CE a bordo. Uma bagatela, mas legal.
Procure uma senha e faça login na interface web de sua hospedagem e conecte-se.


Em seguida, instale o Docker. Há uma excelente instrução aqui , abaixo darei brevemente os comandos a partir dela (se de repente você não tiver
sudo
, não se esqueça de instalá-la apt-get install sudo
por baixo su
):
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Vamos verificar o trabalho do docker:
docker run hello-world

Gerando chaves
Primeiro você precisa gerar chaves SSL. Você pode seguir o caminho fácil e difícil. Para obter instruções sobre o caminho físico (canônico), consulte a documentação do Docker . Mas boas pessoas colocaram tudo em um contêiner de <10 MB.
Vamos criar uma pasta para o início, onde guardaremos tudo. As pastas podem ser qualquer coisa. O primeiro (
/etc/docker/ssl
) armazena as chaves secretas, o segundo ( ~/.docker
) as chaves de acesso.
sudo mkdir -p /etc/docker/ssl
mkdir -p ~/.docker
Primeiro, vamos criar certificados de cliente e CA na pasta local
docker run --rm -v ~/.docker:/certs \
paulczar/omgwtfssl
Vamos criar certificados de servidor usando a CA gerada acima. Especifique ali, separado por vírgulas, o IP por meio do qual você acessará o servidor. No nosso caso, não se esqueça de especificar aí o IP do seu servidor!
sudo cp ~/.docker/ca.pem /etc/docker/ssl/ca.pem
chown -R $USER ~/.docker
docker run --rm -v /etc/docker/ssl:/server \
-v ~/.docker:/certs \
-e SSL_IP=127.0.0.1,172.17.8.101,YOUR_IP \
-e SSL_DNS=docker.local -e SSL_KEY=/server/key.pem \
-e SSL_CERT=/server/cert.pem paulczar/omgwtfssl
Configurando o docker daemon
A principal tarefa neste estágio é enviar os argumentos da linha de comando com os parâmetros de que precisamos ao iniciar o docker. Como você faz isso não é importante, no Ubuntu você pode fazer assim:
1. Edite o arquivo com o
/etc/default/docker
seu editor favorito
nano /etc/default/docker
E adicione a variável `DOCKER_OPTS` ao final. Não se esqueça de inserir seu IP externo lá
DOCKER_OPTS="-H=YOUR_IP:2376 -H unix:///var/run/docker.sock --tlsverify --tlscacert=/etc/docker/ssl/ca.pem --tlscert=/etc/docker/ssl/cert.pem --tlskey=/etc/docker/ssl/key.pem"
2. Adicione argumentos para iniciar o serviço. No Ubuntu, o arquivo de parâmetro de inicialização é
/lib/systemd/system/docker.service
. Adicione uma linha à subseção [Service]
:
EnvironmentFile=/etc/default/docker
E mudamos o comando de inicialização lado a lado:
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
Sim, o ponto 1 era opcional, os argumentos do comando poderiam ser inseridos aqui, mas são muitos e é inconveniente ter um comando grande para rodar no arquivo de serviço.
3. Reinicie o daemon
sudo systemctl daemon-reload
sudo systemctl restart docker
4. Verifique nos logs do daemon se tudo funciona:
journalctl -u docker.service -f

5. Vamos tentar conectar via tls:
export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker
docker info

Trabalhando!
Configurando no cliente
Antes de iniciar a configuração dos clientes, você precisa baixar a pasta de certificados para o seu computador. Você pode fazer isso de qualquer maneira conveniente. Por exemplo, via `scp`:
Em uma máquina remota:
mkdir /tmp/cert-for-docker && cp -v ~/.docker/{ca,cert,key}.pem /tmp/cert-for-docker
Na máquina local:
scp -r root@YOUR_IP:/tmp/cert-for-docker ~/.docker
Em seguida, use esta pasta para configurar seu cliente docker.
Mac OS CLI
Aqui a configuração se resume ao fato de que você precisa registrar as variáveis em seu ambiente e tudo funcionará. No entanto, surge a pergunta: “Onde posso conseguir um cliente nu? Não precisamos do cliente oficial de peso pesado de 2 GB que vem com o Docker Engine, precisamos? "
Existe uma solução! O Docker moderno há muito foi dividido em partes de cliente e servidor. Você pode baixar binários de cliente separados compilados para macos. As instruções oficiais estão aqui , mas darei um pequeno trecho aqui:
1. Baixe os binários mais recentes ou aqueles correspondentes ao seu servidor (você pode puxá-los com um comando
docker info
) do link e descompactar
2. Copie os binários para a pasta
/usr/local/bin/
para funcionar globalmente:
sudo cp docker/docker /usr/local/bin/
3. Registramos em
~/.bashrc
ou as ~/.zshrc
variáveis de ambiente necessárias. Não se esqueça de inserir seu IP e o caminho para a pasta com os certificados :
export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_CERT_PATH=PATH_TO_CERT
export DOCKER_TLS_VERIFY=1
4. Reinicie o computador (Schaub com certeza), verifique:
docker info
docker run hello-world

Beleza!
IDEs Jetbrains (PyCharm, IDEA, Android Studio etc)
Os estúdios Jetbrains suportam docker via tls fora da caixa. Esta configuração está localizada em
Preference->Build, Execution, Deployment->Docker->+
. Você precisa selecionar TCP socket
e inserir seus dados lá. No entanto, há um porém.

Se tudo for feito conforme planejado, ocorrerá um erro:
Resposta de erro do daemon: o cliente enviou uma solicitação HTTP para um servidor HTTPS.Ou
erros bonita impressão informação
Não é possível conectar: Status 400: o cliente enviou uma solicitação HTTP para um servidor HTTPSÉ necessário prescrever explicitamente ao nosso estúdio o protocolo que usamos
https
:
YOUR_IP : 2376Tudo deve funcionar bem depois.
Bônus (Portainer)
A fim de controlar com eficácia os containers em execução e já usados, instalei o Portainer neste servidor. Deve ser colocado em duas linhas:
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
Depois disso, uma
YOUR_IP:9000
bela interface da web será suspensa e você poderá ver os contêineres em execução e desativados. Lembra como começamos hello-world
? Ele está aqui e você pode limpá-lo diretamente na interface.

O próprio Portainer pode ser conectado a qualquer máquina Docker e gerenciar os contêineres docker de todas as suas máquinas em um só lugar. A métrica (Grafana + Prometheus + Alertas) pode ser configurada facilmente com dois comandos (não se esqueça de instalar
gi
e docker-compose
):
git clone https://github.com/stefanprodan/dockprom && cd dockprom
ADMIN_USER=admin ADMIN_PASSWORD=admin docker-compose up -d


Apenas para armazenamento, você precisa mudar
sum(node_filesystem_free_bytes{fstype="aufs"})
parasum(node_filesystem_free_bytes{fstype="ext4"})

Conclusão
Quando comprei um laptop, não cedi à esperança de que fosse suficiente para mim para qualquer tarefa, principalmente porque seria o suficiente para o desenvolvimento Java / Android. Mas fiquei agradavelmente surpreso, até agora todos os meus projetos, pessoais e apenas de código aberto, voam no IDE. No entanto, percebi que, apesar de todo o meu amor por esta máquina de escrever, ela não tiraria o Docker. Fiquei muito feliz por tê-lo configurado uma vez em um servidor docker remoto. Durante o processo de desenvolvimento, é absolutamente imperceptível que o servidor não seja local. Não sinto nenhuma restrição, executar o Docker sem a Internet da mesma forma antes de fazer pouco sentido. Em geral, estou muito satisfeito. -1 razão para comprar um laptop poderoso e pesado.
Além disso, a sobrecarga do Docker para Linux é mínima, então você pode alugar um carro por 240 rublos por mês na RuVDS na Rússia (e com um desconto usando o código promocional HABR-10% e até menos) e não se preocupe com o ping e o impacto dos aplicativos de servidor na IU. Além disso, há um IP externo (a capacidade de mostrar aos clientes e manter o desenvolvedor), uma VPN privada e confiabilidade de primeira classe. No geral, estou satisfeito.
Recursos:
- Artigo de 2016 sobre personalização para CoreOS
- API Docker Remote sem criptografia
- Site do Docker e todos os recursos vinculados no próprio artigo

