René's URL Explorer Experiment


Title: Build Robust Continuous Integration With Docker and Friends – Real Python

Open Graph Title: Build Robust Continuous Integration With Docker and Friends – Real Python

Description: In this tutorial, you'll use Docker and GitHub Actions to build a robust continuous integration pipeline for a multi-container web application consisting of Flask and Redis. Along the way, you'll learn how to dockerize a Python web application.

Open Graph Description: In this tutorial, you'll use Docker and GitHub Actions to build a robust continuous integration pipeline for a multi-container web application consisting of Flask and Redis. Along the way, you'll learn how to dockerize a Python web application.

Mail addresses
?subject=Python article for you&body=Build Robust Continuous Integration With Docker and Friends on Real Python https://realpython.com/docker-continuous-integration/

Opengraph URL: https://realpython.com/docker-continuous-integration/

X: @realpython

direct link

Domain: realpython.com


Hey, it has json ld scripts:
{
  "@context": "http://schema.org",
  "@type": "Article",
  "headline": "Build Robust Continuous Integration With Docker and Friends",
  "image": {
    "@type": "ImageObject",
    "url": "https://files.realpython.com/media/UPDATE-Docker-in-Action-Fitter-Happier-More-Productive_Watermarked.479cfb791c17.jpg",
    "width": 1920,
    "height": 1080
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://realpython.com/docker-continuous-integration/",
    "lastReviewed": "2023-05-05",
    "author": {
      "@type": "Person",
      "name": "Bartosz Zaczy\u0144ski",
      "image": "https://realpython.com/cdn-cgi/image/width=1694,height=1694,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/coders_lab_2109368.259b1599fbee.jpg",
      "url": "https://realpython.com/team/bzaczynski/",
      "affiliation": {
        "@type": "Organization",
        "@id": "https://realpython.com/#organization",
        "name": "Real Python",
        "url": "https://realpython.com",
        "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
      }
    },
    "reviewedBy": [
      {
        "@type": "Person",
        "name": "Aldren Santos",
        "image": "https://realpython.com/cdn-cgi/image/width=500,height=500,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/Aldren_Santos_Real_Python.6b0861d8b841.png",
        "url": "https://realpython.com/team/asantos/",
        "affiliation": {
          "@type": "Organization",
          "@id": "https://realpython.com/#organization",
          "name": "Real Python",
          "url": "https://realpython.com",
          "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
        }
      },
      {
        "@type": "Person",
        "name": "Geir Arne Hjelle",
        "image": "https://realpython.com/cdn-cgi/image/width=800,height=800,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/gahjelle.470149ee709e.jpg",
        "url": "https://realpython.com/team/gahjelle/",
        "affiliation": {
          "@type": "Organization",
          "@id": "https://realpython.com/#organization",
          "name": "Real Python",
          "url": "https://realpython.com",
          "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
        }
      },
      {
        "@type": "Person",
        "name": "Kate Finegan",
        "image": "https://realpython.com/cdn-cgi/image/width=400,height=400,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/VZxEtUor_400x400.7169c68e3950.jpg",
        "url": "https://realpython.com/team/kfinegan/",
        "affiliation": {
          "@type": "Organization",
          "@id": "https://realpython.com/#organization",
          "name": "Real Python",
          "url": "https://realpython.com",
          "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
        }
      },
      {
        "@type": "Person",
        "name": "Philipp Acsany",
        "image": "https://realpython.com/cdn-cgi/image/width=400,height=400,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/phi5_2.0e61b4c66f6b.jpg",
        "url": "https://realpython.com/team/pacsany/",
        "affiliation": {
          "@type": "Organization",
          "@id": "https://realpython.com/#organization",
          "name": "Real Python",
          "url": "https://realpython.com",
          "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
        }
      }
    ]
  },
  "datePublished": "2023-05-08T14:00:00+00:00",
  "dateModified": "2023-05-05T15:13:41.115033+00:00",
  "publisher": {
    "@type": "Organization",
    "@id": "https://realpython.com/#organization",
    "name": "Real Python",
    "url": "https://realpython.com",
    "logo": {
      "@type": "ImageObject",
      "url": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png",
      "width": 512,
      "height": 512
    },
    "description": "Real Python is a leading provider of online Python education and one of the largest language-specific online communities for software developers. It publishes high-quality learning resources, such as tutorials, books, and courses to an audience of millions of developers, data scientists, and machine learning engineers each month.",
    "slogan": "Become a Python Expert",
    "email": "info@realpython.com",
    "sameAs": [
      "https://github.com/realpython",
      "https://www.youtube.com/realpython",
      "https://twitter.com/realpython",
      "https://x.com/realpython",
      "https://www.linkedin.com/company/realpython-com/",
      "https://www.facebook.com/learnrealpython",
      "https://www.instagram.com/realpython",
      "https://www.tiktok.com/@realpython.com"
    ]
  },
  "author": {
    "@type": "Person",
    "name": "Bartosz Zaczy\u0144ski",
    "image": "https://realpython.com/cdn-cgi/image/width=1694,height=1694,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/coders_lab_2109368.259b1599fbee.jpg",
    "url": "https://realpython.com/team/bzaczynski/",
    "affiliation": {
      "@type": "Organization",
      "@id": "https://realpython.com/#organization",
      "name": "Real Python",
      "url": "https://realpython.com",
      "logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
    }
  },
  "description": "In this tutorial, you'll use Docker and GitHub Actions to build a robust continuous integration pipeline for a multi-container web application consisting of Flask and Redis. Along the way, you'll learn how to dockerize a Python web application."
}

authorReal Python
twitter:cardsummary_large_image
twitter:imagehttps://files.realpython.com/media/UPDATE-Docker-in-Action-Fitter-Happier-More-Productive_Watermarked.479cfb791c17.jpg
og:imagehttps://files.realpython.com/media/UPDATE-Docker-in-Action-Fitter-Happier-More-Productive_Watermarked.479cfb791c17.jpg
twitter:creator@realpython
og:typearticle

Links:

https://realpython.com/
Start Herehttps://realpython.com/start-here/
Learn Python https://realpython.com/offline-python-deployments-with-docker/
Python Tutorials →In-depth articles and video courseshttps://realpython.com/search?kind=article&kind=course&order=newest
Learning Paths →Guided study plans for accelerated learninghttps://realpython.com/learning-paths/
Quizzes & Exercises →Check your learning progresshttps://realpython.com/quizzes/
Browse Topics →Focus on a specific area or skill levelhttps://realpython.com/tutorials/all/
Community Chat →Learn with other Pythonistashttps://realpython.com/community/
Office Hours →Live Q&A calls with Python expertshttps://realpython.com/office-hours/
Podcast →Hear what’s new in the world of Pythonhttps://realpython.com/podcasts/rpp/
Books →Round out your knowledge and learn offlinehttps://realpython.com/products/books/
Reference →Concise definitions for common Python termshttps://realpython.com/ref/
Code Mentor →BetaPersonalized code assistance & learning toolshttps://realpython.com/mentor/
Unlock All Content →https://realpython.com/account/join/
More https://realpython.com/offline-python-deployments-with-docker/
Learner Storieshttps://realpython.com/learner-stories/
Python Newsletterhttps://realpython.com/newsletter/
Python Job Boardhttps://www.pythonjobshq.com
Meet the Teamhttps://realpython.com/team/
Become a Tutorial Writerhttps://realpython.com/write-for-us/
Become a Video Instructorhttps://realpython.com/become-an-instructor/
Searchhttps://realpython.com/search
https://realpython.com/search
Joinhttps://realpython.com/account/join/
Sign‑Inhttps://realpython.com/account/login/?next=%2Fdocker-continuous-integration%2F
Browse Topicshttps://realpython.com/tutorials/all/
Guided Learning Pathshttps://realpython.com/learning-paths/
Basicshttps://realpython.com/search?level=basics
Intermediatehttps://realpython.com/search?level=intermediate
Advancedhttps://realpython.com/search?level=advanced
aihttps://realpython.com/tutorials/ai/
algorithmshttps://realpython.com/tutorials/algorithms/
apihttps://realpython.com/tutorials/api/
best-practiceshttps://realpython.com/tutorials/best-practices/
careerhttps://realpython.com/tutorials/career/
communityhttps://realpython.com/tutorials/community/
databaseshttps://realpython.com/tutorials/databases/
data-sciencehttps://realpython.com/tutorials/data-science/
data-structureshttps://realpython.com/tutorials/data-structures/
data-vizhttps://realpython.com/tutorials/data-viz/
devopshttps://realpython.com/tutorials/devops/
djangohttps://realpython.com/tutorials/django/
dockerhttps://realpython.com/tutorials/docker/
editorshttps://realpython.com/tutorials/editors/
flaskhttps://realpython.com/tutorials/flask/
front-endhttps://realpython.com/tutorials/front-end/
gamedevhttps://realpython.com/tutorials/gamedev/
guihttps://realpython.com/tutorials/gui/
machine-learninghttps://realpython.com/tutorials/machine-learning/
newshttps://realpython.com/tutorials/news/
numpyhttps://realpython.com/tutorials/numpy/
projectshttps://realpython.com/tutorials/projects/
pythonhttps://realpython.com/tutorials/python/
stdlibhttps://realpython.com/tutorials/stdlib/
testinghttps://realpython.com/tutorials/testing/
toolshttps://realpython.com/tutorials/tools/
web-devhttps://realpython.com/tutorials/web-dev/
web-scrapinghttps://realpython.com/tutorials/web-scraping/
Table of Contentshttps://realpython.com/offline-python-deployments-with-docker/#toc
Get an Overview of the Project Architecturehttps://realpython.com/offline-python-deployments-with-docker/#get-an-overview-of-the-project-architecture
Set Up Docker on Your Computerhttps://realpython.com/offline-python-deployments-with-docker/#set-up-docker-on-your-computer
Develop a Page View Tracker in Flaskhttps://realpython.com/offline-python-deployments-with-docker/#develop-a-page-view-tracker-in-flask
Prepare the Environmenthttps://realpython.com/offline-python-deployments-with-docker/#prepare-the-environment
Run a Redis Server Through Dockerhttps://realpython.com/offline-python-deployments-with-docker/#run-a-redis-server-through-docker
Test the Connection to Redishttps://realpython.com/offline-python-deployments-with-docker/#test-the-connection-to-redis
Connect to Redis From Pythonhttps://realpython.com/offline-python-deployments-with-docker/#connect-to-redis-from-python
Implement and Run the Flask Application Locallyhttps://realpython.com/offline-python-deployments-with-docker/#implement-and-run-the-flask-application-locally
Test and Secure Your Web Applicationhttps://realpython.com/offline-python-deployments-with-docker/#test-and-secure-your-web-application
Cover the Source Code With Unit Testshttps://realpython.com/offline-python-deployments-with-docker/#cover-the-source-code-with-unit-tests
Check Component Interactions Through Integration Testshttps://realpython.com/offline-python-deployments-with-docker/#check-component-interactions-through-integration-tests
Test a Real-World Scenario End to End (E2E)https://realpython.com/offline-python-deployments-with-docker/#test-a-real-world-scenario-end-to-end-e2e
Perform Static Code Analysis and Security Scanninghttps://realpython.com/offline-python-deployments-with-docker/#perform-static-code-analysis-and-security-scanning
Dockerize Your Flask Web Applicationhttps://realpython.com/offline-python-deployments-with-docker/#dockerize-your-flask-web-application
Understand the Docker Terminologyhttps://realpython.com/offline-python-deployments-with-docker/#understand-the-docker-terminology
Learn the Anatomy of a Dockerfilehttps://realpython.com/offline-python-deployments-with-docker/#learn-the-anatomy-of-a-dockerfile
Choose the Base Docker Imagehttps://realpython.com/offline-python-deployments-with-docker/#choose-the-base-docker-image
Isolate Your Docker Imagehttps://realpython.com/offline-python-deployments-with-docker/#isolate-your-docker-image
Cache Your Project Dependencieshttps://realpython.com/offline-python-deployments-with-docker/#cache-your-project-dependencies
Run Tests as Part of the Build Processhttps://realpython.com/offline-python-deployments-with-docker/#run-tests-as-part-of-the-build-process
Specify the Command to Run in Docker Containershttps://realpython.com/offline-python-deployments-with-docker/#specify-the-command-to-run-in-docker-containers
Reorganize Your Dockerfile for Multi-Stage Buildshttps://realpython.com/offline-python-deployments-with-docker/#reorganize-your-dockerfile-for-multi-stage-builds
Build and Version Your Docker Imagehttps://realpython.com/offline-python-deployments-with-docker/#build-and-version-your-docker-image
Push the Image to a Docker Registryhttps://realpython.com/offline-python-deployments-with-docker/#push-the-image-to-a-docker-registry
Run a Docker Containerhttps://realpython.com/offline-python-deployments-with-docker/#run-a-docker-container
Orchestrate Containers Using Docker Composehttps://realpython.com/offline-python-deployments-with-docker/#orchestrate-containers-using-docker-compose
Set Up Docker Compose on Your Computerhttps://realpython.com/offline-python-deployments-with-docker/#set-up-docker-compose-on-your-computer
Define a Multi-Container Docker Applicationhttps://realpython.com/offline-python-deployments-with-docker/#define-a-multi-container-docker-application
Replace Flask’s Development Web Server With Gunicornhttps://realpython.com/offline-python-deployments-with-docker/#replace-flasks-development-web-server-with-gunicorn
Run End-to-End Tests Against the Serviceshttps://realpython.com/offline-python-deployments-with-docker/#run-end-to-end-tests-against-the-services
Define a Docker-Based Continuous Integration Pipelinehttps://realpython.com/offline-python-deployments-with-docker/#define-a-docker-based-continuous-integration-pipeline
Push Code to a GitHub Repositoryhttps://realpython.com/offline-python-deployments-with-docker/#push-code-to-a-github-repository
Learn to Speak the GitHub Actions Lingohttps://realpython.com/offline-python-deployments-with-docker/#learn-to-speak-the-github-actions-lingo
Create a Workflow Using GitHub Actionshttps://realpython.com/offline-python-deployments-with-docker/#create-a-workflow-using-github-actions
Access Docker Hub Through GitHub Actions Secretshttps://realpython.com/offline-python-deployments-with-docker/#access-docker-hub-through-github-actions-secrets
Enable Branch Protection Ruleshttps://realpython.com/offline-python-deployments-with-docker/#enable-branch-protection-rules
Integrate Changes From a Feature Branchhttps://realpython.com/offline-python-deployments-with-docker/#integrate-changes-from-a-feature-branch
Next Stepshttps://realpython.com/offline-python-deployments-with-docker/#next-steps
Conclusionhttps://realpython.com/offline-python-deployments-with-docker/#conclusion
https://realpython.com/feedback/survey/article/docker-continuous-integration/liked/?from=article-sidebar
https://realpython.com/feedback/survey/article/docker-continuous-integration/disliked/?from=article-sidebar
Bartosz Zaczyńskihttps://realpython.com/offline-python-deployments-with-docker/#author
https://realpython.com/offline-python-deployments-with-docker/#reader-comments
advancedhttps://realpython.com/tutorials/advanced/
devopshttps://realpython.com/tutorials/devops/
dockerhttps://realpython.com/tutorials/docker/
flaskhttps://realpython.com/tutorials/flask/
toolshttps://realpython.com/tutorials/tools/
web-devhttps://realpython.com/tutorials/web-dev/
Get an Overview of the Project Architecturehttps://realpython.com/offline-python-deployments-with-docker/#get-an-overview-of-the-project-architecture
Set Up Docker on Your Computerhttps://realpython.com/offline-python-deployments-with-docker/#set-up-docker-on-your-computer
Develop a Page View Tracker in Flaskhttps://realpython.com/offline-python-deployments-with-docker/#develop-a-page-view-tracker-in-flask
Prepare the Environmenthttps://realpython.com/offline-python-deployments-with-docker/#prepare-the-environment
Run a Redis Server Through Dockerhttps://realpython.com/offline-python-deployments-with-docker/#run-a-redis-server-through-docker
Test the Connection to Redishttps://realpython.com/offline-python-deployments-with-docker/#test-the-connection-to-redis
Connect to Redis From Pythonhttps://realpython.com/offline-python-deployments-with-docker/#connect-to-redis-from-python
Implement and Run the Flask Application Locallyhttps://realpython.com/offline-python-deployments-with-docker/#implement-and-run-the-flask-application-locally
Test and Secure Your Web Applicationhttps://realpython.com/offline-python-deployments-with-docker/#test-and-secure-your-web-application
Cover the Source Code With Unit Testshttps://realpython.com/offline-python-deployments-with-docker/#cover-the-source-code-with-unit-tests
Check Component Interactions Through Integration Testshttps://realpython.com/offline-python-deployments-with-docker/#check-component-interactions-through-integration-tests
Test a Real-World Scenario End to End (E2E)https://realpython.com/offline-python-deployments-with-docker/#test-a-real-world-scenario-end-to-end-e2e
Perform Static Code Analysis and Security Scanninghttps://realpython.com/offline-python-deployments-with-docker/#perform-static-code-analysis-and-security-scanning
Dockerize Your Flask Web Applicationhttps://realpython.com/offline-python-deployments-with-docker/#dockerize-your-flask-web-application
Understand the Docker Terminologyhttps://realpython.com/offline-python-deployments-with-docker/#understand-the-docker-terminology
Learn the Anatomy of a Dockerfilehttps://realpython.com/offline-python-deployments-with-docker/#learn-the-anatomy-of-a-dockerfile
Choose the Base Docker Imagehttps://realpython.com/offline-python-deployments-with-docker/#choose-the-base-docker-image
Isolate Your Docker Imagehttps://realpython.com/offline-python-deployments-with-docker/#isolate-your-docker-image
Cache Your Project Dependencieshttps://realpython.com/offline-python-deployments-with-docker/#cache-your-project-dependencies
Run Tests as Part of the Build Processhttps://realpython.com/offline-python-deployments-with-docker/#run-tests-as-part-of-the-build-process
Specify the Command to Run in Docker Containershttps://realpython.com/offline-python-deployments-with-docker/#specify-the-command-to-run-in-docker-containers
Reorganize Your Dockerfile for Multi-Stage Buildshttps://realpython.com/offline-python-deployments-with-docker/#reorganize-your-dockerfile-for-multi-stage-builds
Build and Version Your Docker Imagehttps://realpython.com/offline-python-deployments-with-docker/#build-and-version-your-docker-image
Push the Image to a Docker Registryhttps://realpython.com/offline-python-deployments-with-docker/#push-the-image-to-a-docker-registry
Run a Docker Containerhttps://realpython.com/offline-python-deployments-with-docker/#run-a-docker-container
Orchestrate Containers Using Docker Composehttps://realpython.com/offline-python-deployments-with-docker/#orchestrate-containers-using-docker-compose
Set Up Docker Compose on Your Computerhttps://realpython.com/offline-python-deployments-with-docker/#set-up-docker-compose-on-your-computer
Define a Multi-Container Docker Applicationhttps://realpython.com/offline-python-deployments-with-docker/#define-a-multi-container-docker-application
Replace Flask’s Development Web Server With Gunicornhttps://realpython.com/offline-python-deployments-with-docker/#replace-flasks-development-web-server-with-gunicorn
Run End-to-End Tests Against the Serviceshttps://realpython.com/offline-python-deployments-with-docker/#run-end-to-end-tests-against-the-services
Define a Docker-Based Continuous Integration Pipelinehttps://realpython.com/offline-python-deployments-with-docker/#define-a-docker-based-continuous-integration-pipeline
Push Code to a GitHub Repositoryhttps://realpython.com/offline-python-deployments-with-docker/#push-code-to-a-github-repository
Learn to Speak the GitHub Actions Lingohttps://realpython.com/offline-python-deployments-with-docker/#learn-to-speak-the-github-actions-lingo
Create a Workflow Using GitHub Actionshttps://realpython.com/offline-python-deployments-with-docker/#create-a-workflow-using-github-actions
Access Docker Hub Through GitHub Actions Secretshttps://realpython.com/offline-python-deployments-with-docker/#access-docker-hub-through-github-actions-secrets
Enable Branch Protection Ruleshttps://realpython.com/offline-python-deployments-with-docker/#enable-branch-protection-rules
Integrate Changes From a Feature Branchhttps://realpython.com/offline-python-deployments-with-docker/#integrate-changes-from-a-feature-branch
Next Stepshttps://realpython.com/offline-python-deployments-with-docker/#next-steps
Conclusionhttps://realpython.com/offline-python-deployments-with-docker/#conclusion
Remove adshttps://realpython.com/account/join/
web developmenthttps://realpython.com/learning-paths/become-python-web-developer/
test automationhttps://realpython.com/learning-paths/test-your-python-apps/
Redis with Pythonhttps://realpython.com/python-redis/
Git and GitHubhttps://realpython.com/python-git-github-intro/
Dockerhttps://realpython.com/python-versions-docker/
Michael Hermanhttps://twitter.com/mikeherman
slideshttp://realpython.github.io/fitter-happier-docker/
defining a continuous integration pipelinehttps://realpython.com/offline-python-deployments-with-docker/#define-a-docker-based-continuous-integration-pipeline
Click here to download your Flask application and related resources https://realpython.com/bonus/docker-continuous-integration-code/
https://realpython.com/offline-python-deployments-with-docker/#get-an-overview-of-the-project-architecture
https://files.realpython.com/media/page_tracker_architecture.drawio_2.1c8cf20462ae.png
Remove adshttps://realpython.com/account/join/
https://realpython.com/offline-python-deployments-with-docker/#set-up-docker-on-your-computer
Docker, Inc.https://en.wikipedia.org/wiki/Docker,_Inc.
Dockerhttps://en.wikipedia.org/wiki/Docker_(software)
Docker CLIhttps://github.com/docker/cli
dockerdhttps://docs.docker.com/engine/reference/commandline/dockerd/
daemonhttps://en.wikipedia.org/wiki/Daemon_(computing)
Dockerhttps://www.docker.com/
Docker Classic Swarmhttps://github.com/docker-archive/classicswarm
Docker Swarm Modehttps://docs.docker.com/engine/swarm/
Docker Machinehttps://github.com/docker/machine
Docker Toolboxhttps://github.com/docker-archive/toolbox
binarieshttps://en.wikipedia.org/wiki/Binary_file
language runtimeshttps://en.wikipedia.org/wiki/Runtime_system
librarieshttps://en.wikipedia.org/wiki/Library_(computing)
artifacthttps://en.wikipedia.org/wiki/Artifact_(software_development)
continuous integrationhttps://realpython.com/python-continuous-integration/
Docker Enginehttps://docs.docker.com/engine/
Docker Desktophttps://docs.docker.com/desktop/
Docker Composehttps://docs.docker.com/compose/
orchestrating containershttps://realpython.com/offline-python-deployments-with-docker/#orchestrate-containers-using-docker-compose
official Docker documentationhttps://docs.docker.com/
paid subscriptionhttps://www.docker.com/pricing/
switching the contexthttps://docs.docker.com/desktop/faqs/linuxfaqs/#context
Ubuntuhttps://docs.docker.com/desktop/install/ubuntu/
Debianhttps://docs.docker.com/desktop/install/debian/
Fedorahttps://docs.docker.com/desktop/install/fedora/
virtual machinehttps://docs.docker.com/desktop/faqs/linuxfaqs/#why-does-docker-desktop-for-linux-run-a-vm
post-installation stepshttps://docs.docker.com/engine/install/linux-postinstall/
sudohttps://en.wikipedia.org/wiki/Sudo
https://realpython.com/offline-python-deployments-with-docker/#develop-a-page-view-tracker-in-flask
Flaskhttps://realpython.com/tutorials/flask/
https://files.realpython.com/media/screenshot-browser.5036973f0aae.png
Redishttps://redis.io/
dockerizing your Flask web applicationhttps://realpython.com/offline-python-deployments-with-docker/#dockerize-your-flask-web-application
Click here to download your Flask application and related resources https://realpython.com/bonus/docker-continuous-integration-code/
Remove adshttps://realpython.com/account/join/
https://realpython.com/offline-python-deployments-with-docker/#prepare-the-environment
Python projecthttps://realpython.com/tutorials/projects/
virtual environmenthttps://realpython.com/python-virtual-environments-a-primer/
code editorhttps://realpython.com/python-ides-code-editors-guide/
Visual Studio Codehttps://realpython.com/python-development-visual-studio-code/
PyCharmhttps://realpython.com/pycharm-guide/
terminalhttps://realpython.com/terminal-commands/
Windowshttps://realpython.com/offline-python-deployments-with-docker/#windows-1
Linux + macOShttps://realpython.com/offline-python-deployments-with-docker/#linux-macos-1
piphttps://realpython.com/what-is-pip/
Python packageshttps://realpython.com/python-modules-packages/
Windows Terminalhttps://realpython.com/python-coding-setup-windows/#discovering-the-windows-terminal
loosen your script execution policyhttps://realpython.com/python-coding-setup-windows/#loosening-your-execution-policy
pyproject.tomlhttps://realpython.com/python-pyproject-toml/
setuptoolshttps://setuptools.pypa.io/en/latest/
build back endhttps://peps.python.org/pep-0517/
src layouthttps://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/
Windowshttps://realpython.com/offline-python-deployments-with-docker/#windows-2
Linux + macOShttps://realpython.com/offline-python-deployments-with-docker/#linux-macos-2
repeatable installshttps://pip.pypa.io/en/stable/topics/repeatable-installs/
Flaskhttps://pypi.org/project/Flask/
Redishttps://pypi.org/project/redis/
freezehttps://pip.pypa.io/en/stable/cli/pip_freeze/#pip-freeze
transitive dependencieshttps://en.wikipedia.org/wiki/Transitive_dependency
requirementshttps://pip.pypa.io/en/stable/user_guide/#requirements-files
constraints filehttps://pip.pypa.io/en/stable/user_guide/#constraints-files
Pipenvhttps://realpython.com/pipenv-guide/
Poetryhttps://realpython.com/dependency-management-python-poetry/
Python Package Index (PyPI)https://pypi.org/
editable modehttps://setuptools.pypa.io/en/latest/userguide/development_mode.html
Remove adshttps://realpython.com/account/join/
https://realpython.com/offline-python-deployments-with-docker/#run-a-redis-server-through-docker
portmanteauhttps://en.wikipedia.org/wiki/Portmanteau
key-value storehttps://en.wikipedia.org/wiki/Key%E2%80%93value_database
Python dictionaryhttps://realpython.com/python-dicts/
NoSQLhttps://en.wikipedia.org/wiki/NoSQL
cachehttps://realpython.com/caching-in-django-with-redis/
relational databasehttps://en.wikipedia.org/wiki/Relational_database
volatile memoryhttps://en.wikipedia.org/wiki/Volatile_memory
persistencehttps://redis.io/docs/management/persistence/
managed servicehttps://en.wikipedia.org/wiki/Managed_services
Docker containerhttps://docs.docker.com/glossary/#container
network port numbershttps://en.wikipedia.org/wiki/Port_(computer_networking)
official Redis imagehttps://hub.docker.com/_/redis
detached mode (-d)https://docs.docker.com/language/nodejs/run-containers/#run-in-detached-mode
Docker imagehttps://docs.docker.com/glossary/#container-image
Docker Hubhttps://hub.docker.com/
https://realpython.com/offline-python-deployments-with-docker/#test-the-connection-to-redis
overview pagehttps://hub.docker.com/_/redis
Redis CLIhttps://redis.io/docs/ui/cli/
Docker networkshttps://docs.docker.com/network/
bridge networkhttps://docs.docker.com/network/bridge/
ephemeral containerhttps://docs.docker.com/develop/develop-images/dockerfile_best-practices/#create-ephemeral-containers
standard streamshttps://en.wikipedia.org/wiki/Standard_streams
hostnameshttps://en.wikipedia.org/wiki/Hostname
deprecatedhttps://docs.docker.com/network/links/
Python REPLhttps://realpython.com/python-repl/
Redis commandshttps://redis.io/commands/
Sourcehttps://docs.docker.com/docker-for-mac/networking/#i-cannot-ping-my-containers
Sourcehttps://docs.docker.com/docker-for-windows/networking/#i-cannot-ping-my-containers
IP addresshttps://en.wikipedia.org/wiki/IP_address
netcathttps://en.wikipedia.org/wiki/Netcat
Telnethttps://en.wikipedia.org/wiki/Telnet
PuTTYhttps://en.wikipedia.org/wiki/PuTTY
TLS supporthttps://redis.io/docs/management/security/encryption/
port mappinghttps://docs.docker.com/desktop/networking/#port-mapping
localhosthttps://en.wikipedia.org/wiki/Localhost
INCRhttps://redis.io/commands/incr/
Remove adshttps://realpython.com/account/join/
https://realpython.com/offline-python-deployments-with-docker/#connect-to-redis-from-python
JSONhttps://realpython.com/python-json/
Go templateshttps://docs.docker.com/config/formatting/
Windowshttps://realpython.com/offline-python-deployments-with-docker/#windows-3
Linux + macOShttps://realpython.com/offline-python-deployments-with-docker/#linux-macos-3
Redis clienthttps://redis.readthedocs.io/en/latest/connections.html#redis.Redis
specially formatted stringhttps://redis.readthedocs.io/en/latest/connections.html#redis.Redis.from_url
https://realpython.com/offline-python-deployments-with-docker/#implement-and-run-the-flask-application-locally
HTTP GEThttps://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET
endpointhttps://en.wikipedia.org/wiki/Communication_endpoint
Flask development serverhttps://flask.palletsprojects.com/en/2.2.x/server/
debug modehttps://flask.palletsprojects.com/en/2.2.x/debugging/
0.0.0.0https://en.wikipedia.org/wiki/0.0.0.0
loopbackhttps://en.wikipedia.org/wiki/Loopback
Remove adshttps://realpython.com/account/join/
https://realpython.com/offline-python-deployments-with-docker/#test-and-secure-your-web-application
https://realpython.com/offline-python-deployments-with-docker/#cover-the-source-code-with-unit-tests
Unit testinghttps://en.wikipedia.org/wiki/Unit_testing
test-driven developmenthttps://realpython.com/python-hash-table/#take-a-crash-course-in-test-driven-development
pytesthttps://realpython.com/pytest-python-testing/
optional dependencieshttps://setuptools.pypa.io/en/latest/userguide/dependency_management.html#optional-dependencies
distribution packagehttps://packaging.python.org/en/latest/glossary/#term-Distribution-Package
filename expansionhttps://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html
namespace packagehttps://realpython.com/python-namespace-package/
happy pathhttps://en.wikipedia.org/wiki/Happy_path
test clienthttps://werkzeug.palletsprojects.com/en/2.2.x/test/
test fixturehttps://en.wikipedia.org/wiki/Test_fixture#Software
decoratorhttps://realpython.com/primer-on-python-decorators/
mockhttps://realpython.com/python-mock-library/
refactorhttps://realpython.com/python-refactoring/
dependency injectionhttps://en.wikipedia.org/wiki/Dependency_injection
global scopehttps://realpython.com/python-scope-legb-rule/#modules-the-global-scope
test casehttps://en.wikipedia.org/wiki/Test_case
singletonhttps://en.wikipedia.org/wiki/Singleton_pattern
cachehttps://realpython.com/lru-cache-python/
@patchhttps://docs.python.org/3/library/unittest.mock.html#unittest.mock.patch
Given-When-Thenhttps://en.wikipedia.org/wiki/Given-When-Then
behavior-driven developmenthttps://en.wikipedia.org/wiki/Behavior-driven_development
memeshttps://twitter.com/timbray/status/822470746773409794
Remove adshttps://realpython.com/account/join/
https://realpython.com/offline-python-deployments-with-docker/#check-component-interactions-through-integration-tests
Integration testinghttps://en.wikipedia.org/wiki/Integration_testing
pytest-timeouthttps://pypi.org/project/pytest-timeout/
test suitehttps://en.wikipedia.org/wiki/Test_suite
conftest.pyhttps://docs.pytest.org/en/6.2.x/fixture.html#conftest-py-sharing-fixtures-across-multiple-files
false negative errorhttps://en.wikipedia.org/wiki/False_positives_and_false_negatives#False_negative_error
side effecthttps://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.side_effect
exceptionhttps://realpython.com/python-exceptions/
negative testhttps://en.wikipedia.org/wiki/Negative_testing
HTTP status code 500https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#500
loghttps://realpython.com/python-logging/
loggerhttps://flask.palletsprojects.com/en/2.2.x/api/#flask.Flask.logger
inheritancehttps://realpython.com/python-classes/#using-inheritance-and-building-class-hierarchies
Remove adshttps://realpython.com/account/join/
https://realpython.com/offline-python-deployments-with-docker/#test-a-real-world-scenario-end-to-end-e2e
broad stack testinghttps://martinfowler.com/bliki/BroadStackTest.html
software stackhttps://en.wikipedia.org/wiki/Solution_stack
deployment environmenthttps://en.wikipedia.org/wiki/Deployment_environment
Google’s testing pyramidhttps://en.wikipedia.org/wiki/Test_automation#Unit,_Integration,_and_End-to-End_levels
requestshttps://realpython.com/python-requests/
command-line argumenthttps://realpython.com/python-command-line-arguments/
environment variableshttps://en.wikipedia.org/wiki/Environment_variable
argument parserhttps://docs.pytest.org/en/7.1.x/reference/reference.html#pytest.Parser
argparsehttps://realpython.com/command-line-interfaces-python-argparse/
session-scopedhttps://docs.pytest.org/en/6.2.x/fixture.html#fixture-scopes
software quality assurancehttps://en.wikipedia.org/wiki/Software_quality_assurance
code reviewhttps://en.wikipedia.org/wiki/Code_review
Remove adshttps://realpython.com/account/join/
https://realpython.com/offline-python-deployments-with-docker/#perform-static-code-analysis-and-security-scanning
static code analysishttps://en.wikipedia.org/wiki/Static_program_analysis
peer reviewhttps://en.wikipedia.org/wiki/Software_peer_review
PEP 8https://realpython.com/python-pep8/
blackhttps://black.readthedocs.io/en/stable/
isorthttps://pycqa.github.io/isort/
official recommendationhttps://peps.python.org/pep-0008/#imports
flake8https://flake8.pycqa.org/en/latest/
linthttps://realpython.com/python-code-quality/#linters
code smellshttps://en.wikipedia.org/wiki/Code_smell
pylinthttps://pylint.readthedocs.io/en/latest/
categorieshttps://pylint.readthedocs.io/en/latest/user_guide/messages/index.html#messages-categories
C0116https://pylint.readthedocs.io/en/latest/user_guide/messages/convention/missing-function-docstring.html
E1101https://pylint.readthedocs.io/en/latest/user_guide/messages/error/no-member.html
error codehttps://en.wikipedia.org/wiki/Exit_status
GitHub exposed its private keyhttps://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/#what-happened-and-what-actions-have-we-taken
vulnerabilityhttps://en.wikipedia.org/wiki/Vulnerability_(computing)
bandithttps://bandit.readthedocs.io/en/latest/
name-main idiomhttps://realpython.com/if-name-main-python/
execution of arbitrary codehttps://bandit.readthedocs.io/en/1.7.5/plugins/b201_flask_debug_true.html
binding to all network interfaceshttps://bandit.readthedocs.io/en/1.7.5/plugins/b104_hardcoded_bind_all_interfaces.html
Remove adshttps://realpython.com/account/join/
https://realpython.com/offline-python-deployments-with-docker/#dockerize-your-flask-web-application
https://realpython.com/offline-python-deployments-with-docker/#understand-the-docker-terminology
runtime environmenthttps://en.wikipedia.org/wiki/Runtime_system
processhttps://en.wikipedia.org/wiki/Process_(computing)
microservicehttps://realpython.com/python-microservices-grpc/
scale uphttps://en.wikipedia.org/wiki/Scalability#VERTICAL-SCALING
Vagranthttps://en.wikipedia.org/wiki/Vagrant_(software)
VirtualBoxhttps://en.wikipedia.org/wiki/VirtualBox
kernelhttps://en.wikipedia.org/wiki/Kernel_(operating_system)
hypervisorhttps://en.wikipedia.org/wiki/Hypervisor
https://realpython.com/offline-python-deployments-with-docker/#learn-the-anatomy-of-a-dockerfile
specific formathttps://docs.docker.com/engine/reference/builder/
layershttps://docs.docker.com/glossary/#layer
Remove adshttps://realpython.com/account/join/
https://realpython.com/offline-python-deployments-with-docker/#choose-the-base-docker-image
FROMhttps://docs.docker.com/engine/reference/builder/#from
official Python imagehttps://hub.docker.com/_/python
all the available tagshttps://hub.docker.com/_/python/tags
Debian Bullseyehttps://en.wikipedia.org/wiki/Debian_version_history#Debian_11_(Bullseye)
Python 3.11.2https://realpython.com/python311-new-features/
RUNhttps://docs.docker.com/engine/reference/builder/#run
https://realpython.com/offline-python-deployments-with-docker/#isolate-your-docker-image
superuserhttps://en.wikipedia.org/wiki/Superuser
working directoryhttps://en.wikipedia.org/wiki/Working_directory
home directoryhttps://en.wikipedia.org/wiki/Home_directory
PATHhttps://en.wikipedia.org/wiki/PATH_(variable)
https://realpython.com/offline-python-deployments-with-docker/#cache-your-project-dependencies
COPYhttps://docs.docker.com/engine/reference/builder/#copy
chownhttps://en.wikipedia.org/wiki/Chown
.dockerignorehttps://docs.docker.com/engine/reference/builder/#dockerignore-file
https://realpython.com/offline-python-deployments-with-docker/#run-tests-as-part-of-the-build-process
continuous integrationhttps://en.wikipedia.org/wiki/Continuous_integration
C0114https://pylint.readthedocs.io/en/stable/user_guide/messages/convention/missing-module-docstring.html
C0116https://pylint.readthedocs.io/en/stable/user_guide/messages/convention/missing-function-docstring.html
R1705https://pylint.readthedocs.io/en/stable/user_guide/messages/refactor/no-else-return.html
https://realpython.com/offline-python-deployments-with-docker/#specify-the-command-to-run-in-docker-containers
CMDhttps://docs.docker.com/engine/reference/builder/#cmd
subprocess.run()https://realpython.com/python-subprocess/
https://realpython.com/offline-python-deployments-with-docker/#reorganize-your-dockerfile-for-multi-stage-builds
run an end-to-end testhttps://realpython.com/offline-python-deployments-with-docker/#run-end-to-end-tests-against-the-services
multi-stage buildshttps://docs.docker.com/build/building/multi-stage/
Python wheelhttps://realpython.com/python-wheels/
https://realpython.com/offline-python-deployments-with-docker/#build-and-version-your-docker-image
major, minor, and patchhttps://semver.org/
SHA-1 hashhttps://en.wikipedia.org/wiki/SHA-1
Unix timehttps://en.wikipedia.org/wiki/Unix_time
.gitignorehttps://git-scm.com/docs/gitignore
Windowshttps://realpython.com/offline-python-deployments-with-docker/#windows-4
Linux + macOShttps://realpython.com/offline-python-deployments-with-docker/#linux-macos-4
gitignore.iohttps://www.toptal.com/developers/gitignore/
GitHub’s gitignorehttps://github.com/github/gitignore
https://realpython.com/offline-python-deployments-with-docker/#push-the-image-to-a-docker-registry
version controlhttps://en.wikipedia.org/wiki/Version_control
distributed version controlhttps://en.wikipedia.org/wiki/Distributed_version_control
on premiseshttps://en.wikipedia.org/wiki/On-premises_software
open-source distributionhttps://hub.docker.com/_/registry
autobuildhttps://docs.docker.com/docker-hub/builds/
webhookhttps://docs.docker.com/docker-hub/webhooks/
Docker Hubhttps://hub.docker.com/
https://files.realpython.com/media/docker_hub.912fd6ac373d.png
https://files.realpython.com/media/docker_hub2.359dd2359251.png
two-factor authenticationhttps://en.wikipedia.org/wiki/Multi-factor_authentication
access tokenhttps://hub.docker.com/settings/security?generateToken=true
documentationhttps://docs.docker.com/docker-hub/access-tokens/
https://files.realpython.com/media/docker_hub3.69a099d38e54.png
https://realpython.com/offline-python-deployments-with-docker/#run-a-docker-container
HTTP protocol’shttps://en.wikipedia.org/wiki/HTTP
Windowshttps://realpython.com/offline-python-deployments-with-docker/#windows-5
Linux + macOShttps://realpython.com/offline-python-deployments-with-docker/#linux-macos-5
volumehttps://docs.docker.com/storage/volumes/
official Docker image of Redis on GitHubhttps://github.com/docker-library/redis/blob/master/7.0/Dockerfile
a layerhttps://github.com/docker-library/redis/blob/e331696f8226fb5b89d7bd190fecbfaea3cac571/7.0/Dockerfile#L113
mount pointhttps://docs.docker.com/engine/reference/builder/#volume
Windowshttps://realpython.com/offline-python-deployments-with-docker/#windows-6
Linux + macOShttps://realpython.com/offline-python-deployments-with-docker/#linux-macos-6
monitoringhttps://en.wikipedia.org/wiki/Event_monitoring
load balancinghttps://en.wikipedia.org/wiki/Load_balancing_(computing)
auto-scalinghttps://en.wikipedia.org/wiki/Autoscaling
https://realpython.com/offline-python-deployments-with-docker/#orchestrate-containers-using-docker-compose
Djangohttps://realpython.com/learning-paths/django-web-development/
FastAPIhttps://realpython.com/fastapi-python-web-apis/
Flaskhttps://realpython.com/learning-paths/flask-by-example/
Angularhttps://realpython.com/flask-by-example-integrating-flask-and-angularjs/
Reacthttps://realpython.com/the-ultimate-flask-front-end/#react-explained
Vuehttps://realpython.com/python-django-blog/#step-5-set-up-vuejs
Memcachedhttps://realpython.com/python-memcache-efficient-caching/
Redishttps://realpython.com/python-redis/
Kafkahttps://realpython.com/queue-in-python/#apache-kafka-kafka-python3
RabbitMQhttps://realpython.com/queue-in-python/#rabbitmq-pika
MySQLhttps://realpython.com/python-mysql/
PostgreSQLhttps://realpython.com/python-sql-libraries/#postgresql
SQLitehttps://realpython.com/python-sqlite-sqlalchemy/
orchestratehttps://en.wikipedia.org/wiki/Orchestration_(computing)
Docker Composehttps://docs.docker.com/compose/
Kuberneteshttps://en.wikipedia.org/wiki/Kubernetes
https://realpython.com/offline-python-deployments-with-docker/#set-up-docker-compose-on-your-computer
Compose pluginhttps://docs.docker.com/compose/install/#scenario-two-install-the-compose-plugin
Gohttps://go.dev/
https://realpython.com/offline-python-deployments-with-docker/#define-a-multi-container-docker-application
C++https://realpython.com/python-vs-cpp/
Javahttps://realpython.com/java-vs-python/
Windowshttps://realpython.com/offline-python-deployments-with-docker/#windows-7
Linux + macOShttps://realpython.com/offline-python-deployments-with-docker/#linux-macos-7
YAMLhttps://yaml.org/
YAML: The Missing Battery in Pythonhttps://realpython.com/python-yaml/
Compose filehttps://docs.docker.com/compose/compose-file/
known quirkhttps://realpython.com/python-yaml/#unique-features
sexagesimal numberhttps://en.wikipedia.org/wiki/Sexagesimal
Compose specificationhttps://docs.docker.com/compose/compose-file/
Compose file versioninghttps://docs.docker.com/compose/compose-file/compose-versioning/
prunehttps://docs.docker.com/engine/reference/commandline/system_prune/
https://realpython.com/offline-python-deployments-with-docker/#replace-flasks-development-web-server-with-gunicorn
entry pointhttps://docs.docker.com/engine/reference/builder/#entrypoint
Bashhttps://en.wikipedia.org/wiki/Bash_(Unix_shell)
SSHhttps://en.wikipedia.org/wiki/Secure_Shell
deploying to productionhttps://flask.palletsprojects.com/en/2.2.x/deploying/
Gunicorn (Green Unicorn)https://gunicorn.org/
Web Server Gateway Interface (WSGI)https://en.wikipedia.org/wiki/Web_Server_Gateway_Interface
https://realpython.com/offline-python-deployments-with-docker/#run-end-to-end-tests-against-the-services
staginghttps://en.wikipedia.org/wiki/Staging_area
anonymized datahttps://en.wikipedia.org/wiki/Data_anonymization
profileshttps://docs.docker.com/compose/profiles/
https://realpython.com/offline-python-deployments-with-docker/#define-a-docker-based-continuous-integration-pipeline
continuous integration (CI)https://martinfowler.com/articles/continuousIntegration.html
Feature toggleshttps://en.wikipedia.org/wiki/Feature_toggle
workflowshttps://www.atlassian.com/git/tutorials/comparing-workflows
Trunk-Based Developmenthttps://trunkbaseddevelopment.com/
GitHub Flowhttps://docs.github.com/en/get-started/quickstart/github-flow
Forking Workflowhttps://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow
Release Branchinghttps://martinfowler.com/articles/branching-patterns.html#release-branch
Git Flowhttps://nvie.com/posts/a-successful-git-branching-model/
open-sourcehttps://en.wikipedia.org/wiki/Open_source
feature branch workflowhttps://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow
branch offhttps://en.wikipedia.org/wiki/Branching_(version_control)
announcedhttps://github.com/github/renaming
GitHub repository settingshttps://github.com/settings/repositories
pull requesthttps://en.wikipedia.org/wiki/Distributed_version_control#Pull_requests
Terraformhttps://www.terraform.io/
GitHub Codespaceshttps://docs.github.com/en/codespaces
continuous deliveryhttps://en.wikipedia.org/wiki/Continuous_delivery
continuous deploymenthttps://en.wikipedia.org/wiki/Continuous_deployment
CircleCIhttps://circleci.com/
Jenkinshttps://www.jenkins.io/
Travishttps://www.travis-ci.com/
https://realpython.com/offline-python-deployments-with-docker/#push-code-to-a-github-repository
Sign uphttps://github.com/signup
sign inhttps://github.com/login
about billing for GitHub Actionshttps://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions
enable branch protection ruleshttps://realpython.com/offline-python-deployments-with-docker/#enable-branch-protection-rules
https://realpython.com/offline-python-deployments-with-docker/#learn-to-speak-the-github-actions-lingo
GitHub Actionshttps://docs.github.com/en/actions
GitHub Marketplacehttps://github.com/marketplace?type=actions
building and pushing Docker imageshttps://github.com/marketplace/actions/build-and-push-docker-images
Dockerhttps://github.com/docker
DevOpshttps://realpython.com/learning-paths/python-devops/
GitHub’s web-based editorhttps://docs.github.com/en/repositories/working-with-files/managing-files/editing-files
https://realpython.com/offline-python-deployments-with-docker/#create-a-workflow-using-github-actions
README filehttps://dbader.org/blog/write-a-great-readme-for-your-github-project
documentationhttps://realpython.com/documenting-python-code/
actions/checkouthttps://github.com/actions/checkout
https://realpython.com/offline-python-deployments-with-docker/#access-docker-hub-through-github-actions-secrets
docker/login-actionhttps://github.com/docker/login-action
github contexthttps://docs.github.com/en/actions/learn-github-actions/contexts#github-context
JavaScripthttps://realpython.com/python-vs-javascript/
secrets contexthttps://docs.github.com/en/actions/learn-github-actions/contexts#secrets-context
https://files.realpython.com/media/secrets.b7e62f0e5830.png
GitHub Packageshttps://github.com/features/packages
replacement for Docker Hubhttps://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry
docker/build-push-actionhttps://github.com/docker/build-push-action
branch protectionhttps://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/about-protected-branches
https://realpython.com/offline-python-deployments-with-docker/#enable-branch-protection-rules
https://files.realpython.com/media/rule_master.8167b2b061aa.png
https://files.realpython.com/media/rule_approvals.4cc8505f0715.png
https://files.realpython.com/media/rule_status_check.6e4a5e464e77.png
https://files.realpython.com/media/rule_dont_allow.3a38d146c315.png
https://realpython.com/offline-python-deployments-with-docker/#integrate-changes-from-a-feature-branch
Docker-based continuous integration pipelinehttps://realpython.com/offline-python-deployments-with-docker/#define-a-docker-based-continuous-integration-pipeline
Windowshttps://realpython.com/offline-python-deployments-with-docker/#windows-8
Linux + macOShttps://realpython.com/offline-python-deployments-with-docker/#linux-macos-8
pensive facehttps://emojipedia.org/pensive-face/
thinking facehttps://emojipedia.org/thinking-face/
https://files.realpython.com/media/failed_pr2.e4e611e3f3cf.png
debug modehttps://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging
conflicthttps://www.atlassian.com/git/tutorials/using-branches/merge-conflicts
https://files.realpython.com/media/pr_update2.f48575db3caa.png
https://files.realpython.com/media/pr_success.0d326c26e9ad.png
https://files.realpython.com/media/docker_hub_push.93959f48b437.png
https://realpython.com/offline-python-deployments-with-docker/#next-steps
blue-green deploymentshttps://en.wikipedia.org/wiki/Blue-green_deployment
canary releaseshttps://en.wikipedia.org/wiki/Feature_toggle#Canary_release
A/B testinghttps://en.wikipedia.org/wiki/A/B_testing
https://realpython.com/offline-python-deployments-with-docker/#conclusion
Click here to download your Flask application and related resources https://realpython.com/bonus/docker-continuous-integration-code/
https://realpython.com/feedback/survey/article/docker-continuous-integration/liked/?from=article-footer
https://realpython.com/feedback/survey/article/docker-continuous-integration/disliked/?from=article-footer
https://realpython.com/team/bzaczynski/
» More about Bartoszhttps://realpython.com/team/bzaczynski/
https://realpython.com/team/asantos/
Aldrenhttps://realpython.com/team/asantos/
https://realpython.com/team/gahjelle/
Geir Arnehttps://realpython.com/team/gahjelle/
https://realpython.com/team/kfinegan/
Katehttps://realpython.com/team/kfinegan/
https://realpython.com/team/pacsany/
Philipphttps://realpython.com/team/pacsany/
Level Up Your Python Skills »https://realpython.com/account/join/?utm_source=rp_article_footer&utm_content=docker-continuous-integration
Level Up Your Python Skills »https://realpython.com/account/join/?utm_source=rp_article_footer&utm_content=docker-continuous-integration
https://realpython.com/feedback/survey/article/docker-continuous-integration/liked/?from=article-comments
https://realpython.com/feedback/survey/article/docker-continuous-integration/disliked/?from=article-comments
LinkedInhttps://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Frealpython.com%2Fdocker-continuous-integration%2F
Twitterhttps://twitter.com/intent/tweet/?text=Interesting%20Python%20article%20on%20%40realpython%3A%20Build%20Robust%20Continuous%20Integration%20With%20Docker%20and%20Friends&url=https%3A%2F%2Frealpython.com%2Fdocker-continuous-integration%2F
Blueskyhttps://bsky.app/intent/compose?text=Interesting%20Python%20article%20on%20%40realpython.com%3A%20Build%20Robust%20Continuous%20Integration%20With%20Docker%20and%20Friends%20https%3A%2F%2Frealpython.com%2Fdocker-continuous-integration%2F
Facebookhttps://facebook.com/sharer/sharer.php?u=https%3A%2F%2Frealpython.com%2Fdocker-continuous-integration%2F
Get tips for asking good questionshttps://realpython.com/python-beginner-tips/#tip-9-ask-good-questions
get answers to common questions in our support portalhttps://support.realpython.com
Real Python Community Chathttps://realpython.com/community/
“Office Hours” Live Q&A Sessionhttps://realpython.com/office-hours/
advancedhttps://realpython.com/tutorials/advanced/
devopshttps://realpython.com/tutorials/devops/
dockerhttps://realpython.com/tutorials/docker/
flaskhttps://realpython.com/tutorials/flask/
toolshttps://realpython.com/tutorials/tools/
web-devhttps://realpython.com/tutorials/web-dev/
A Close Look at a FastAPI Example Applicationhttps://realpython.com/fastapi-python-web-apis/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=docker-continuous-integration
Introduction to Git and GitHub for Python Developershttps://realpython.com/python-git-github-intro/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=docker-continuous-integration
Build an LLM RAG Chatbot With LangChainhttps://realpython.com/build-llm-rag-chatbot-with-langchain/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=docker-continuous-integration
Managing Python Projects With uv: An All-in-One Solutionhttps://realpython.com/python-uv/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=docker-continuous-integration
How to Use Google's Gemini CLI for AI Code Assistancehttps://realpython.com/how-to-use-gemini-cli/?utm_source=realpython&utm_medium=web&utm_campaign=related-post&utm_content=docker-continuous-integration
https://realpython.com/account/signup/?intent=continue_reading&utm_source=rp&utm_medium=web&utm_campaign=rwn&utm_content=v1&next=%2Fdocker-continuous-integration%2F
Continue »https://realpython.com/account/signup/?intent=continue_reading&utm_source=rp&utm_medium=web&utm_campaign=rwn&utm_content=v1&next=%2Fdocker-continuous-integration%2F
Sign-Inhttps://realpython.com/account/login/?next=/docker-continuous-integration/
Start Herehttps://realpython.com/start-here/
Learning Resourceshttps://realpython.com/search
Code Mentorhttps://realpython.com/mentor/
Python Referencehttps://realpython.com/ref/
Python Cheat Sheethttps://realpython.com/cheatsheets/python/
Support Centerhttps://support.realpython.com/
Learning Pathshttps://realpython.com/learning-paths/
Quizzes & Exerciseshttps://realpython.com/quizzes/
Browse Topicshttps://realpython.com/tutorials/all/
Live Courseshttps://realpython.com/live/
Bookshttps://realpython.com/books/
Podcasthttps://realpython.com/podcasts/rpp/
Newsletterhttps://realpython.com/newsletter/
Community Chathttps://realpython.com/community/
Office Hourshttps://realpython.com/office-hours/
Learner Storieshttps://realpython.com/learner-stories/
Plans & Pricinghttps://realpython.com/account/join/
Team Planshttps://realpython.com/account/join-team/
For Businesshttps://realpython.com/account/join-team/inquiry/
For Schoolshttps://realpython.com/account/join-team/education-inquiry/
Reviewshttps://realpython.com/learner-stories/
About Ushttps://realpython.com/about/
Teamhttps://realpython.com/team/
Mission & Valueshttps://realpython.com/mission/
Editorial Guidelineshttps://realpython.com/editorial-guidelines/
Sponsorshipshttps://realpython.com/sponsorships/
Careershttps://realpython.workable.com
Press Kithttps://realpython.com/media-kit/
Merchhttps://realpython.com/merch
https://www.youtube.com/realpython
https://x.com/realpython
https://www.linkedin.com/company/realpython-com
https://www.facebook.com/LearnRealPython
https://github.com/realpython/
Privacy Policyhttps://realpython.com/privacy-policy/
Terms of Usehttps://realpython.com/terms/
Securityhttps://realpython.com/security/
Contacthttps://realpython.com/contact/
https://realpython.com/

Viewport: width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover

Robots: max-image-preview:large


URLs of crawlers that visited me.