Utilisation de fichiers Dockerfiles personnalisés
Découvrez comment utiliser votre propre fichier Dockerfile personnalisé avec le service des fonctions pour OCI.
Lorsque vous créez ou déployez une fonction avec le service des fonctions pour OCI, une image Docker est créée et poussée vers un registre Docker. Comme pour toute image Docker, les instructions de création de l'image sont contenues dans un fichier Dockerfile.
Si la fonction est écrite dans l'un des langages pris en charge par un FDK Fn Project (Functions Development Kit), le service des fonctions pour OCI utilise les paramètres runtime:, build_image: et run_image: dans un fichier func.yaml pour déterminer la langue (et donc les dépendances de compilation et d'exécution) à inclure dans l'image Docker. Si vous utilisez la commande fn init pour initialiser la fonction, un fichier func.yaml est créé pour vous. Par exemple, un fichier func.yaml peut se présenter comme suit :
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
Lorsque vous créez ou déployez la fonction, le service des fonctions pour OCI utilise les paramètres du fichier func.yaml pour créer un fichier Dockerfile temporaire contenant les instructions à utiliser pour créer l'image Docker. Par exemple, un fichier Dockerfile temporaire est affiché ci-dessous.
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"]
Après avoir créé l'image Docker, le service des fonctions pour OCI supprime le fichier Dockerfile temporaire.
Si vous voulez avoir plus de contrôle sur l'image Docker créée, vous pouvez modifier le fichier Dockerfile créé par le service des fonctions pour OCI. Alternativement, vous pouvez créer votre propre Dockerfile entièrement à partir de zéro. Dans les deux cas, le fichier Dockerfile est appelé " fichier Dockerfile personnalisé ". Ce flux de travail est parfois appelé Bring-Your-Own-Dockerfile ou BYOD.
Lorsque vous créez ou déployez la fonction, le service des fonctions pour OCI utilise les instructions du fichier Dockerfile personnalisé pour créer l'image Docker.
Pour que le service des fonctions pour OCI utilise un fichier Dockerfile personnalisé lors de la création d'une image Docker :
-
Faites une copie du fichier Dockerfile que vous souhaitez utiliser en tant que fichier Dockerfile personnalisé.
-
Enregistrez le nouveau fichier dans le répertoire contenant le fichier func.yaml.
-
Attribuez au nouveau fichier le nom
Dockerfile.Notez que vous devez nommer le fichier
Dockerfile. -
Ouvrez le fichier nommé
Dockerfiledans l'éditeur de votre choix.Par exemple, le fichier
Dockerfilepeut contenir les lignes suivantes pour installer Oracle Instant Client à partir d'une image de base 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 -
Incluez les lignes suivantes dans le fichier nommé
Dockerfile(comme décrit sous Autorisations accordées aux fonctions d'exécution des conteneurs) :groupadd --gid 1000 fn && \ adduser --uid 1000 --gid fn fnPar exemple :
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 -
Enregistrez le fichier nommé
Dockerfile. Vous pouvez maintenant utiliser le fichierDockerfileen tant que fichier Dockerfile personnalisé. -
Dans le fichier func.yaml, remplacez la valeur du paramètre
runtime:parruntime: docker.Par exemple, si le fichier func.yaml contient
runtime: java, remplacez-le parruntime: docker. -
Utilisez les commandes
fn buildoufn deploypour créer ou déployer la fonction.
OCI Functions utilise les instructions du fichier Dockerfile personnalisé (le fichier nommé Dockerfile) pour créer l'image Docker pour la fonction et la pousser vers le registre Docker. L'utilisation de la commande fn build ou fn deploy garantit que l'image inclut les dépendances nécessaires pour la rendre compatible avec la forme de l'application (voir Spécification de l'architecture de calcul sur laquelle exécuter les fonctions).