From 1b8da5acb70df75b96001cb2095c3c61d7b598c1 Mon Sep 17 00:00:00 2001 From: aliaminsalah Date: Fri, 18 Oct 2024 18:16:16 +0300 Subject: [PATCH 1/4] add Dockerfile and pipeline --- .github/docker-image.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/docker-image.yml diff --git a/.github/docker-image.yml b/.github/docker-image.yml new file mode 100644 index 0000000..1236bfd --- /dev/null +++ b/.github/docker-image.yml @@ -0,0 +1,34 @@ +name: Docker Image CI +on: + push: + branches: + - main + pull_request: + branches: + - main +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: | + ghcr.io/${{ github.repository_owner }}/abohmeed/getting-started:latest + ghcr.io/${{ github.repository_owner }}/abohmeed/getting-started:${{ github.sha }} From a8e2658c48305ada0d707318e87ca34aac6f7837 Mon Sep 17 00:00:00 2001 From: aliaminsalah Date: Sat, 19 Oct 2024 15:01:12 +0300 Subject: [PATCH 2/4] last change --- .github/{ => workflows}/docker-image.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{ => workflows}/docker-image.yml (100%) diff --git a/.github/docker-image.yml b/.github/workflows/docker-image.yml similarity index 100% rename from .github/docker-image.yml rename to .github/workflows/docker-image.yml From f7f497b93691b85e570fe720e6b569ab0c2232ad Mon Sep 17 00:00:00 2001 From: aliaminsalah Date: Sat, 19 Oct 2024 15:06:12 +0300 Subject: [PATCH 3/4] last change --- Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8b965a9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM node:18-alpine +WORKDIR /app +COPY . . +RUN yarn install --production && yarn cache clean +ENTRYPOINT [ "node" ] +CMD [ "src/index.js" ] +EXPOSE 3000 \ No newline at end of file From a9987fa960cb5a3cfbd77370fb74ad180f830a92 Mon Sep 17 00:00:00 2001 From: ali amin <165170471+aliaminsalah@users.noreply.github.com> Date: Sat, 19 Oct 2024 15:27:53 +0300 Subject: [PATCH 4/4] Update README.md --- README.md | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 97 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3c6ef2d..799bbce 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,99 @@ -# Getting started -This repository is a sample application for users following the getting started guide at https://docs.docker.com/get-started/. +# Getting Started -The application is based on the application from the getting started tutorial at https://github.com/docker/getting-started \ No newline at end of file +This repository is a sample application for users following the [Getting Started guide](https://docs.docker.com/get-started/) on Docker's official documentation. + +The application is based on the tutorial at [docker/getting-started](https://github.com/docker/getting-started). + +## Getting Started App with Docker CI/CD + +This project demonstrates how to build, test, and deploy a Dockerized application using GitHub Actions for CI/CD. + +### How to Fork and Set Up + +1. **Fork the repository:** + - Go to the [docker/getting-started-app](https://github.com/docker/getting-started-app) and fork the repository to your GitHub account. + +2. **Set the remote URL:** + - After forking, change the remote URL to your repository in the terminal: + ```bash + git remote set-url origin https://github.com/abohmeed/getting-started-app.git + ``` + +3. **View the Dockerfile:** + - In the terminal, view the Dockerfile: + ```bash + cat Dockerfile + ``` + +### Dockerfile + +Here’s the `Dockerfile` included in this project: + +```dockerfile +FROM node:18-alpine +WORKDIR /app +COPY . . +RUN yarn install --production && yarn cache clean +ENTRYPOINT [ "node" ] +CMD [ "src/index.js" ] +EXPOSE 3000 +``` + +### GitHub Actions CI/CD Workflow + +This project includes a GitHub Actions workflow for automatically building and pushing Docker images to the GitHub Container Registry. + +#### Workflow File + +The `.github/workflows/docker-image.yml` file contains the CI/CD pipeline: + +```yaml +name: Docker Image CI + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: | + ghcr.io/${{ github.repository_owner }}/abohmeed/getting-started:latest + ghcr.io/${{ github.repository_owner }}/abohmeed/getting-started:${{ github.sha }} +``` + +### Workflow Steps: + +- **Checkout code:** Fetches the repository content. +- **Set up Docker Buildx:** Prepares Docker Buildx for multi-platform builds. +- **Log in to GitHub Container Registry:** Authenticates the Docker client with GitHub’s Container Registry. +- **Build and push:** Builds the Docker image and pushes it to the GitHub Container Registry with two tags: `latest` and the commit SHA. + +### Conclusion + +This setup allows you to continuously integrate and deploy Docker images to the GitHub Container Registry. Simply push or open a pull request to the `main` branch, and the workflow will handle the rest!