# GitHub-Actions gebruiken om een dockerbeeld te bouwen en te duwen

<datetime class="hidden">2024-07-30T13:30</datetime>

Dit is een eenvoudig voorbeeld van hoe je GitHub Actions gebruikt om een dockerbeeld te bouwen en te duwen naar een containerregister.

## Voorwaarden

- Er bestaat een docker-file voor het project dat je wil bouwen en drukt.
- Er bestaat een GitHub-repository voor het project.
- Er bestaat een containerregister om het beeld naar. te duwen.
- Een dockerregister's gebruikernaam en wagwoord (in GuitHub SecretsM SK2

Voor dit project begon ik met het basisproject .NET Core ASP.NET en de standaarddockerfile van Rider.

### Dockerfile

Dit Dockerfile is een multi-stadium gebouw dat het project bouwt en vervolgens de output kopieert naar een uitvoerbeeld.

Voor deze proek, als ik TailwindCSS gebruik, moet ik ook Node installeren .js en de Tail windCSS-bouwcommand runnenM SK3

```dockerfile
# 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/*
```

Dit downloadt de nieuwste (op het moment van het schrijven)versie van NodeM SK2js en installeert ze in het Build-beeld.

Later in de lêer

```dockerfile

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"]
```

### GitHub-acties

De GitHub-Action voor deze site is een eenvoudige build en push-actie die geactiveerd wordt op een push naar de hoofdafdeling.
https://githubMSC1com/scottgalM SK3mostlylucidwebMスク4blobMST5mainMSP6gitHubMSM7workflowsMSV8dockerMMSC9imageMSS10yml

Deze aksie controleert het stoorplekje, logt in de Docker Hub, opstelling van Docker Buildx , cachet de docker lagenM SK3 bouwt en tagt het Docker-beeldMSC4 en duwt dan het beeld naar de Doker Hub

In de docker compose-file

```yaml
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 }}
```

<!--category-- Docker, GitHub Actions -->
