{"id":72235,"date":"2023-08-23T15:37:08","date_gmt":"2023-08-23T14:37:08","guid":{"rendered":"https:\/\/kinqsta.com\/fr\/?p=72235&#038;preview=true&#038;preview_id=72235"},"modified":"2023-08-25T16:14:24","modified_gmt":"2023-08-25T15:14:24","slug":"kinsta-docker","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/","title":{"rendered":"Comment Kinsta a am\u00e9lior\u00e9 l&rsquo;exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production"},"content":{"rendered":"<p>Chez Kinsta, nous avons des projets de toutes tailles pour l&rsquo;h\u00e9bergement d&rsquo;applications, l&rsquo;h\u00e9bergement de bases de donn\u00e9es et l&rsquo;h\u00e9bergement WordPress infog\u00e9r\u00e9.<\/p>\n<p>Avec les solutions d&rsquo;h\u00e9bergement cloud de Kinsta, vous pouvez <a href=\"https:\/\/sevalla.com\/application-hosting\/\">d\u00e9ployer des applications<\/a> dans un certain nombre de langages et de frameworks, tels que NodeJS, PHP, Ruby, Go, Scala et Python. Avec un fichier Docker, vous pouvez d\u00e9ployer n&rsquo;importe quelle application. Vous pouvez connecter votre d\u00e9p\u00f4t Git (h\u00e9berg\u00e9 sur GitHub, GitLab ou Bitbucket) pour d\u00e9ployer votre code directement sur Kinsta.<\/p>\n<p>Vous pouvez <a href=\"https:\/\/sevalla.com\/database-hosting\/\">h\u00e9berger des bases de donn\u00e9es MariaDB, Redis, MySQL et PostgreSQL<\/a> pr\u00eates \u00e0 l&#8217;emploi, ce qui vous permet de vous concentrer sur le d\u00e9veloppement de vos applications plut\u00f4t que de vous pr\u00e9occuper des configurations d&rsquo;h\u00e9bergement.<\/p>\n<p>Et si vous choisissez notre <a href=\"https:\/\/kinqsta.com\/fr\/hebergement-wordpress\/\">h\u00e9bergement WordPress infog\u00e9r\u00e9<\/a>, vous b\u00e9n\u00e9ficiez de la puissance des machines Google Cloud C2 sur leur r\u00e9seau Premium et de la s\u00e9curit\u00e9 int\u00e9gr\u00e9e Cloudflare, ce qui fait de vos sites WordPress les plus rapides et les plus s\u00fbrs du march\u00e9.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Surmonter le d\u00e9fi du d\u00e9veloppement d&rsquo;applications Cloud-Natives au sein d&rsquo;une \u00e9quipe distribu\u00e9e<\/h2>\n<p>L&rsquo;un des plus grands d\u00e9fis du d\u00e9veloppement et de la maintenance d&rsquo;applications cloud-natives au niveau de l&rsquo;entreprise est d&rsquo;avoir une exp\u00e9rience coh\u00e9rente tout au long du cycle de d\u00e9veloppement. C&rsquo;est encore plus difficile pour les entreprises distantes avec des \u00e9quipes distribu\u00e9es travaillant sur diff\u00e9rentes plateformes, avec des configurations diff\u00e9rentes et une communication asynchrone. Nous devons fournir une solution coh\u00e9rente, fiable et \u00e9volutive qui fonctionne pour :<\/p>\n<ul>\n<li>Les d\u00e9veloppeurs et les \u00e9quipes d&rsquo;assurance qualit\u00e9, quel que soit leur syst\u00e8me d&rsquo;exploitation, cr\u00e9ent une configuration simple et minimale pour d\u00e9velopper et tester des fonctionnalit\u00e9s.<\/li>\n<li>Les \u00e9quipes DevOps, SysOps et Infra, pour configurer et maintenir les environnements de staging et de production.<\/li>\n<\/ul>\n<p>Chez Kinsta, nous nous appuyons fortement sur <a href=\"https:\/\/kinqsta.com\/fr\/blog\/qu-est-ce-que-docker\/\">Docker<\/a> pour cette exp\u00e9rience coh\u00e9rente \u00e0 chaque \u00e9tape, du d\u00e9veloppement \u00e0 la production. Dans cet article, nous vous guidons \u00e0 travers :<\/p>\n<ul>\n<li>Comment tirer parti de Docker Desktop pour accro\u00eetre la productivit\u00e9 des d\u00e9veloppeurs.<\/li>\n<li>Comment nous construisons des images Docker et les poussons vers Google Container Registry via des pipelines CI avec CircleCI et GitHub Actions.<\/li>\n<li>Comment nous utilisons les pipelines de CI pour promouvoir des changements incr\u00e9mentaux vers la production en utilisant des images Docker, Google Kubernetes Engine et Cloud Deploy.<\/li>\n<li>Comment l&rsquo;\u00e9quipe QA utilise de mani\u00e8re transparente des images Docker pr\u00e9-construites dans diff\u00e9rents environnements.<\/li>\n<\/ul>\n<h2>Utilisation de Docker Desktop pour am\u00e9liorer l&rsquo;exp\u00e9rience des d\u00e9veloppeurs<\/h2>\n<p>L&rsquo;ex\u00e9cution d&rsquo;une application en local exige que les d\u00e9veloppeurs pr\u00e9parent m\u00e9ticuleusement l&rsquo;environnement, installent toutes les d\u00e9pendances, configurent les serveurs et les services et s&rsquo;assurent qu&rsquo;ils sont correctement configur\u00e9s. Lorsque vous ex\u00e9cutez plusieurs applications, cela peut s&rsquo;av\u00e9rer fastidieux, en particulier lorsqu&rsquo;il s&rsquo;agit de projets complexes comportant de nombreuses d\u00e9pendances. Lorsque vous ajoutez \u00e0 cette variable plusieurs contributeurs disposant de plusieurs syst\u00e8mes d&rsquo;exploitation, le chaos s&rsquo;installe. Pour l&rsquo;\u00e9viter, nous utilisons Docker.<\/p>\n<p>Avec Docker, vous pouvez d\u00e9clarer les configurations de l&rsquo;environnement, installer les d\u00e9pendances et construire des images avec tout ce qu&rsquo;il faut l\u00e0 o\u00f9 il faut. N&rsquo;importe qui, n&rsquo;importe o\u00f9, avec n&rsquo;importe quel syst\u00e8me d&rsquo;exploitation peut utiliser les m\u00eames images et avoir exactement la m\u00eame exp\u00e9rience que les autres.<\/p>\n<h2>D\u00e9clarer votre configuration avec Docker Compose<\/h2>\n<p>Pour commencer, cr\u00e9ez un fichier <a href=\"https:\/\/docs.docker.com\/compose\/\" target=\"_blank\" rel=\"noopener noreferrer\">Docker Compose<\/a>, <code>docker-compose.yml<\/code>. Il s&rsquo;agit d&rsquo;un fichier de configuration d\u00e9claratif \u00e9crit au format YAML qui indique \u00e0 Docker l&rsquo;\u00e9tat souhait\u00e9 de votre application. Docker utilise ces informations pour configurer l&rsquo;environnement de votre application.<\/p>\n<p>Les fichiers Docker Compose sont tr\u00e8s utiles lorsque plusieurs conteneurs sont en cours d&rsquo;ex\u00e9cution et qu&rsquo;il existe des d\u00e9pendances entre les conteneurs.<\/p>\n<p>Pour cr\u00e9er votre fichier <code>docker-compose.yml<\/code>:<\/p>\n<ol>\n<li>Commencez par choisir un fichier <a href=\"https:\/\/hub.docker.com\/\" target=\"_blank\" rel=\"noopener noreferrer\"><code>image<\/code><\/a> comme base de notre application. Recherchez sur Docker Hub et essayez de trouver une image Docker qui contient d\u00e9j\u00e0 les d\u00e9pendances de votre application. Veillez \u00e0 utiliser une balise d&rsquo;image sp\u00e9cifique pour \u00e9viter les erreurs. L&rsquo;utilisation de la balise <code>latest<\/code> peut provoquer des erreurs impr\u00e9vues dans votre application. Vous pouvez utiliser plusieurs images de base pour plusieurs d\u00e9pendances. Par exemple, une pour <a href=\"https:\/\/kinqsta.com\/fr\/blog\/qu-est-postgresql\/\">PostgreSQL<\/a> et une pour <a href=\"https:\/\/kinqsta.com\/fr\/blog\/executer-redis-dans-docker\/\">Redis<\/a>.<\/li>\n<li>Utilisez <a href=\"https:\/\/docs.docker.com\/storage\/volumes\/\" target=\"_blank\" rel=\"noopener noreferrer\"><code>volumes<\/code><\/a> pour persister les donn\u00e9es sur votre h\u00f4te si vous en avez besoin. La persistance des donn\u00e9es sur la machine h\u00f4te vous permet d&rsquo;\u00e9viter de perdre des donn\u00e9es si les conteneurs Docker sont supprim\u00e9s ou si vous devez les recr\u00e9er.<\/li>\n<li>Utilisez <a href=\"https:\/\/docs.docker.com\/network\/\" target=\"_blank\" rel=\"noopener noreferrer\"><code>networks<\/code><\/a> pour isoler votre installation afin d&rsquo;\u00e9viter les conflits de r\u00e9seau avec l&rsquo;h\u00f4te et les autres conteneurs. Cela permet \u00e9galement \u00e0 vos conteneurs de se retrouver facilement et de communiquer entre eux.<\/li>\n<\/ol>\n<p>En r\u00e9unissant tous ces \u00e9l\u00e9ments, nous obtenons un site <code>docker-compose.yml<\/code> qui ressemble \u00e0 ceci :<\/p>\n<pre><code class=\"language-yaml\">version: '3.8'services:\n  db:\n    image: postgres:14.7-alpine3.17\n    hostname: mk_db\n    restart: on-failure\n    ports:\n      - ${DB_PORT:-5432}:5432\n    volumes:\n      - db_data:\/var\/lib\/postgresql\/data\n    environment:\n      POSTGRES_USER: ${DB_USER:-user}\n      POSTGRES_PASSWORD: ${DB_PASSWORD:-password}\n      POSTGRES_DB: ${DB_NAME:-main}\n    networks:\n      - mk_network\n  redis:\n    image: redis:6.2.11-alpine3.17\n    hostname: mk_redis\n    restart: on-failure\n    ports:\n      - ${REDIS_PORT:-6379}:6379\n    networks:\n      - mk_network\n      \nvolumes:\n  db_data:\n\nnetworks:\n  mk_network:\n    name: mk_network<\/code><\/pre>\n<h2>Conteneuriser l&rsquo;application<\/h2>\n<h3>Construire une image Docker pour votre application<\/h3>\n<p>Tout d&rsquo;abord, nous devons cr\u00e9er une image Docker \u00e0 l&rsquo;aide de <code>Dockerfile<\/code>, puis l&rsquo;appeler \u00e0 partir de <code>docker-compose.yml<\/code>.<\/p>\n<p>Pour cr\u00e9er votre fichier <code>Dockerfile<\/code>:<\/p>\n<ol>\n<li>Commencez par choisir une image de base. Utilisez l&rsquo;image de base la plus petite possible pour votre application. En g\u00e9n\u00e9ral, les images alpines sont tr\u00e8s minimales et ne contiennent pratiquement aucun paquet suppl\u00e9mentaire. Vous pouvez commencer par une image alpine et construire \u00e0 partir de celle-ci :\n<pre><code class=\"language-markdown\">FROM node:18.15.0-alpine3.17\n<\/code><\/pre>\n<\/li>\n<li>Parfois, vous devez utiliser une architecture de processeur sp\u00e9cifique pour \u00e9viter les conflits. Par exemple, supposons que vous utilisiez un processeur <code>arm64-based<\/code> mais que vous deviez construire une image <code>amd64<\/code>. Vous pouvez le faire en sp\u00e9cifiant <code>-- platform<\/code> dans <code>Dockerfile<\/code>:\n<pre><code class=\"language-markdown\">FROM --platform=amd64 node:18.15.0-alpine3.17\n<\/code><\/pre>\n<\/li>\n<li>D\u00e9finissez le r\u00e9pertoire d&rsquo;application, installez les d\u00e9pendances et copiez le r\u00e9sultat dans votre r\u00e9pertoire racine :\n<pre><code class=\"language-markdown\">WORKDIR \/opt\/app \nCOPY package.json yarn.lock .\/ \nRUN yarn install \nCOPY . .<\/code><\/pre>\n<\/li>\n<li>Appelez l&rsquo;application <code>Dockerfile<\/code> \u00e0 partir de <code>docker-compose.yml<\/code>:\n<pre><code class=\"language-yaml\">services:\n  ...redis\n  ...db\n  \n  app:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    platforms:\n      - \"linux\/amd64\"\n    command: yarn dev\n    restart: on-failure\n    ports:\n      - ${PORT:-4000}:${PORT:-4000}\n    networks:\n      - mk_network\n    depends_on:\n      - redis\n      - db<\/code><\/pre>\n<\/li>\n<li>Impl\u00e9mentez le chargement automatique de sorte que lorsque vous modifiez quelque chose dans le code source, vous puissiez pr\u00e9visualiser vos changements imm\u00e9diatement sans avoir \u00e0 reconstruire l&rsquo;application manuellement. Pour cela, construisez d&rsquo;abord l&rsquo;image, puis ex\u00e9cutez-la dans un service s\u00e9par\u00e9 :\n<pre><code class=\"language-yaml\">services:\n  ... redis\n  ... db\n  \n  build-docker:\n    image: myapp\n    build:\n      context: .\n      dockerfile: Dockerfile\n  app:\n    image: myapp\n    platforms:\n      - \"linux\/amd64\"\n    command: yarn dev\n    restart: on-failure\n    ports:\n      - ${PORT:-4000}:${PORT:-4000}\n    volumes:\n      - .:\/opt\/app\n      - node_modules:\/opt\/app\/node_modules\n    networks:\n      - mk_network\n    depends_on:\n      - redis\n      - db\n      - build-docker\n      \nvolumes:\n  node_modules:<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Conseil de pro : Notez que <code>node_modules<\/code> est \u00e9galement mont\u00e9 explicitement pour \u00e9viter les probl\u00e8mes de paquets sp\u00e9cifiques \u00e0 la plate-forme. Cela signifie qu&rsquo;au lieu d&rsquo;utiliser le site <code>node_modules<\/code> sur l&rsquo;h\u00f4te, le conteneur docker utilise le sien mais le mappe sur l&rsquo;h\u00f4te dans un volume s\u00e9par\u00e9.<\/p>\n<h2>Construire progressivement les images de production avec l&rsquo;int\u00e9gration continue<\/h2>\n<p>La majorit\u00e9 de nos applications et services utilisent CI\/CD pour le d\u00e9ploiement. Docker joue un r\u00f4le important dans ce processus. Chaque changement dans la branche principale d\u00e9clenche imm\u00e9diatement un pipeline de construction via GitHub Actions ou CircleCI. Le flux de travail g\u00e9n\u00e9ral est tr\u00e8s simple : il installe les d\u00e9pendances, ex\u00e9cute les tests, construit l&rsquo;image Docker, et la pousse vers Google Container Registry (ou Artifact Registry). La partie dont nous parlons dans cet article est l&rsquo;\u00e9tape de construction.<\/p>\n<h3>Construction des images Docker<\/h3>\n<p>Nous utilisons des constructions en plusieurs \u00e9tapes pour des raisons de s\u00e9curit\u00e9 et de performance.<\/p>\n<h4>\u00c9tape 1 : Construction<\/h4>\n<p>Dans cette \u00e9tape, nous copions la base de code enti\u00e8re avec toutes les sources et la configuration, nous installons toutes les d\u00e9pendances, y compris les d\u00e9pendances de d\u00e9veloppement, et nous construisons l&rsquo;application. Elle cr\u00e9e un dossier <code>dist\/<\/code> et y copie la version construite du code. Mais cette image est beaucoup trop volumineuse et comporte un grand nombre d&#8217;empreintes pour \u00eatre utilis\u00e9e en production. De plus, comme nous utilisons des registres NPM priv\u00e9s, nous utilisons \u00e9galement notre site priv\u00e9 <code>NPM_TOKEN<\/code> \u00e0 ce stade. Nous ne voulons donc pas que cette \u00e9tape soit expos\u00e9e au monde ext\u00e9rieur. La seule chose dont nous avons besoin \u00e0 ce stade est le dossier <code>dist\/<\/code>.<\/p>\n<h4>\u00c9tape 2 : Production<\/h4>\n<p>La plupart des gens utilisent cette \u00e9tape pour l&rsquo;ex\u00e9cution car elle est tr\u00e8s proche de ce dont nous avons besoin pour faire fonctionner l&rsquo;application. Cependant, nous devons encore installer les d\u00e9pendances de production, ce qui signifie que nous laissons des traces et que nous avons besoin du dossier <code>NPM_TOKEN<\/code>. Cette \u00e9tape n&rsquo;est donc pas encore pr\u00eate \u00e0 \u00eatre expos\u00e9e. Faites \u00e9galement attention \u00e0 <code>yarn cache clean<\/code> sur la ligne 19. Cette petite commande r\u00e9duit la taille de notre image de 60 %.<\/p>\n<h4>\u00c9tape 3 : Ex\u00e9cution<\/h4>\n<p>La derni\u00e8re \u00e9tape doit \u00eatre aussi fine que possible avec un minimum d&#8217;empreinte. Nous nous contentons donc de copier l&rsquo;application toute pr\u00eate de la production et de passer \u00e0 autre chose. Nous laissons tous ces trucs yarn et <code>NPM_TOKEN<\/code> derri\u00e8re nous et n&rsquo;ex\u00e9cutons que l&rsquo;application.<\/p>\n<p>C&rsquo;est la version finale de <code>Dockerfile.production<\/code>:<\/p>\n<pre><code class=\"language-markdown\"># Stage 1: build the source code \nFROM node:18.15.0-alpine3.17 as builder \nWORKDIR \/opt\/app \nCOPY package.json yarn.lock .\/ \nRUN yarn install \nCOPY . . \nRUN yarn build \n\n# Stage 2: copy the built version and build the production dependencies FROM node:18.15.0-alpine3.17 as production \nWORKDIR \/opt\/app \nCOPY package.json yarn.lock .\/ \nRUN yarn install --production && yarn cache clean \nCOPY --from=builder \/opt\/app\/dist\/ .\/dist\/ \n\n# Stage 3: copy the production ready app to runtime \nFROM node:18.15.0-alpine3.17 as runtime \nWORKDIR \/opt\/app \nCOPY --from=production \/opt\/app\/ . \nCMD [\"yarn\", \"start\"]<\/code><\/pre>\n<p>Notez que, pour toutes les \u00e9tapes, nous commen\u00e7ons par copier les fichiers <code>package.json<\/code> et <code>yarn.lock<\/code>, nous installons les d\u00e9pendances, puis nous copions le reste de la base de code. La raison en est que Docker construit chaque commande comme une couche au-dessus de la pr\u00e9c\u00e9dente. Et chaque compilation peut utiliser les couches pr\u00e9c\u00e9dentes si elles sont disponibles et ne construire les nouvelles couches qu&rsquo;\u00e0 des fins de performance.<\/p>\n<p>Supposons que vous ayez modifi\u00e9 quelque chose dans <code>src\/services\/service1.ts<\/code> sans toucher aux paquets. Cela signifie que les quatre premi\u00e8res couches de l&rsquo;\u00e9tape de construction sont intactes et peuvent \u00eatre r\u00e9utilis\u00e9es. Cela rend le processus de construction incroyablement plus rapide.<\/p>\n<h3>Pousser l&rsquo;application vers le registre de conteneurs de Google via les pipelines CircleCI<\/h3>\n<p>Il y a plusieurs fa\u00e7ons de construire une image Docker dans les pipelines CircleCI. Dans notre cas, nous avons choisi d&rsquo;utiliser <code>circleci\/gcp-gcr orbs<\/code>:<\/p>\n<pre><code class=\"language-yaml\">executors:\n  docker-executor:\n    docker:\n      - image: cimg\/base:2023.03\norbs:\n  gcp-gcr: circleci\/gcp-gcr@0.15.1\njobs:\n  ...\n  deploy:\n    description: Build & push image to Google Artifact Registry\n    executor: docker-executor\n    steps:\n      ...\n      - gcp-gcr\/build-image:\n          image: my-app\n          dockerfile: Dockerfile.production\n          tag: ${CIRCLE_SHA1:0:7},latest\n      - gcp-gcr\/push-image:\n          image: my-app\n          tag: ${CIRCLE_SHA1:0:7},latest<\/code><\/pre>\n<p>Une configuration minimale est n\u00e9cessaire pour construire et pousser notre application, gr\u00e2ce \u00e0 Docker.<\/p>\n<h3>Pousser l&rsquo;application vers le Google Container Registry via les actions GitHub<\/h3>\n<p>Comme alternative \u00e0 CircleCI, nous pouvons utiliser GitHub Actions pour d\u00e9ployer l&rsquo;application en continu. Nous configurons <code>gcloud<\/code> et construisons et poussons l&rsquo;image Docker vers <code>gcr.io<\/code>:<\/p>\n<pre><code class=\"language-yaml\">jobs:\n  setup-build:\n    name: Setup, Build\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout\n      uses: actions\/checkout@v3\n\n    - name: Get Image Tag\n      run: |\n        echo \"TAG=$(git rev-parse --short HEAD)\" &gt;&gt; $GITHUB_ENV\n\n    - uses: google-github-actions\/setup-gcloud@master\n      with:\n        service_account_key: ${{ secrets.GCP_SA_KEY }}\n        project_id: ${{ secrets.GCP_PROJECT_ID }}\n\n    - run: |-\n        gcloud --quiet auth configure-docker\n\n    - name: Build\n      run: |-\n        docker build \n          --tag \"gcr.io\/${{ secrets.GCP_PROJECT_ID }}\/my-app:$TAG\" \n          --tag \"gcr.io\/${{ secrets.GCP_PROJECT_ID }}\/my-app:latest\" \n          .\n\n    - name: Push\n      run: |-\n        docker push \"gcr.io\/${{ secrets.GCP_PROJECT_ID }}\/my-app:$TAG\"\n        docker push \"gcr.io\/${{ secrets.GCP_PROJECT_ID }}\/my-app:latest\"<\/code><\/pre>\n<p>\u00c0 chaque petite modification apport\u00e9e \u00e0 la branche principale, nous construisons et poussons une nouvelle image Docker vers le registre.<\/p>\n<h2>D\u00e9ploiement de modifications sur le moteur Google Kubernetes \u00e0 l&rsquo;aide de Google Delivery Pipelines<\/h2>\n<p>Le fait de disposer d&rsquo;images Docker pr\u00eates \u00e0 l&#8217;emploi pour chaque modification facilite \u00e9galement le d\u00e9ploiement en production ou le retour en arri\u00e8re en cas de probl\u00e8me. Nous utilisons Google Kubernetes Engine pour g\u00e9rer et servir nos applications et nous utilisons Google Cloud Deploy et Delivery Pipelines pour notre processus de d\u00e9ploiement continu.<\/p>\n<p>Lorsque l&rsquo;image Docker est construite apr\u00e8s chaque petite modification (avec le pipeline CI illustr\u00e9 ci-dessus), nous allons plus loin et d\u00e9ployons la modification sur notre cluster de d\u00e9veloppement \u00e0 l&rsquo;aide de <code>gcloud<\/code>. Jetons un coup d&rsquo;\u0153il \u00e0 cette \u00e9tape dans le pipeline CircleCI :<\/p>\n<pre><code class=\"language-yaml\">- run:\n    name: Create new release\n    command: gcloud deploy releases create release-${CIRCLE_SHA1:0:7} --delivery-pipeline my-del-pipeline --region $REGION --annotations commitId=$CIRCLE_SHA1 --images my-app=gcr.io\/${PROJECT_ID}\/my-app:${CIRCLE_SHA1:0:7}<\/code><\/pre>\n<p>Cela d\u00e9clenche un processus de lib\u00e9ration pour d\u00e9ployer les changements dans notre cluster Kubernetes de d\u00e9veloppement. Apr\u00e8s avoir test\u00e9 et obtenu les approbations, nous promouvons le changement vers staging et ensuite vers production. Tout cela est possible parce que nous disposons d&rsquo;une image Docker isol\u00e9e pour chaque changement, qui contient presque tout ce dont elle a besoin. Il nous suffit d&rsquo;indiquer au d\u00e9ploiement quelle balise utiliser.<\/p>\n<h2>Comment l&rsquo;\u00e9quipe d&rsquo;assurance qualit\u00e9 b\u00e9n\u00e9ficie de ce processus<\/h2>\n<p>L&rsquo;\u00e9quipe d&rsquo;assurance qualit\u00e9 a surtout besoin d&rsquo;une version cloud de pr\u00e9-production des applications \u00e0 tester. Cependant, elle a parfois besoin d&rsquo;ex\u00e9cuter localement une application pr\u00e9construite (avec toutes les d\u00e9pendances) pour tester une certaine fonctionnalit\u00e9. Dans ces cas, ils ne veulent pas ou n&rsquo;ont pas besoin de passer par la douleur de cloner le projet entier, d&rsquo;installer les paquets npm, de construire l&rsquo;application, de faire face aux erreurs des d\u00e9veloppeurs, et de revoir tout le processus de d\u00e9veloppement pour que l&rsquo;application soit op\u00e9rationnelle. Maintenant que tout est d\u00e9j\u00e0 disponible en tant qu&rsquo;image Docker sur Google Container Registry, tout ce dont ils ont besoin, c&rsquo;est d&rsquo;un service dans le fichier Docker compose :<\/p>\n<pre><code class=\"language-yaml\">services:\n  ...redis\n  ...db\n  \n  app:\n    image: gcr.io\/${PROJECT_ID}\/my-app:latest\n    restart: on-failure\n    ports:\n      - ${PORT:-4000}:${PORT:-4000}\n    environment:\n      - NODE_ENV=production\n      - REDIS_URL=redis:\/\/redis:6379\n      - DATABASE_URL=postgresql:\/\/${DB_USER:-user}:${DB_PASSWORD:-password}@db:5432\/main\n    networks:\n      - mk_network\n    depends_on:\n      - redis\n      - db<\/code><\/pre>\n<p>Gr\u00e2ce \u00e0 ce service, ils peuvent lancer l&rsquo;application sur leurs machines locales \u00e0 l&rsquo;aide de conteneurs Docker :<\/p>\n<pre><code class=\"language-shell\">docker compose up<\/code><\/pre>\n<p>Il s&rsquo;agit l\u00e0 d&rsquo;un grand pas vers la simplification des processus de test. M\u00eame si l&rsquo;assurance qualit\u00e9 d\u00e9cide de tester un tag sp\u00e9cifique de l&rsquo;application, elle peut facilement changer le tag de l&rsquo;image \u00e0 la ligne 6 et r\u00e9ex\u00e9cuter la commande Docker Composer. M\u00eame s&rsquo;ils d\u00e9cident de comparer simultan\u00e9ment diff\u00e9rentes versions de l&rsquo;application, ils peuvent facilement y parvenir avec quelques ajustements. Le plus grand avantage est de tenir notre \u00e9quipe d&rsquo;assurance qualit\u00e9 \u00e0 l&rsquo;\u00e9cart des d\u00e9fis des d\u00e9veloppeurs.<\/p>\n<h2>Avantages de l&rsquo;utilisation de Docker<\/h2>\n<ul>\n<li><strong>Il n&rsquo;y a pratiquement pas d&#8217;empreintes de d\u00e9pendances<\/strong> : Si vous d\u00e9cidez de mettre \u00e0 jour la version de Redis ou de Postgres, il vous suffit de modifier une ligne et de r\u00e9-ex\u00e9cuter l&rsquo;application. Il n&rsquo;est pas n\u00e9cessaire de modifier quoi que ce soit sur votre syst\u00e8me. De plus, si vous avez deux applications qui ont toutes deux besoin de Redis (peut-\u00eatre m\u00eame avec des versions diff\u00e9rentes), vous pouvez les faire tourner toutes les deux dans leur propre environnement isol\u00e9 sans qu&rsquo;il y ait de conflit entre elles.<\/li>\n<li><strong>Plusieurs instances de l&rsquo;application <\/strong>: Il y a beaucoup de cas o\u00f9 nous avons besoin d&rsquo;ex\u00e9cuter la m\u00eame application avec une commande diff\u00e9rente. Par exemple, l&rsquo;initialisation de la base de donn\u00e9es, l&rsquo;ex\u00e9cution de tests, l&rsquo;observation des changements dans la base de donn\u00e9es, ou l&rsquo;\u00e9coute de messages. Dans chacun de ces cas, puisque nous avons d\u00e9j\u00e0 l&rsquo;image construite pr\u00eate, nous ajoutons simplement un autre service au fichier Docker compose avec une commande diff\u00e9rente, et nous avons termin\u00e9.<\/li>\n<li><strong>Un environnement de test plus facile <\/strong>: Le plus souvent, vous avez juste besoin d&rsquo;ex\u00e9cuter l&rsquo;application. Vous n&rsquo;avez pas besoin du code, des paquets ou des connexions aux bases de donn\u00e9es locales. Vous voulez seulement vous assurer que l&rsquo;application fonctionne correctement ou vous avez besoin d&rsquo;une instance en cours d&rsquo;ex\u00e9cution comme service de backend pendant que vous travaillez sur votre propre projet. Cela peut \u00e9galement \u00eatre le cas pour l&rsquo;assurance qualit\u00e9, les r\u00e9viseurs de demandes de retrait, ou m\u00eame les personnes charg\u00e9es de l&rsquo;interface utilisateur qui veulent s&rsquo;assurer que leur conception a \u00e9t\u00e9 correctement mise en \u0153uvre. Notre configuration Docker leur permet de prendre les choses en main tr\u00e8s facilement, sans avoir \u00e0 se pr\u00e9occuper de trop de probl\u00e8mes techniques.<\/li>\n<\/ul>\n<p><em>Cet article a \u00e9t\u00e9 publi\u00e9 \u00e0 l&rsquo;origine sur <a href=\"https:\/\/www.docker.com\/blog\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle\/\">Docker<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chez Kinsta, nous avons des projets de toutes tailles pour l&rsquo;h\u00e9bergement d&rsquo;applications, l&rsquo;h\u00e9bergement de bases de donn\u00e9es et l&rsquo;h\u00e9bergement WordPress infog\u00e9r\u00e9. Avec les solutions d&rsquo;h\u00e9bergement cloud &#8230;<\/p>\n","protected":false},"author":297,"featured_media":72236,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[965,985],"class_list":["post-72235","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-docker","topic-services-kinsta"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dockeriser le cycle de production : Comment Kinsta a am\u00e9lior\u00e9 l&#039;exp\u00e9rience de d\u00e9veloppement de bout en bout<\/title>\n<meta name=\"description\" content=\"Obtenez un aper\u00e7u complet de la fa\u00e7on dont Kinsta a am\u00e9lior\u00e9 l&#039;exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comment Kinsta a am\u00e9lior\u00e9 l&#039;exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production\" \/>\n<meta property=\"og:description\" content=\"Obtenez un aper\u00e7u complet de la fa\u00e7on dont Kinsta a am\u00e9lior\u00e9 l&#039;exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-23T14:37:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-25T15:14:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Amin Choroomi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Obtenez un aper\u00e7u complet de la fa\u00e7on dont Kinsta a am\u00e9lior\u00e9 l&#039;exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Amin Choroomi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/\"},\"author\":{\"name\":\"Amin Choroomi\",\"@id\":\"https:\/\/kinqsta.com\/fr\/#\/schema\/person\/afd8216d3181e47da9f6e804526b0a97\"},\"headline\":\"Comment Kinsta a am\u00e9lior\u00e9 l&rsquo;exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production\",\"datePublished\":\"2023-08-23T14:37:08+00:00\",\"dateModified\":\"2023-08-25T15:14:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/\"},\"wordCount\":2527,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle.jpg\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/\",\"url\":\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/\",\"name\":\"Dockeriser le cycle de production : Comment Kinsta a am\u00e9lior\u00e9 l'exp\u00e9rience de d\u00e9veloppement de bout en bout\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle.jpg\",\"datePublished\":\"2023-08-23T14:37:08+00:00\",\"dateModified\":\"2023-08-25T15:14:24+00:00\",\"description\":\"Obtenez un aper\u00e7u complet de la fa\u00e7on dont Kinsta a am\u00e9lior\u00e9 l'exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle.jpg\",\"contentUrl\":\"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker\",\"item\":\"https:\/\/kinqsta.com\/fr\/sujets\/docker\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Comment Kinsta a am\u00e9lior\u00e9 l&rsquo;exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/fr\/#website\",\"url\":\"https:\/\/kinqsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinqsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinqsta.com\/fr\/#\/schema\/person\/afd8216d3181e47da9f6e804526b0a97\",\"name\":\"Amin Choroomi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinqsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f986556230b70b812c88e12d0c4726cf?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f986556230b70b812c88e12d0c4726cf?s=96&d=mm&r=g\",\"caption\":\"Amin Choroomi\"},\"description\":\"Software developer at Kinsta. Passionate about Docker and Kubernetes, he specializes in application development and DevOps practices.\",\"url\":\"https:\/\/kinqsta.com\/fr\/blog\/author\/aminchoroomi\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dockeriser le cycle de production : Comment Kinsta a am\u00e9lior\u00e9 l'exp\u00e9rience de d\u00e9veloppement de bout en bout","description":"Obtenez un aper\u00e7u complet de la fa\u00e7on dont Kinsta a am\u00e9lior\u00e9 l'exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/","og_locale":"fr_FR","og_type":"article","og_title":"Comment Kinsta a am\u00e9lior\u00e9 l'exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production","og_description":"Obtenez un aper\u00e7u complet de la fa\u00e7on dont Kinsta a am\u00e9lior\u00e9 l'exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production.","og_url":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2023-08-23T14:37:08+00:00","article_modified_time":"2023-08-25T15:14:24+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle.jpg","type":"image\/jpeg"}],"author":"Amin Choroomi","twitter_card":"summary_large_image","twitter_description":"Obtenez un aper\u00e7u complet de la fa\u00e7on dont Kinsta a am\u00e9lior\u00e9 l'exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production.","twitter_image":"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle.jpg","twitter_creator":"@kinsta_fr","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Amin Choroomi","Dur\u00e9e de lecture estim\u00e9e":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/"},"author":{"name":"Amin Choroomi","@id":"https:\/\/kinqsta.com\/fr\/#\/schema\/person\/afd8216d3181e47da9f6e804526b0a97"},"headline":"Comment Kinsta a am\u00e9lior\u00e9 l&rsquo;exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production","datePublished":"2023-08-23T14:37:08+00:00","dateModified":"2023-08-25T15:14:24+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/"},"wordCount":2527,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle.jpg","inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/","url":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/","name":"Dockeriser le cycle de production : Comment Kinsta a am\u00e9lior\u00e9 l'exp\u00e9rience de d\u00e9veloppement de bout en bout","isPartOf":{"@id":"https:\/\/kinqsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle.jpg","datePublished":"2023-08-23T14:37:08+00:00","dateModified":"2023-08-25T15:14:24+00:00","description":"Obtenez un aper\u00e7u complet de la fa\u00e7on dont Kinsta a am\u00e9lior\u00e9 l'exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#primaryimage","url":"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle.jpg","contentUrl":"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/how-kinsta-improved-the-end-to-end-development-experience-by-dockerizing-every-step-of-the-production-cycle.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/fr\/blog\/kinsta-docker\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Docker","item":"https:\/\/kinqsta.com\/fr\/sujets\/docker\/"},{"@type":"ListItem","position":3,"name":"Comment Kinsta a am\u00e9lior\u00e9 l&rsquo;exp\u00e9rience de d\u00e9veloppement de bout en bout en Dockerisant chaque \u00e9tape du cycle de production"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/fr\/#website","url":"https:\/\/kinqsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinqsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinqsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinqsta.com\/fr\/#\/schema\/person\/afd8216d3181e47da9f6e804526b0a97","name":"Amin Choroomi","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinqsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f986556230b70b812c88e12d0c4726cf?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f986556230b70b812c88e12d0c4726cf?s=96&d=mm&r=g","caption":"Amin Choroomi"},"description":"Software developer at Kinsta. Passionate about Docker and Kubernetes, he specializes in application development and DevOps practices.","url":"https:\/\/kinqsta.com\/fr\/blog\/author\/aminchoroomi\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/fr\/wp-json\/wp\/v2\/posts\/72235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/fr\/wp-json\/wp\/v2\/users\/297"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/fr\/wp-json\/wp\/v2\/comments?post=72235"}],"version-history":[{"count":4,"href":"https:\/\/kinqsta.com\/fr\/wp-json\/wp\/v2\/posts\/72235\/revisions"}],"predecessor-version":[{"id":72240,"href":"https:\/\/kinqsta.com\/fr\/wp-json\/wp\/v2\/posts\/72235\/revisions\/72240"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72235\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72235\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72235\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72235\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72235\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72235\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72235\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72235\/translations\/es"},{"href":"https:\/\/kinqsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72235\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/fr\/wp-json\/wp\/v2\/media\/72236"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/fr\/wp-json\/wp\/v2\/media?parent=72235"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/fr\/wp-json\/wp\/v2\/tags?post=72235"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/fr\/wp-json\/wp\/v2\/topic?post=72235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}