Att använda GitHub Actions för att bygga och trycka på en dockerbild
Det här är ett enkelt exempel på hur man använder GitHub Actions för att bygga och trycka på en dockerbild till ett containerregister
Förberedelser
- En docker-file existerar för projektet du vill bygga och trycka på.
- Ett GitHub-rumslag finns för projektet.
- Ett containerregister existerar för att trycka på bilden till.
- Ett dockerregister's username och password (in GuitHub Secrets
För det här projektet började jag med det grundläggande .NET Core ASP | . | NET-projektet och den standarddefinierade Dockerfile som skapades av Rider
Dockerfile
Denna Dockerfile är en multi- -stadiums byggnad som bygger upp projektet och kopierar sedan utgången till ett urbild.
För det här proectet, eftersom jag använder TailwindCSS, behöver jag också installera Node
# 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/*
Den laddar ner den senaste versionen av Node, ( vid skrivandet,) och installerar den i byggnadsbilden.
Senare i filet
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-aktioner
GitHub Action för den här sidan är en enkel byggnads- och tryckaktion som aktiveras när man trycker på huvudkontoren. https://github.comMSC2scottgal/mostlylucidwebMsc4blobM sc5mainMSc6gitHubMc7workflowsMcsk8dockerMksk9image.~yml
Den här aktionen kontrollerar repositoriet, registreras i Docker Hub, sätter upp Docker Buildx , kastar DockerlayernaM SK3 bygger och märker Docker-bildenMSC4 och trycker på bilden till DockerHubMska5
I dockaren komponera filen
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 }}