Openshift: ¿puedo ejecutar comandos de cliente de Docker (como Docker Push) usando Openshift?
Trabajar con Docker es fácil cuando tienes un host Docker. Conecta el cliente Docker con un host Docker (motor). Entonces, el proceso de compilar e implementar una imagen acoplable (compleja) es como esta serie de comandos en un servidor de compilación Jenkins:
Maven clean install => construye su archivo WARDocker build => crea una imagen Wildfly con el archivo de aplicación WAR en ellaDocker tag => etiqueta la nueva imagenDocker push => empuja la imagen a un docker hubDocker run ==> instala y ejecuta la imagen del acoplador en el host del acoplador.@Can Openshift Starter funciona así? La respuesta: sí, esta opción de Contenedor como servicio (CAAS) es posible.
SOLUCIÓN COMPLETAEn los pasos a continuación, creo un proyecto que consta de 2 imágenes: MySql y SpringBoot / Angular / Hibernate alojadas en un servidor Wildfly. Por supuesto, esto también funciona para una aplicación Spring Boot JAR.
Empiezas con un demonio local Docker corriendo. Hago esto a través de Docker Quickstart Terminal. Utilizo minishift solo para pruebas locales, así que no en este caso.
Paso : cree un proyecto y 1 aplicación MySql.
Esto se puede hacer sin docker a través de la consola web Openshift. También puede usar el comando oc new-proect.
Paso : inicie sesión en el proyecto openshift. En la consola en línea, haga clic en el signo de interrogación en la barra superior (a la derecha). Seleccione las "herramientas de línea de comandos". Puede copiar el comando de inicio de sesión en su portapapeles a través del icono a la derecha.
$ oc login etc ... (primer icono del portapapeles, pegue todo el comando).
Paso : Inicie sesión en su registro de docker. En este caso, compruebe la consola en línea de OpenShift.
$ docker login -u `oc whoami` -p` oc whoami --show-token` Registry.pro-us-east-1.openshift.com
NOTICE: ¡no use el número de puerto como el sufijo openshift: 443 !!
Etapa 4 Cree y etiquete la imagen localmente o en el servidor de compilación (con Jenkins).
$ mvn clean install, que crea el archivo war. Puede llamarlo 'ROOT.war'.
$ docker build -t myproject / mynewapplication: último.
$ docker etiqueta myproject / mynewapplication Registry.pro-us-east-1.openshift.com/myproject/mynewapplicatio
Si escribe el nombre incorrecto, en un momento no podrá empujar la imagen. Así que no (!) Escriba pro-us-east1. Es pro-us-east-1, etc.
El Dockerfile está en la carpeta del proyecto Maven. El dockerfile podría verse así:
FROM jboss/wildfly
COPY target/ROOT.war /opt/jboss/wildfly/standalone/deployments/
# CMD - use the default wildfly default start command
Una forma mucho más eficiente de memoria es:
FROM openjdk:8-jdk-alpine
ENV JAVA_APP_JAR your.jar
ENV AB_OFF true
EXPOSE 8080
ADD target/$JAVA_APP_JAR /deployments/
CMD ["java","-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-jar","/deployments/your.jar"]
La última configuración mejorará / equilibrará tremendamente su uso de memoria. ¡En mi caso, reducir el contenedor en ejecución de 600MB + a alrededor de 300MB funcionando bien!
Paso 5: Empuje la imagen al repositorio interno de Openshift
$ docker push register.pro-us-east-1.openshift.com/myproject/mynewapplicatio
Paso 6-A.1: Cree una aplicación a partir de una imagen acoplable existente mediante el comando de nueva aplicación. Haga esto solo la primera vez mientras crea la aplicación.
$ oc nueva aplicación mynewapplication
--> Found image 1233123223 (About an hour old) in image stream "myproject/mynewapplication" under tag "latest" for "mynewapplication" ... This image will be deployed in deployment config "mynewapplication" --> Creating resources ... deploymentconfig "mynewapplication" created service "mynewapplication" created --> Success Run 'oc status' to view your app.
Paso 6-A.2: Consulte a continuación para inicializar la configuración. Al implementar una aplicación / servidor web, cree una 'ruta' para que el cliente pueda acceder a la aplicación. Debido a que esto debe hacerse una vez, configurarlo a través de la consola (Aplicaciones> Rutas) es una buena alternativa. Ejemplo: haga que su sitio web esté disponible solo para https con el certificado estándar: (1) use el puerto de destino 8080 (donde se está ejecutando su servidor http), (2) marque la opción Ruta segura, (3) mantenga la terminación TLS en Edge. (4) para tráfico inseguro, elija la opción Redirigir y ... cree su ruta. Espere un momento y tendrá un sitio HTTPS.
Paso 6-B: Al actualizar la imagen: al insertar una imagen existente, no habrá una nueva implementación automática. Puede iniciar una nueva implementación a través de la consola en línea o mediante el comando:
$ oc despliegue más reciente dc / mynewapplication-n myproject
Para verificar los resultados de la implementación:
$ oc status
Para verificar si, p. el contenedor MySql se está ejecutando:
$ oc consigue vainas
Obtenga el nombre del contenedor Mysql.
$ oc rsh nombre-contenedor
Y verá si realmente puede acceder a la base de datos.
Observaciones: Comentario para usar Openshift Starter / Original: Es bueno que Openshift nos permita experimentar con la versión gratuita Starter. Por supuesto, hay un conjunto de restricciones en el uso de los recursos. Tenga cuidado de establecer la estrategia de implementación para 'Recreate'. La estrategia 'Rolling' es, por supuesto, mejor, pero consume muchos más recursos. Establezco el tamaño de recurso para la imagen MySql típicamente en 420Mi y la imagen Wildfly en 600Mi. ¡Las sugerencias son bienvenidas!