Parece que esto es así? Conectamos fabric8-maven-plugin al proyecto y vamos: compilar, ejecutar la aplicación en OpenShift. Pero cuando estudié, quería comprender mejor este proceso, y luego quería más control y libertad sobre el proceso de construcción y despliegue de la aplicación en OpenShift. Por lo tanto, el siguiente escenario resultó con tales características.- Construyo el artefacto yo mismo, con mi herramienta (maven, gradle, etc.)
- Yo controlo la creación de Docker Image a través del Dockerfile
- El proceso de compilación e implementación en Openshift se configura en la plantilla, es decir cualquier especificación de contenedor, pod son personalizables.
- Por lo tanto, el proceso en sí puede transferirse a un ensamblaje externo, sistema de implementación
Por supuesto, para esto utilizo las funciones disponibles de OpenShift, que son abundantes.Entonces, tengo un artefacto java preparado, luego preparo un Dockerfile con las características y la funcionalidad que necesitoDockerfile
FROM openjdk
MAINTAINER Rylkov Alexander <arylkov@.>
COPY demo.springboot.mvn-0.0.1-SNAPSHOT.jar /deployments/app.jar
ENV JAVA_OPTS="$JAVA_OPTS -Xms500m -Xmx1024m"
EXPOSE 8080
EXPOSE 5005
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /deployments/app.jar" ]
Por lo tanto, habrá dos archivos en la carpeta: el artefacto y el Dockerfile.
La composición de los archivos es condicional, si, por ejemplo, en Dockerfile se necesitan archivos adicionales para la imagen de Docker, los agregamos aquí. Ahora, en el Dockerfile, se especifican la imagen básica de Java y mi aplicación de arranque Spring, dos puertos están abiertos, etc.En este paso, tenemos la opción / libertad en la herramienta para construir la aplicación y ensamblar la imagen del acoplador.Luego, preparo la plantilla OpenShift para la aplicación, esta operación puede ser de una sola vez, solo necesita ser parametrizada. Dado que puede contener todo lo posible para crear, iniciar y operar la aplicación, administraremos estos procesos a través de ella. Será bastante simple para mí y constará de las tres configuraciones más necesarias.- Imagestream
- Buildconfig
- DeploymentConfig
Plantilla java-app-samplekind: Template
apiVersion: v1
metadata:
labels:
app: java-app-sample
name: java-app-sample
annotations:
description: >-
This example shows how to create a simple Java application in openshift
tags: java
parameters:
- name: APP_NAME
description: application name
value: app-sample
required: true
objects:
- kind: ImageStream
apiVersion: v1
metadata:
name: "${APP_NAME}"
spec:
tags:
- from:
kind: DockerImage
name: 172.30.1.1:5000/myproject/${APP_NAME}:latest
name: latest
- kind: BuildConfig
apiVersion: v1
metadata:
name: "${APP_NAME}"
labels:
name: "${APP_NAME}"
spec:
source:
binary: {}
type: Binary
strategy:
type: Docker
output:
to:
kind: DockerImage
name: 172.30.1.1:5000/myproject/${APP_NAME}:latest
postCommit: {}
resources: {}
- kind: DeploymentConfig
apiVersion: v1
metadata:
name: "${APP_NAME}"
spec:
strategy:
type: Rolling
rollingParams:
updatePeriodSeconds: 1
intervalSeconds: 1
timeoutSeconds: 120
resources: {}
replicas: 1
selector:
app: "${APP_NAME}"
template:
metadata:
labels:
app: "${APP_NAME}"
spec:
containers:
- name: "${APP_NAME}"
image: 172.30.1.1:5000/myproject/${APP_NAME}:latest
ports:
- containerPort: 8080
protocol: TCP
- containerPort: 5005
protocol: TCP
env:
- name: TZ
value: Europe/Moscow
resources:
limits:
cpu: '0.5'
memory: 1000Mi
requests:
cpu: '0.2'
memory: 500Mi
imagePullPolicy: Always
restartPolicy: Always
dnsPolicy: ClusterFirst
triggers:
- type: ConfigChange
imageChangeParams:
automatic: true
containerNames:
- "${APP_NAME}"
from:
kind: ImageStreamTag
name: 172.30.1.1:5000/myproject/${APP_NAME}:latest
- type: ImageChange
status: {}
En la plantilla, algunos parámetros del contenedor se indican como un ejemplo, por ejemplo, recursos / límites, variable de entorno TZ, se especifica un parámetro de plantilla: nombre de la aplicación (APP_NAME). La dirección del acoplador del registro se especifica para la versión minishift (la uso localmente para el desarrollo 172.30.1.1/10000/myproject/) y otros.Pero para mi escenario, lo más importante se indica aquí - kind: BuildConfig
spec:
source:
binary: {}
type: Binary
strategy:
type: Docker
BuildConfig dice que la fuente serán los archivos binarios, y para administrar la estrategia de preparación de imágenes de Docker - Dockerfile (tipo: Docker) Creemosesta plantilla en OpenShift oc create -f template.yaml
Esta plantilla aparecerá en el directorio de plantillas (será posible organizar el proceso desde la consola de la interfaz de usuario web, pero no aquí).
Con esta plantilla, crearemos una aplicación (de hecho, esto es solo un nombre y no más)oc new-app java-app-sample -p APP_NAME=app-sample
especifique el nombre de la plantilla y el parámetro del nombre de la aplicación
Se han creado tres de mis configuraciones.Iniciamos el proceso de montaje y despliegue de la aplicación en el contenedor.>oc start-build app-sample --from-dir . --follow
Es importante ejecutar desde la carpeta donde se indican el archivo binario y el Dockerfile, solo el parámetro --from-dir indica que toda la carpeta estará preparada para cargar en OpenShift para construir e implementar la imagen en el registro de Docker. Hay otros parámetros de este comando, por ejemplo, del archivo.
Vemos que el contenido de la carpeta se cargó en OpenShift, que lanzó el proceso Docker para preparar la imagen para el Dockerfile y finalmente colocó la imagen en el registro de Docker.La aplicación comenzó
en la consola web de OpenShift Los parámetros del contenedor
especificados en la configuración especificada en la variable de entorno de configuración
en el registro
Por lo tanto, sin complementos adicionales, con el máximo control y libertad de elección, logramos colocar la aplicación en OpenShift.MaterialesInstalando Minishiftpara aprender sobre OpenShift, recomiendo comenzar con Minishift