Construcción de imágenes con Dockerfile en línea
En este tipo de construcción vamos a tener el contenido del fichero Dockerfile
dentro de la definición del objeto BuildConfig.
Vamos a ver dos ejemplos:
Ejemplo 1: BuildConfig con un Dockerfile inline
Partimos de la definición de un BuildConfig que tenemos en el fichero bc-dockerfile1.yaml
:
apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
labels:
app: app7
name: app7
spec:
failedBuildsHistoryLimit: 5
output:
to:
kind: ImageStreamTag
name: imagen-app7:latest
runPolicy: Serial
source:
dockerfile: |
FROM centos:centos7
CMD echo 'Hola, estás probando un dockerfile inline' && exec sleep infinity
type: dockerfile
strategy:
dockerStrategy:
type: Docker
successfulBuildsHistoryLimit: 5
triggers:
- type: ConfigChange
- imageChange: {}
type: ImageChange
Creamos el objeto BuildConfig, creando en primer lugar la ImageStream que hemos indicado como salida:
oc create is imagen-app7
oc apply -f bc-dockerfile1.yaml
oc get bc
NAME TYPE FROM LATEST
app7 Docker Dockerfile 1
oc get build
NAME TYPE FROM STATUS STARTED DURATION
app7-1 Docker Dockerfile Running 24 seconds ago
Una vez creada la nueva imagen, podemos desplegarla y comprobar la salida del Pod que se ha creado:
oc new-app imagen-app7 --name=app7
oc logs deploy/app7
Hola, estás probando un dockerfile inline
Ejemplo 2: BuildConfig con un Dockerfile sustituido
En este caso partimos de un repositorio Git donde tenemos una aplicación y un Dockerfile
para la creación de la imagen. Sin embargo, vamos a partir del código de ese repositorio pero vamos a sustituir el Dockerfile
por uno que tenemos definido en el BuildConfig. Para ello partimos de la definición que tenemos en el fichero bc-dockerfile2.yaml
:
apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
labels:
app: app8
name: app8
spec:
failedBuildsHistoryLimit: 5
output:
to:
kind: ImageStreamTag
name: imagen-app8:latest
runPolicy: Serial
source:
type: Git
git:
uri: https://github.com/josedom24/osv4_python
dockerfile: |
FROM bitnami/python:3.7
WORKDIR /app
COPY app /app
RUN pip install --upgrade pip
RUN pip3 install --no-cache-dir -r requirements.txt
ENV PROVINCIA=cadiz
EXPOSE 8000
CMD [ "python3", "app.py"]
strategy:
dockerStrategy:
type: Docker
successfulBuildsHistoryLimit: 5
triggers:
- type: ConfigChange
- imageChange: {}
type: ImageChange
No se va a ejecutar el fichero Dockerfile
que se encuentra en el repositorio Git, se va a sustituir por el que hemos escrito en la definición anterior. Por la tanto la variable PROVINCIA
no será sevilla
, tendrá el valor de cadiz
, además se ha utilizado otra versión de la imagen base para construir la imagen.
Y ejecutamos:
oc create is imagen-app8
oc apply -f bc-dockerfile2.yaml
oc new-app imagen-app8 --name=app8
oc expose service app8
Y accedemos a la aplicación: