Uso de Dockerfiles personalizados
Descubra cómo utilizar su propio archivo Dockerfile personalizado con OCI Functions.
Al crear o desplegar una función con OCI Functions, se crea una imagen de Docker y se transfiere a un registro de Docker. Al igual que con cualquier imagen de Docker, las instrucciones para crear la imagen están incluidas en un archivo Dockerfile.
Si la función se escribe en uno de los idiomas soportados por un FDK de Fn Project (Functions Development Kit), OCI Functions utiliza la configuración runtime:
, build_image:
y run_image:
en un archivo func.yaml para determinar el idioma (y, por lo tanto, las dependencias de tiempo de compilación y tiempo de ejecución) que se va a incluir en la imagen de Docker. Si utiliza el comando fn init
para inicializar la función, se crea un archivo func.yaml. Por ejemplo, func.yaml podría ser:
schema_version: 20180708
name: hello-java
version: 0.0.1
runtime: java
build_image: fnproject/fn-java-fdk-build:jdk11-1.0.116
run_image: fnproject/fn-java-fdk:jre11-1.0.116
cmd: com.example.fn.HelloFunction::handleRequest
Al crear o desplegar la función, OCI Functions utiliza la configuración del archivo func.yaml para crear un Dockerfile temporal que contenga las instrucciones a partir de las que se cree la imagen de Docker. Por ejemplo, a continuación se muestra un archivo Dockerfile temporal.
FROM fnproject/fn-java-fdk-build:jdk11-1.0.116 as build-stage
WORKDIR /function
ENV MAVEN_OPTS -Dhttp.proxyHost= -Dhttp.proxyPort= -Dhttps.proxyHost= -Dhttps.proxyPort= -Dhttp.nonProxyHosts= -Dmaven.repo.local=/usr/share/maven/ref/repository
ADD pom.xml /function/pom.xml
RUN ["mvn", "package", "dependency:copy-dependencies", "-DincludeScope=runtime", "-DskipTests=true", "-Dmdep.prependGroupId=true", "-DoutputDirectory=target", "--fail-never"]
ADD src /function/src
RUN ["mvn", "package"]
FROM fnproject/fn-java-fdk:jre11-1.0.116
WORKDIR /function
COPY --from=build-stage /function/target/*.jar /function/app/
CMD ["com.example.fn.HelloFunction::handleRequest"]
Una vez creada la imagen de Docker, OCI Functions suprime el archivo Dockerfile temporal.
Si desea tener más control sobre la imagen de Docker creada, puede modificar el archivo Dockerfile que crea OCI Functions. También puede crear su propio archivo Dockerfile por completo desde cero. En ambos casos, el archivo Dockerfile se denomina "archivo Dockerfile personalizado". Este flujo de trabajo se conoce a veces como Bring-Your-Own-Dockerfile o BYOD.
Al crear o desplegar la función, OCI Functions utiliza las instrucciones del archivo Dockerfile personalizado para crear la imagen de Docker.
Para que OCI Functions utilice un archivo Dockerfile personalizado al crear una imagen de Docker:
-
Realice una copia del Dockerfile que desea utilizar como Dockerfile personalizado.
-
Guarde el archivo nuevo en el directorio que contiene el archivo func.yaml.
-
Asigne al nuevo archivo el nombre
Dockerfile
.Tenga en cuenta que debe asignar al archivo el nombre
Dockerfile
. -
Abra el archivo denominado
Dockerfile
en un editor de su elección.Por ejemplo, el archivo
Dockerfile
puede contener las siguientes líneas para instalar Oracle Instant Client desde una imagen base de oraclelinux:7-slim:FROM oraclelinux:7-slim RUN yum -y install oracle-release-el7 oracle-nodejs-release-el7 && \ yum-config-manager --disable ol7_developer_EPEL && \ yum -y install oracle-instantclient19.3-basiclite nodejs && \ rm -rf /var/cache/yum WORKDIR /function ADD . /function/ RUN npm install CMD exec node func.js
-
Incluya las siguientes líneas en el archivo denominado
Dockerfile
(como se describe en Permisos otorgados a funciones en ejecución de contenedores):groupadd --gid 1000 fn && \ adduser --uid 1000 --gid fn fn
Por ejemplo:
FROM oraclelinux:7-slim RUN yum -y install oracle-release-el7 oracle-nodejs-release-el7 && \ yum-config-manager --disable ol7_developer_EPEL && \ yum -y install oracle-instantclient19.3-basiclite nodejs && \ rm -rf /var/cache/yum && \ groupadd --gid 1000 fn && \ adduser --uid 1000 --gid fn fn WORKDIR /function ADD . /function/ RUN npm install CMD exec node func.js
-
Guarde el archivo denominado
Dockerfile
. Ahora puede utilizar el archivoDockerfile
como archivo Dockerfile personalizado. -
En el archivo func.yaml, cambie el valor del parámetro
runtime:
aruntime: docker
.Por ejemplo, si el archivo func.yaml contiene
runtime: java
, cámbielo aruntime: docker
. -
Utilice los comandos de
fn build
ofn deploy
para crear o desplegar la función.
OCI Functions utiliza las instrucciones del archivo Dockerfile personalizado (el archivo denominado Dockerfile
) para crear la imagen de Docker para la función y transferirla al registro de Docker. El uso del comando fn build
o fn deploy
garantiza que la imagen incluya las dependencias necesarias para que sea compatible con la unidad de la aplicación (consulte Especificación de la arquitectura de recursos informáticos en la que ejecutar funciones).