En una publicación anterior, hablé sobre cómo SSHeller lo ayuda a implementar rápida y fácilmente un servidor OpenVPN. En la versión 1.1.0 , se agregó otro complemento: Docker .
Quiero advertirle de inmediato que si sus manos están afiladas debajo de la consola, y controlar Docker a través de la línea de comando parece conveniente e intuitivo, no necesita leer más, no necesita escribir nada en los comentarios, ya sé que no necesita SSHeller.
¿Y quién lo necesita? En primer lugar, los desarrolladores de aplicaciones web, así como todos los que necesitan actualizar rápida y fácilmente algún tipo de servicio, ya sea un sitio web, un blog o un servicio de intercambio de archivos improvisado.
Como funciona
Necesitamos un servidor con casi cualquier distribución moderna de Linux. Pero, a diferencia de OpenVPN, para Docker recomendaría Debian 9
o Ubuntu 18.04
. Con Fedora
y Centos
cosas son un poco peores, ya que necesita instalar más paquetes, configurar la ejecución automática adicionalmente y trabajar con el almacenamiento es un poco diferente.
Lo más importante es que debe ser una máquina física o virtual, pero no un contenedor (LXC, OpenVZ no funcionará). Y necesitas acceso SSH. En la última publicación hay una descripción detallada de cómo registrar e iniciar el servidor en DigitalOcean y, al final, una instrucción un poco menos detallada para Linode. Ambos servicios ofrecen máquinas simples por $ 5 / mes y bonos al registrarse por enlace de referencia. Para empezar, esto será suficiente.
Una vez que tengamos la IP, el nombre de usuario y la contraseña del servidor, puede instalar SSHeller. Puede descargarlo de versiones en GitHub , hay versiones para macOS, Windows y Linux. Después de comenzar, agregue nuestro servidor, conéctese a él y vaya al complemento Docker .

Si Docker aún no está instalado en el servidor, puede hacerlo haciendo clic en el botón Install
.
En menos de un minuto, se completa la instalación, se abre un informe que puede no leer y cerrar, y en la ventana principal habrá una lista de contenedores, volúmenes y la forma de lanzamiento de un nuevo contenedor.

Funciones principales
Lanzamiento de contenedores
En la parte inferior del espacio de trabajo se encuentra el bloque de lanzamiento del nuevo contenedor. Muestra:
- volumen seleccionado de la lista anterior que se conectará al contenedor, si lo admite
- la contraseña que se establecerá en la aplicación en el contenedor, nuevamente, si es compatible
- selección de imagen de contenedor
- y selección de etiqueta de imagen
Puede elegir cualquier imagen oficial de Docker y algunas más. Su lista se encuentra en el archivo https://github.com/delfer/ssheller/blob/master/plugins/docker-profiles.json y en el momento de la publicación es:
- jwilder / nginx-proxy : Nginx configurado automáticamente para acceder a los contenedores a través de un nombre de dominio, no un puerto
- panubo / vsftpd - servidor FTP
- coderaiser / cloudcmd : interfaz WEB para acceder a archivos
- webdevops / php-apache-dev - construye módulos Apache + PHP + para desarrollo (muestra errores)
- webdevops / php-apache - construye módulos Apache + PHP + para "vender" (no muestra errores)
- webdevops / php-nginx-dev - construye módulos Nginx + PHP + para desarrollo (muestra errores)
- webdevops / php-nginx - construye módulos Nginx + PHP + para "vender" (no muestra errores)
La mayoría de los contenedores ignorarán el contenido del campo Contraseña , excepto los que figuran en docker-profiles.json (sección de parámetros ):
- panubo / vsftpd : contraseña para la conexión FTP como administrador
- coderaiser / cloudcmd : contraseña para iniciar sesión como administrador
- mysql / mariadb / postgres / influxdb - contraseña para conectarse a la base de datos db como administrador
- rabbitmq / couchdb / orientdb : contraseña para conectarse como administrador
Características importantes:
- Las etiquetas se cargan automáticamente después de seleccionar una imagen. Búsqueda disponible
- El contenedor estará disponible en el puerto indicado por su autor. Si el puerto está ocupado, se seleccionará el primer puerto libre.
- El contenedor estará disponible en el <nombre del contenedor>. <Dominio del servidor> si hay entradas correspondientes en el DNS
- Los volúmenes se crearán para el contenedor si fueron especificados por el autor de la imagen, o si se especifican en docker-profiles.json ( volúmenes de sección)
Consejos útiles:
- jwilder / nginx-proxy debe iniciarse primero para que ocupe el puerto 80
- panubo / vsftpd debe ejecutarse en último lugar, porque cuando se inicia, cambia los permisos de la carpeta para tener acceso completo a ella
- casi siempre es mejor usar una imagen con la etiqueta
alpine
o latest-alpine
: funcionan igual que las normales, pero se cargan mucho más rápido debido al menor peso - si necesita MySQL : use MariaDB mejor, a menos que, por supuesto, definitivamente no esté seguro de que MariaDB no sea adecuado para usted
- si ejecutas algo con PHP , entonces probablemente no necesites
fpm
, pero necesitas apache
Información adicional
Después de hacer clic en el botón RUN
, tan pronto como se inicie el contenedor, aparecerá una ventana de informe, en la que se indicará el docker run
completado. Ella contará muchas cosas interesantes sobre cómo está todo realmente organizado.
Acceso a nombres de dominio
Si ejecuta varios contenedores con una interfaz web, por ejemplo, Wordpress y NextCloud, y desea acceder a ellos no especificando una IP y un puerto, sino un nombre de dominio, entonces debe cumplir dos condiciones simples:
- Sé el primero en ejecutar jwilder / nginx-proxy
- Tener registro DNS comodín

Es decir si, por ejemplo, tiene el dominio example.com, debe agregarle un registro *
tipo A
y especificar la IP del servidor. En este caso, el contenedor de worpdress en ejecución estará disponible en http://wordpress.example.com
Y si no hay un dominio, no es un problema, puede usar el servicio nip.io , no necesita registrarse ni agregar entradas. Si, por ejemplo, su servidor tiene IP 172.104.129.183 , y jwilder / nginx-proxy y nextcloud se están ejecutando en él , este último estará disponible en http://nextcloud.172.104.129.183.nip.io
Ejecutar dos contenedores con un volumen.
A menudo sucede, por ejemplo, que un contenedor publica archivos ( nginx ), y el segundo descarga ( panubo / vsftpd ). O el segundo es necesario para ver / descargar el contenido del primero.
Por ejemplo, Jenkins después de comenzar solicita la contraseña registrada en el archivo.

- Lanzamiento Jenkins
jenkins_var_jenkins_home
su volumen jenkins_var_jenkins_home
- Especifique una contraseña para acceder
- Lanzar coderaiser / cloudcmd
- Abierto http: // coderaiser-cloudcmd . <dominio>, ingrese el nombre de usuario y la contraseña de
admin
del paso 3 - Miramos la contraseña de Jenkins


Interacciones de contenedores
Además, es posible que deba conectarse a otro desde un contenedor. Por ejemplo, WordPress durante la instalación le pedirá que especifique parámetros para conectarse a la base de datos: dirección del servidor ( host ) y puerto.
localhost
no funcionará para la interacción entre contenedores.
En general, debe especificar la dirección IP externa del servidor y el puerto que se muestra
antes de la flecha ( ->
) en la lista de contenedores. Para simplificar, host
agrega la capacidad de especificar solo la palabra host
lugar de la dirección IP del servidor.
Además de MySQL, PostgreSQL, MongoDB, Redis, memcached, Tomcat, InfluxDB, CouchDB, etc. pueden ser útiles.
Ejemplos de uso
Compartir archivos
- Ejecute nginx: alpine
- Ingrese la contraseña de administrador para la interfaz web
- Seleccione el volumen
nginx_usr_share_nginx_html
- Lanzar coderaiser / cloudcmd: latest-alpine
Ahora puede ir a http: // <dirección del servidor>: 8000 para descargar archivos con autorización, y los enlaces directos estarán disponibles a través de http: // <dirección del servidor> . Solo necesita especificar la ruta completa al archivo.
Wordpress
- Inventamos e ingresamos una contraseña para la base de datos
- Mariadb lanza
- Ejecute wordpress: apache
- Vamos a la dirección http: // <dirección del servidor> , comenzamos la instalación y especificamos los parámetros para conectarnos al DBMS:
- Nombre de la base de datos:
db
- Nombre de usuario:
admin
- Contraseña: la ingresada en el párrafo 1
- Servidor de bases de datos:
host
- Prefijo de tabla - Cualquiera
Lampara
- Inventamos e ingresamos una contraseña para la base de datos
- Mariadb lanza
- Ejecute webdevops / php-apache-dev: alpine
- Seleccionar volumen
webdevops-php-apache-dev_app
- Inventamos e ingresamos la contraseña para el servidor FTP
- Ejecute panubo / vsftpd
Ahora puede cargar archivos .php
a ftp: // <dirección del servidor> y ejecutarlos yendo a la dirección http: // <dirección del servidor>
PS
No todos los contenedores están disponibles en la aplicación, y algunos de los disponibles no funcionan sin configuraciones adicionales: edite el archivo en GitHub y envíe sus solicitudes de extracción. Si no sabe cómo, abra Issue . Esto te ayudará a desarrollar el proyecto.
Otras formas de apoyar el proyecto, así como una gran cantidad de información útil, se encuentran en el archivo README .