Ajuste del servidor
Instalación de Docker Engine en el servidor
La sobrecarga de Docker en Linux es mínima. Docker en Mac se ejecuta en una máquina virtual Linux, mientras que en Linux utiliza directamente el kernel del host. Puedes leer más sobre esto aquí .
Dado que un pequeño ping es importante para nosotros, tiene sentido comprar un hosting en Moscú, pero no hay mucha diferencia.
Total: Linux, Moscú, las características dependen de sus necesidades.
Solo hay una tarifa económica ya preparada para esto en ruvds.com . También en ruvds.com es posible solicitar una configuración inmediatamente con Docker CE a bordo. Un poco, pero agradable.
Busque la contraseña e inicie sesión en la interfaz web de su alojamiento y conéctese.
A continuación, instale Docker. Hay una excelente instrucción aquí , a continuación daré brevemente los comandos de ella (si de repente no lo tiene
sudo
, no se olvide de instalarlo apt-get install sudo
de debajo 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
Revisemos el trabajo de Docker:
docker run hello-world
Generando claves
Primero necesitas generar claves SSL. Puedes seguir el camino fácil y difícil. Para obtener instrucciones sobre la ruta difícil (canónica), consulte la documentación de Docker . Pero la buena gente lo metió todo en un contenedor de menos de 10 MB.
Creemos una carpeta para el principio, donde almacenaremos todo. Las carpetas pueden ser cualquier cosa. El primero (
/etc/docker/ssl
) almacena las claves secretas, el segundo ( ~/.docker
) las claves de acceso.
sudo mkdir -p /etc/docker/ssl
mkdir -p ~/.docker
Primero, creemos certificados de cliente y CA en la carpeta local
docker run --rm -v ~/.docker:/certs \
paulczar/omgwtfssl
Creemos certificados de servidor utilizando la CA generada anteriormente. Especifica allí, separada por comas, la IP a través de la cual accederás al servidor. En nuestro caso, ¡no olvide especificar allí la IP de su 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
Configuración del demonio de la ventana acoplable
La tarea principal en esta etapa es enviar los argumentos de la línea de comando con los parámetros que necesitamos al iniciar Docker. No importa cómo lo hagas, en Ubuntu puedes hacerlo así:
1. Edita el archivo con
/etc/default/docker
tu editor favorito
nano /etc/default/docker
Y agregue la variable `DOCKER_OPTS` al final. No olvide insertar su IP externa allí
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. Agregue argumentos para iniciar el servicio. En Ubuntu, el archivo de parámetros de inicio es
/lib/systemd/system/docker.service
. Agregue una línea a la subsección [Service]
:
EnvironmentFile=/etc/default/docker
Y cambiamos el comando de lanzamiento uno al lado del otro:
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
Sí, el punto 1 era opcional, los argumentos del comando podrían insertarse aquí, pero hay muchos y es inconveniente tener un comando grande para ejecutar en el archivo de servicio.
3. Reinicie el demonio
sudo systemctl daemon-reload
sudo systemctl restart docker
4. Verifique en los registros del demonio que todo funciona:
journalctl -u docker.service -f
5. Intentemos conectarnos a través de tls:
export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker
docker info
¡Trabajando!
Configuración en el cliente
Antes de comenzar a configurar clientes, debe descargar la carpeta de certificados en su computadora. Puede hacer esto de cualquier manera conveniente. Por ejemplo, a través de `scp`:
En una máquina remota:
mkdir /tmp/cert-for-docker && cp -v ~/.docker/{ca,cert,key}.pem /tmp/cert-for-docker
En la máquina local:
scp -r root@YOUR_IP:/tmp/cert-for-docker ~/.docker
A continuación, use esta carpeta para configurar su cliente de Docker.
CLI de Mac OS
Aquí la configuración se reduce al hecho de que necesita registrar las variables en su entorno y todo funcionará. Sin embargo, surge la pregunta: “¿Dónde puedo conseguir un cliente desnudo? No necesitamos el cliente pesado oficial de 2GB que se envía con el motor Docker, ¿verdad? "
¡Hay una solucion! Modern Docker se ha dividido durante mucho tiempo en partes de cliente y servidor. Puede descargar binarios de cliente separados compilados para macos. La instrucción oficial está aquí , pero daré un breve extracto aquí:
1. Descargue los binarios más recientes o los correspondientes a su servidor (puede extraerlos con un comando
docker info
) del enlace y descomprímalos
2. Copie los binarios en la carpeta
/usr/local/bin/
para trabajar globalmente:
sudo cp docker/docker /usr/local/bin/
3. Registramos en
~/.bashrc
o las ~/.zshrc
variables de entorno necesarias. No olvide insertar su IP y ruta a la carpeta con certificados :
export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_CERT_PATH=PATH_TO_CERT
export DOCKER_TLS_VERIFY=1
4. Reinicie su computadora (Schaub seguro), verifique:
docker info
docker run hello-world
¡Belleza!
IDE de Jetbrains (PyCharm, IDEA, Android Studio, etc.)
Los estudios Jetbrains admiten Docker a través de tls listos para usar. Esta configuración se encuentra en
Preference->Build, Execution, Deployment->Docker->+
. Debe seleccionar TCP socket
e ingresar sus datos allí. Sin embargo, hay una trampa.
Si todo se hace según lo previsto, aparecerá un error:
Respuesta de error del demonio: el cliente envió una solicitud HTTP a un servidor HTTPS.O
errores bastante información de impresión
No se puede conectar: Estado 400: el cliente envió una solicitud HTTP a un servidor HTTPSEs necesario prescribir explícitamente a nuestro estudio qué protocolo usamos
https
:
TU_IP : 2376Todo debería funcionar bien después.
Bono (Portainer)
Para realizar un seguimiento eficaz de los contenedores en ejecución y ya utilizados, instalé Portainer en este servidor. Debe colocarse en dos líneas:
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
Después de eso, se
YOUR_IP:9000
mantendrá una hermosa interfaz web y podrá ver los contenedores en ejecución y muertos. ¿Recuerdas cómo empezamos hello-world
? Está aquí y puede limpiarlo directamente desde la interfaz.
El propio Portainer se puede conectar a cualquier máquina Docker y administrar los contenedores Docker de todas sus máquinas desde un solo lugar. La métrica (Grafana + Prometheus + Alerts) se puede configurar con la misma facilidad con dos comandos (no olvide instalar
gi
y docker-compose
):
git clone https://github.com/stefanprodan/dockprom && cd dockprom
ADMIN_USER=admin ADMIN_PASSWORD=admin docker-compose up -d
Solo para el almacenamiento necesita cambiar
sum(node_filesystem_free_bytes{fstype="aufs"})
asum(node_filesystem_free_bytes{fstype="ext4"})
Conclusión
Cuando compré una computadora portátil, no me entregué a la esperanza de que fuera suficiente para cualquier tarea, especialmente porque sería suficiente para mí para el desarrollo de Java / Android. Pero me sorprendió gratamente, hasta ahora todos mis proyectos, personales y de código abierto, vuelan en el IDE. Sin embargo, me di cuenta de que a pesar de todo mi amor por esta máquina de escribir, no acabaría con Docker. Estaba muy feliz de configurarlo una vez en un servidor Docker remoto. Durante el proceso de desarrollo, es absolutamente imperceptible que el servidor no sea local. No siento ninguna restricción, es lo mismo ejecutar Docker sin Internet antes de que tuviera poco sentido. En general, estoy muy satisfecho. -1 razón para comprar un portátil potente y pesado.
Además, la sobrecarga de Docker para Linux es mínima, por lo que puede alquilar un automóvil por 240 rublos por mes de RuVDS en la Federación de Rusia (y con un descuento usando el código de promoción HABR-10% e incluso menos) y no se preocupe por el ping y el impacto de las aplicaciones del servidor en la interfaz de usuario. Además, hay una IP externa (la capacidad de mostrar a los clientes y mantener la arena de desarrollo), una VPN privada y una confiabilidad de primera clase. En general, estoy satisfecho.
Recursos:
- Artículo de 2016 sobre personalización para CoreOS
- Docker Remote API sin cifrado
- Sitio de Docker y todos los recursos vinculados al artículo en sí