Utilisation des actions de GitHub pour construire et pousser une image d'un docker (Français (French))

Utilisation des actions de GitHub pour construire et pousser une image d'un docker

Tuesday, 30 July 2024

//

3 minute read

Voici un exemple simple de l'utilisation des actions GitHub pour construire et pousser une image d'un docker vers un registre de conteneurs.

Exigences préalables

  • Un fichier docker existe pour le projet que vous voulez construire et pousser.
  • Un répertoire GitHub existe pour le projet.
  • Un registre de conteneurs existe pour pousser l'image à.
  • Un registre de docker'le nom d'utilisateur et le mot de passe (dans GuitHub SecretsM SK2

Pour ce projet, j’ai commencé avec le .NET Core ASP .NET de base et le Dockerfile par défaut créé par Rider.

Dockerfile

Ce Dockerfile est un édifice de plusieurs étapes qui construit le projet puis copie l’extrait à une image du temps d’exécution.

Pour ce proect, puisque j'utilise TailwindCSS, je dois aussi installer NodeM SK2js et exécuter le commandement de construction Tail windCSS .

# Install Node.js v20.x
RUN apt-get update && apt-get install -y curl \
    && curl -fsSL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh \
    && bash nodesource_setup.sh \
    && apt-get install -y nodejs \
    && rm -f nodesource_setup.sh \
    && rm -rf /var/lib/apt/lists/*

Ce fichier télécharge la dernière version (au moment de l'écriture) du nodeM SK2js et l'installe dans l'image de construction .

Plus tard dans le fichier


FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release

# Install Node.js v20.x
RUN apt-get update && apt-get install -y curl \
    && curl -fsSL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh \
    && bash nodesource_setup.sh \
    && apt-get install -y nodejs \
    && rm -f nodesource_setup.sh \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /src
COPY ["Mostlylucid/Mostlylucid.csproj", "Mostlylucid/"]
RUN dotnet restore "Mostlylucid/Mostlylucid.csproj"
COPY . .
WORKDIR "/src/Mostlylucid"

# Copy package.json and package-lock.json and install npm dependencies
COPY package*.json ./
RUN npm install

# Ensure npm-run-all is available and install npm dependencies
RUN npm --version
RUN npx tailwindcss -i ./src/css/main.css -o ./wwwroot/css/dist/main.css

RUN dotnet build "Mostlylucid.csproj" -c $BUILD_CONFIGURATION -o /app/build


FROM build AS publish
RUN dotnet publish "Mostlylucid.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Mostlylucid.dll"]

Actions de GitHub

L’action GitHub pour ce site est une simple action de construction et de push qui est déclenchée lors d’un push à la branche principale. https://githubMSC1comM SK2scottgal/mostlylucidwebMST4blobMS/mainMSP6gitHubMSSK7workflowsMSS8dockerM SS9imageMISS10yml

Cette action vérifie le répertoire, s'inscrit dans Docker Hub, établit Docker Buildx , cache les couches de dockerM SK3 construit et marque l'image du Docker , puis pousse l' image à DockerHubMSC5

Dans le fichier de compose du docker

name: Docker Image CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build-and-push:
    runs-on: ubuntu-latest

    steps:
    - name: Check out the repository
      uses: actions/checkout@v4

    - name: Log in to Docker Hub
      run: echo "${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}" | docker login -u "${{ secrets.DOCKER_HUB_USER_NAME }}" --password-stdin

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v2

    - name: Cache Docker layers
      uses: actions/cache@v3
      with:
        path: /tmp/.buildx-cache
        key: ${{ runner.os }}-buildx-${{ github.sha }}
        restore-keys: |
          ${{ runner.os }}-buildx-

    - name: Build and tag the Docker image
      id: build
      run: |
        TIMESTAMP=$(date +%s)
        echo "TIMESTAMP=$TIMESTAMP" >> $GITHUB_ENV
        docker build . --file Mostlylucid/Dockerfile --tag ${{ secrets.DOCKER_HUB_USER_NAME }}/mostlylucid:latest --tag ${{ secrets.DOCKER_HUB_USER_NAME }}/mostlylucid:$TIMESTAMP

    - name: Push the Docker image to Docker Hub
      run: |
        docker push ${{ secrets.DOCKER_HUB_USER_NAME }}/mostlylucid:latest
        docker push ${{ secrets.DOCKER_HUB_USER_NAME }}/mostlylucid:${{ env.TIMESTAMP }}
Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.