Utiliser des fichiers Dockerfiles personnalisés
Découvrez comment utiliser votre propre fichier Dockerfile personnalisé avec OCI Functions.
Lorsque vous créez ou déployez une fonction avec OCI Functions, une image Docker est créée et propagé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 kit de développement de projet Fn (kit de développement Functions), OCI Functions 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 build 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 élément func.yaml peut ressembler à :
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, OCI Functions utilise les paramètres du fichier func.yaml pour créer un fichier Dockerfile temporaire contenant les instructions à partir desquelles 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, OCI Functions supprime le fichier Dockerfile temporaire.
Si vous souhaitez davantage de contrôle sur l'image Docker créée, vous pouvez modifier le fichier Dockerfile créé par OCI Functions. Vous pouvez également créer votre propre fichier 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, OCI Functions utilise les instructions du fichier Dockerfile personnalisé pour créer l'image Docker.
Pour qu'OCI Functions utilise un fichier Dockerfile personnalisé lors de la création d'une image Docker, procédez comme suit :
-
Créez une copie du fichier Dockerfile à 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
.Vous devez nommer le fichier
Dockerfile
. -
Ouvrez le fichier nommé
Dockerfile
dans l'éditeur de votre choix.Par exemple, le fichier
Dockerfile
peut 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 dans Droits d'accès accordés aux conteneurs exécutant des fonctions) :groupadd --gid 1000 fn && \ adduser --uid 1000 --gid fn fn
Par 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 désormais utiliser le fichierDockerfile
en 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 build
oufn deploy
pour créer ou déployer la fonction.
OCI Functions utilise les instructions du fichier Dockerfile personnalisé (fichier nommé Dockerfile
) pour créer l'image Docker de la fonction et la propager 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 (reportez-vous à Spécification de l'architecture de calcul sur laquelle exécuter des fonctions).