GitHub-Actions gebruiken om een dockerbeeld te bouwen en te duwen
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
# 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
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
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 }}