Esta página ha sido traducida por una máquina.

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:

  1. Realice una copia del Dockerfile que desea utilizar como Dockerfile personalizado.

  2. Guarde el archivo nuevo en el directorio que contiene el archivo func.yaml.

  3. Asigne al nuevo archivo el nombre Dockerfile.

    Tenga en cuenta que debe asignar al archivo el nombre Dockerfile.

  4. 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
  5. 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
  6. Guarde el archivo denominado Dockerfile. Ahora puede utilizar el archivo Dockerfile como archivo Dockerfile personalizado.

  7. En el archivo func.yaml, cambie el valor del parámetro runtime: a runtime: docker.

    Por ejemplo, si el archivo func.yaml contiene runtime: java, cámbielo a runtime: docker.

  8. Utilice los comandos de fn build o fn 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).

¿Le ha resultado útil este artículo?