Cómo ahorrar dinero en la compra de una computadora portátil: Docker Remote API a través de TLS

Más recientemente, decidí comprar una computadora portátil personal. El desarrollo de un proyecto de código abierto ( aplicación para Flipper ) y un cambio de lugar de trabajo me obligaron a dejar de usar mi computadora portátil de trabajo para fines personales. Y aquí lo que ya era una lástima para dar el costo de la soportado Hyndai Solaris para un ordenador portátil (en el trabajo tengo una configuración de extremo superior de 16 "MacBook). Por lo tanto, se decidió moderar mi ardor y tomar el pícaro MacBook Air más barata de 13" por 80 mil rublos. Sin embargo, en Mac, Docker consume una cantidad exorbitante de recursos, por lo que después de la compra tuve que pensar en cómo resolver este problema. Inmediatamente surgió la idea de llevar Docker Engine a algún lugar en línea. Dicho y hecho.











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 sudode 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/dockertu 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 ~/.bashrco las ~/.zshrcvariables 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 sockete 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.

errores bastante información de impresión
O

No se puede conectar: ​​Estado 400: el cliente envió una solicitud HTTP a un servidor HTTPS
Es necesario prescribir explícitamente a nuestro estudio qué protocolo usamos https:

TU_IP : 2376
Todo 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:9000mantendrá 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:












All Articles