Χρησιμοποιώντας τις Δράσεις GitHub για να δημιουργήσετε και να πιέσετε μια εικόνα docker
Αυτό είναι ένα απλό παράδειγμα του πώς να χρησιμοποιήσετε τις Δράσεις GitHub για να δημιουργήσετε και να πιέσετε μια εικόνα docker σε ένα μητρώο δεξαμενών.
Προϋποθέσεις
- Ένα αρχείο docker υπάρχει για το έργο που θέλετε να δημιουργήσετε και να πιέσετε.
- Υπάρχει αποθήκη GitHub για το έργο.
- Υπάρχει ένα μητρώο εμπορευματοκιβωτίων για να πιέσει την εικόνα σε .
- Ένα μητρώο docker' διατηρεί το όνομα χρήστη και τον κωδικό πρόσβασης M SK1 διατηρείται τα μυστικά του GuitHub)
Για αυτό το έργο ξεκίνησα με το βασικό .NET Core ASP.NET project και το προεπιλεγμένο Dockerfile που δημιούργησε ο Rider
Δοκιστάν
Αυτό το αρχείο Docker είναι ένα multi-παράσταση που χτίζει το έργο και στη συνέχεια αντιγράφει την έκδοση σε μια εικόνα εκτέλεσηςΜSK1
Για αυτό το project, καθώς χρησιμοποιώ TailwindCSS,Πρέπει επίσης να εγκαταστήσω NodeM SK2js και να εκτελέσετε την εντολή οικοδόμησης του TAILWINDCSS
# 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/*
Αυτό κατεβάζει το τελευταίο (τ χρόνος γραφήςΜSK1τ έκδοση του Node.τ και την εγκαταστήσει στην οικοδομική εικόναM SK3τ
Αργότερα στο αρχείο
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
Η δράση του GitHub για αυτόν τον ιστότοπο είναι μια απλή δράση κατασκευής και ώθησης που εκκινείται με μια ώθηση στο κύριο κλάδο. HTTPS://githubΜSK1com/scottgalM SK3mostlylucidwebMK4blobMKK5mainMRK6gitubMKM7workflowsMKR8dockerMKL9imageMKS10yml
Αυτή η ενέργεια ελέγχει το αποθεματικό, συνδέεται με το Docker HubΜSK1 εγκαθιστά το Docke Buildx, caches τα στρώματα του DockerM SK3 κατασκευάζει και ετικέτα την εικόνα του DockeMSKA4 και στη συνέχεια πιάνει τη φωτογραφία στο DockerHubMKA5
Στο ντοκιμαντέρ συνθέτει αρχείο
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 }}