Docker and Kubernetes: The Complete Guide
- Descrição
- Currículo
- FAQ
- Revisões
If you’re tired of spinning your wheels learning how to deploy web applications, this is the course for you.
CI+CD Workflows? You will learn it. AWS Deployment? Included. Kubernetes in Production? Of course!
This is the ultimate course to learn how to deploy any web application you can possibly dream up. Docker and Kubernetes are the newest tech in the Dev Ops world, and have dramatically changed the flow of creating and deploying web apps. Docker is a technology that allows applications to run in constructs called ‘containers’, while Kubernetes allows for many different ‘containers’ to run in coordination.
Docker from Scratch!
In this course you’ll learn Docker from absolute fundamentals, beginning by learning the answer to basic questions such as “What is a container?” and “How does a container work?”. From the very first few lectures, we will do a deep dive on the inner workings of containers, so you get a core understanding of exactly how they are implemented. Once you understand what a container is, you’ll learn how to work with them using basic Docker CLI commands. After that, you’ll apply your new-found mastery of the Docker CLI to build your own custom images, effectively ‘Dockerizing’ your own personal applications.
CI + CD Pipelines
Of course, no course on Docker would be complete without a full understanding of common Continuous Integration and Continuous Deployment patterns. You will learn how to implement a full CI + CD workflow using Github, Travis CI, and Amazon Web Services, creating a pipeline that automatically deploys your code every time you push your latest changes to Github!
Multi-Container Deployments on AWS!
After building a deployment pipeline, you’ll apply it to master both single-container and multi-container deployments on Amazon Web Services. You will construct a multi-container application utilizing Node, React, Redis, and Postgres, and see the amazing power of containers in action (Note: all Javascript coding in this course is optional, the full source code is provided if you don’t want to write JS).
Kubernetes!
Finally, you will tackle Kubernetes, a production-grade system for managing complex applications with many different running containers. You will learn the right way to build a Kubernetes Cluster – this course doesn’t have any of those annoying “don’t do this in production” comments! You will first build a Kubernetes Cluster on your local machine, then eventually move it over to a cloud provider. You’ll even learn how to set up HTTPS on Kubernetes, which is harder than it sounds!
Here’s what you’ll do:
-
Learn Docker from scratch, no previous experience required
-
Build your own custom images tailored to your applications
-
Master the Docker CLI to inspect and debug running containers
-
Understand how Docker works behind the scenes, and what a container is
-
Build a CI + CD pipeline from scratch with Github, Travis CI, and AWS
-
Automatically deploy your code when it is pushed to Github!
-
Build a complex multi-container application from scratch and deploy it to AWS
-
Understand the purpose and theory of Kubernetes
-
Deploy a production-ready Kubernetes Cluster to Google Cloud
-
1Finished Code and DiagramsTexto
-
2Join Our Community!Texto
-
3Why Use Docker?Vídeo Aula
Dive into the core purpose of Docker: simplifying software installation and execution on various systems, including personal and cloud-based platforms. Explore the common challenges faced when installing software without Docker, and witness a live demonstration of the ease with which Docker allows for setting up an instance of Redis, an in-memory data store frequently used in this course.
-
4What is Docker?Vídeo Aula
Explore the core concepts of Docker, delving into the ecosystem encompassing various tools and software that facilitate creating and running containers. Grasp the distinction between a Docker image and a container, with an image as the packaged dependencies and configuration for a program, and a container as the instance of running that image, each with isolated system resources.
-
5Docker for Mac/WindowsVídeo Aula
Learn to set up and use Docker for Windows or Docker for Mac, depending on the operating system. The session delves into the Docker client (Docker CLI) for interacting with Docker commands in the terminal and the Docker server (Docker daemon), which manages containers and images. Explore these essential Docker tools to enhance understanding of image and container manipulation.
-
6Installing Docker on macOSTexto
-
7Installing Docker with WSL on Windows 10/11Texto
-
8Installing Docker on LinuxTexto
-
9Using the Docker ClientVídeo Aula
Explore the essentials of Docker's functionality by running the first Docker command, `Docker run hello-world`. Understand the process that occurs behind the scenes, including the use of Docker client and server, image caching, and interaction with Docker Hub. Learn the significance of container instantiation from an image and observe how subsequent runs are quicker due to local image caching.
-
10But Really...What's a Container?Vídeo Aula
Explore the fundamental concepts of containers by understanding the role of the operating system kernel, system calls, and how they interact with hardware resources. Delve into the mechanics of container creation through name spacing and control groups, and grasp how an operating system feature isolates resources for processes, essentially building what is known as a container. Learn how Docker images are transformed into running containers, completing the understanding of the containerization process.
-
11How's Docker Running on Your Computer?Vídeo Aula
Learn how Docker enables running containers on non-Linux operating systems like Windows and macOS through a Linux virtual machine. Understand the significance of name spacing and control groups in resource allocation, and discover how the Docker client interacts with the Linux kernel to manage container processes. Dive deeper into the internals of Docker in the next section.
-
12Images and ContainersQuestionário
-
13Docker Run in DetailVídeo Aula
Learn the basics of interacting with Docker containers and images using the Docker client or Docker CLI. Explore essential commands, including the `Docker run` command, to understand the process of creating and running containers from images. Delve into the mechanics of containers and the subtleties of the `run` command for a deeper comprehension of Docker's functionality.
-
14Overriding Default CommandsVídeo Aula
Delve into advanced usage of the Docker Run command, focusing on overriding the default startup commands of Docker images. Learn the practical application by using the Busybox image to execute alternative commands like 'echo' and 'ls' inside containers, and understand the importance of an image's file system to these operations. Explore the limitations when using images without the required executables for certain commands.
-
15Listing Running ContainersVídeo Aula
Explore the `docker ps` command to list running containers on a machine. Learn how to use Docker to run and manage the lifecycle of a container, including starting a persistent `BusyBox` container with a `ping` command and observing its continuous output. Delve into the output details such as container ID, image, status, ports, and the randomly generated name of the container.
-
16Container LifecycleVídeo Aula
Understand the lifecycle of a Docker container by exploring the difference between creating and starting containers. The video examines the distinct commands `Docker create` and `Docker start`, explaining how they separately prepare the filesystem snapshot and execute the container's startup command. Additionally, uncover the functionality of attaching to container output with the `-a` flag in Docker start.
-
17Restarting Stopped ContainersVídeo Aula
Explore container life cycles through Docker commands, understanding how to inspect container status using Docker PS, and learning to manage stopped containers. Delve into the process of starting and stopping containers, grasping the persistence of a container's default command across restarts, and highlighting why mastering container lifecycle is crucial for debugging and troubleshooting in Docker.
-
18Removing Stopped ContainersVídeo Aula
Learn how to free disk space by using `Docker system prune` to delete stopped containers and clear the build cache. Understand the implications of removing these items, including the need to re-download images from Docker Hub and how using the prune command can optimize your system when you're not actively working with Docker.
-
19Retrieving Log OutputsVídeo Aula
Gain an understanding of managing Docker containers, including creating and starting containers, as well as retrieving output without needing the `-a` flag using the `Docker logs` command. Learn how to inspect container output to aid in debugging and setting up new containers with `Docker logs`, providing a comprehensive way to view what has occurred within a stopped container.
-
20Stopping ContainersVídeo Aula
Explore the nuances of managing Docker containers that persist in executing continuous commands, like the ping command. Learn the differences between 'Docker stop' and 'Docker kill' commands, discover how they signal the container processes, and understand the fallback mechanism Docker employs when a container does not shut down in a timely manner.
-
21Multi-Command ContainersVídeo Aula
Explore the peculiarities of interacting with Redis when it's run as a Docker container. Dive into the normal usage of Redis with Redis CLI and compare it with the challenges faced when utilizing Redis CLI to connect with a Redis instance inside a Docker container, leading up to a discussion on executing commands within a running container.
-
22Executing Commands in Running ContainersVídeo Aula
Explore the use of the Docker exec command to execute additional commands inside an active Docker container, such as launching the Redis CLI within the Redis server container. Understand the significance of the '-IT' flag that enables keyboard input and the consequences of omitting it during command execution.
-
23The Purpose of the IT FlagVídeo Aula
Deepen understanding of the '-it' flag used with Docker commands to interact with containers. Learn how this flag attaches a terminal session to the running process's standard input, output, and error streams in a Linux environment, which facilitates communication with tools like Redis CLI within Docker containers. Explore the effects of separating '-i' and '-t' to see how text formatting and terminal feedback changes.
-
24Getting a Command Prompt in a ContainerVídeo Aula
Explore how to gain terminal access to a running Docker container without repetitive Docker exec commands. Learn to use the Docker exec command with the -it flag and 'sh' for shell access, allowing for convenient direct execution of Unix commands within the container, a crucial skill for effective Docker development and debugging.
-
25Starting with a ShellVídeo Aula
Discover how to launch an interactive shell inside a Docker container using either the 'Docker exec' command for running containers or the 'Docker run' command for new containers. Learn the implications of starting a shell upon container initialization and explore container internals without running default processes. Understand when to use each method for investigating and managing Docker containers effectively.
-
26Container IsolationVídeo Aula
Understand the isolation of Docker containers through hands-on demonstrations. Learn that containers do not automatically share file systems, contrary to some assumptions. Explore the independence of containers' data by creating files in separate container instances, showcasing the discrete nature of their storage and the clear boundaries set by Docker's namespacing feature.
-
27Creating Docker ImagesVídeo Aula
Discover how to build custom Docker images by crafting a Docker file with specific configurations to define container behavior, including the software it contains and its startup command. Learn the syntax and commands necessary to create personalized containers and images using the Docker CLI and Docker server for running applications.
-
28Buildkit for Docker DesktopTexto
-
29Building a DockerfileVídeo Aula
Explore the creation of a custom Docker image by constructing a Dockerfile that will build a Redis server. The video outlines steps such as setting up a base image, installing dependencies, and defining startup commands in the Dockerfile. Then, witness the building and running of the new image through the terminal to solidify understanding of the Docker build process.
-
30Dockerfile TeardownVídeo Aula
Explore the intricacies of Docker files by dissecting the structure and purpose of key instructions: FROM, RUN, and CMD. Learn how these instructions are the foundation for creating Docker images and how arguments following each instruction customize the image building process. Delve into the anatomy of Docker files for an understanding of image preparation and execution.
-
31What's a Base Image?Vídeo Aula
Explore the foundational principles of Dockerfile configuration, by examining the significance of base image selection using an analogy of installing an operating system to run Google Chrome. Understand the role of Alpine as an efficient starting point for crafting Docker images, due to its pre-installed package manager that simplifies installing and running applications like Redis.
-
32The Build Process in DetailVídeo Aula
Delve into the Docker build process, understanding the output seen when the build command is executed. Learn why the build command is used, the significance of the build context, and the correlation between Dockerfile instructions and the build steps. Examine the creation of intermediate containers, the impact of each command on the image, and how the final Docker image is assembled.
-
33A Brief RecapVídeo Aula
Recap the essential steps of creating a Docker image with a focus on the Alpine base image and Redis installation. Learn how the 'FROM' and 'RUN' directives form layers, use temporary containers for file system changes, and how the 'CMD' instruction defines container startup behavior within the Docker build process.
-
34Quiz on FROMQuestionário
-
35Quiz on the Alpine ImageQuestionário
-
36Rebuilds with CacheVídeo Aula
Explore how the Docker build process utilizes caching to enhance image-building performance. Delve into the sequence of generating images from Dockerfile instructions and how adding new commands affects the build. Learn why reordering operations impacts cache usage and how strategic Dockerfile modifications can minimize build times through examples of adding dependencies like GCC and Redis.
-
37Tagging an ImageVídeo Aula
Learn to streamline Docker workflow by tagging custom images to easily reference them without memorizing image IDs. Explore the Docker build command's tagging option to assign memorable names and versions to images, following convention for better organization, and discover how to initiate a container using these custom tags in a practical Redis server example.
-
38Quick Note for Windows UsersTexto
-
39Manual Image Generation with Docker CommitVídeo Aula
Delve into the advanced Docker concepts by exploring the bidirectional relationship between images and containers. Uncover how to manually create a container, modify its file system with commands such as APK add Redis, and ultimately generate a custom image for future use—mirroring the automated Dockerfile process. While not a recommended practice for production, it provides insight into the underlying mechanics of Docker image creation.
-
40Image TagsQuestionário
-
41Image TaggingQuestionário
-
42Project OutlineVídeo Aula
Advance understanding of Docker by creating a simple Node.js web application and encapsulating it within a Docker container for local access. Delve into authoring a Dockerfile, intentionally introducing common errors for educational purposes, with clear guidance on recognizing and resolving these issues to strengthen Docker proficiency.
-
43Node Server SetupVídeo Aula
Learn how to set up a Node.js web application with Express by creating a `package.json` file to define dependencies like Express, and writing an `index.js` file that contains server logic to handle a root route. The application will deliver a simple 'Hi there' message on port 8080. This lays the foundation for creating a Dockerfile in the next section.
-
44Reminder on BuildkitTexto
-
45A Few Planned ErrorsVídeo Aula
Explore the process of containerizing a Node.js web application with Docker, starting with the fundamentals of Node and npm commands. Learn how to craft a Dockerfile to specify a base image, install dependencies with npm install, and set npm start as the default command to run the server, while anticipating common error messages during the build.
-
46Base Image IssuesVídeo Aula
Explore how to select appropriate base images in Docker to overcome common issues such as missing programs. This lesson demonstrates troubleshooting the "npm not found" error by choosing a Node.js pre-installed image from Docker Hub, specifically the Alpine version, for a leaner footprint in the Docker container environment.
-
47A Few Missing FilesVídeo Aula
Discover why the `package.json` file is not found during the Docker image build process and understand the segmentation of the file system within a Docker container. Learn how to configure the Dockerfile to ensure necessary files, like `package.json`, are accessible when executing NPM install commands within the container.
-
48Copying Build FilesVídeo Aula
Learn to resolve issues with the npm install command by correctly utilizing the COPY instruction in Dockerfile to transfer the package.json file before installation. Explore the copy instruction syntax and its relation to the build context to successfully build and tag an image in Docker, then attempt to run a Node.js server from the created container.
-
49Container Port MappingVídeo Aula
Dive into troubleshooting Docker container networking issues by understanding port mapping and how to set it up correctly. Learn the essential distinction between incoming and outgoing traffic for Docker containers, and master the syntax for the `docker run -p` command to ensure the application responds to browser requests. Explore how to redirect traffic from a specific local port to a container port to overcome common networking pitfalls.
-
50Specifying a Working DirectoryVídeo Aula
Explore the importance of avoiding conflicts with the container's default filesystem by using the WORKDIR instruction in Dockerfiles. This lesson covers debugging within a container, isolating project files in a non-root directory, and ensuring safe copying of files to prevent accidental overrides, using a Node.js application example.
-
51Unnecessary RebuildsVídeo Aula
Explore the limitations of Docker container updates by observing changes made to the source code and how they aren't reflected in the running container without a rebuild. Learn about the implications of Docker's caching mechanism on the build process and the unnecessary reinstallation of dependencies, laying the groundwork for more efficient container update strategies.
-
52Minimizing Cache Busting and RebuildsVídeo Aula
Optimize Docker builds by strategically splitting copy operations within the Dockerfile. Learn to copy only the package.json first and run 'npm install', followed by the rest of the project files, resulting in faster builds since dependencies do not reinstall after source code changes. Understand how file changes affect Docker caching and the importance of instruction order.
-
53Minimizing Cache BustingQuestionário
-
54App OverviewVídeo Aula
Embark on creating a more intricate Docker-based application showcasing classic Docker usage by building a web app that counts page visits and displays them in the browser. The application will harness a Node.js server and a Redis in-memory data store, emphasizing the importance of maintaining a single Redis instance while potentially scaling the Node server across multiple Docker containers. The next steps include devising the architectural setup using separate containers for each service.
-
55App Server Starter CodeVídeo Aula
Explore the creation of a Node.js application that counts visits using Express and Redis. Learn to set up the project directory, write a package.json for dependencies, and craft an index.js to build the server logic. This includes initializing an Express app, connecting to a Redis client, handling route requests, and incrementing visit counts before diving into the Docker setup to facilitate networking.
-
56Assembling a DockerfileVídeo Aula
Explore the creation of a Dockerfile designed to build a Node.js application container, involving a step-by-step guide on setting up the image with node:alpine as the base, optimizing the build process to only rebuild when the package.json changes, and using npm to manage dependencies. Learn to tag the resulting Docker image for easier handling.
-
57Introducing Docker ComposeVídeo Aula
Explore the use of Docker Compose to simplify networking between containers. Uncover the limitations of Docker CLI's networking capabilities and learn how Docker Compose provides a more efficient alternative for connecting and managing multiple containers, enhancing workflow and reducing redundant command entry.
-
58Docker Compose FilesVídeo Aula
Explore the utilization of Docker Compose to streamline the deployment of multi-container Docker applications. Learn to craft a 'docker-compose.yaml' file, encoding commands like 'Docker build' and 'Docker run' into a structured syntax to automate container creation and configuration, simplifying the orchestration of services like Redis and Node.js applications.
-
59Networking with Docker ComposeVídeo Aula
Discover how to implement a Docker compose file to create and network multiple containers with ease, featuring a Redis server and a Node.js application. Learn about Docker Compose's automatic networking capabilities, eliminating the need for additional port configurations to enable communication between containers. Also, explore the configuration within a Node.js application to connect to the Redis container via its service name, leveraging Docker's intelligent routing.
-
60Docker Compose CommandsVídeo Aula
Uncover the convenience of Docker Compose for orchestrating container startups by utilizing the `docker-compose up` command. Learn how to effortlessly initiate all services from a Docker Compose file, and explore the automated networking setup between containers. Additionally, understand the simplified build-and-run process with the `--build` option for incorporating updates into images.
-
61Stopping Docker Compose ContainersVídeo Aula
Discover the ease of managing multiple containers simultaneously with Docker Compose by learning to translate Docker CLI commands into Docker Compose commands. Navigate through starting and stopping containers using `docker-compose up -d` and `docker-compose down` for efficient workflow optimization.
-
62Container Maintenance with ComposeVídeo Aula
Explore how to handle container crashes in Docker by learning techniques to automatically restart containers when errors occur. Delve into the implementation within a Node.js environment, manipulating server behavior to induce a crash, and utilizing Docker Compose to manage and mitigate such scenarios efficiently.
-
63Automatic Container RestartsVídeo Aula
Explore Docker Compose's ability to automatically restart containers by configuring restart policies in the Docker Compose file. Understand the differences between "always," "on-failure," and "unless-stopped" policies and their use cases with Node.js applications. Learn how to utilize exit status codes to influence container restart behavior, and why certain policies require quoted values in a Docker Compose YAML file.
-
64Container Status with Docker ComposeVídeo Aula
Learn the usage of the Docker Compose PS command to check the status of containers defined in a Docker Compose file. Understand the importance of running this command in the correct directory containing the Docker Compose.yaml file, as it's necessary for Docker Compose to identify which containers to display the status for.
-
65Visits Application Updated for Redis v4+Texto
-
66Development WorkflowVídeo Aula
Learn the Docker production workflow for developing, testing, and deploying applications complete with future updates and redeployments. Gain insights into the continuous development cycle and prepare to integrate Docker with external hosting services such as AWS or DigitalOcean.
-
67Flow SpecificsVídeo Aula
Explore the development workflow for a GitHub-based project, focusing on a dual-branch system with feature and master branches. Learn how to utilize pull requests to trigger automated testing with Travis CI, which upon successful test execution, deploys the application to Amazon Web Services (AWS), paving the way to integrate Docker into the development process.
-
68Docker's PurposeVídeo Aula
Learn the significance of Docker in modern development workflows, including how it integrates with GitHub, Travis CI, and AWS. Discover that while Docker is not mandatory for implementing the workflow, it can significantly streamline various processes, ultimately enhancing the development experience.
-
69Project GenerationVídeo Aula
Explore the essentials of setting up a React project and prepare it for containerization with Docker. Discover how to verify and install Node.js, necessary for React development, and use a simple project generator. Learn the process of encapsulating a straightforward React front-end application inside a Docker container, ready for testing and deployment, without delving into custom code or specific programming languages.
-
70More on Project GenerationTexto
-
71Necessary CommandsVídeo Aula
Explore the essential Node.js commands within a React.js project, navigating the project structure and executing commands that prepare the application for different environments. Learn to start a development server with npm run start, run tests with npm run test, and create production builds with npm run build. Emphasize the differentiation between development and production setups in the context of preparing for Docker containerization.
-
72Creating the Dev DockerfileVídeo Aula
-
73Duplicating DependenciesVídeo Aula
Understand the importance of a lean Docker build context by comparing the impact of including the `node_modules` folder versus relying on the Docker image to install dependencies. Learn efficient Docker image creation for React applications by removing unnecessary duplication of dependencies, leading to optimized build times and cleaner project directories.
-
74Starting the ContainerVídeo Aula
Explore the nuances of setting up a development server with Docker, including resolving issues related to port mapping and exposure for a React app. Delve into the process of starting a container from an image ID and learn about the critical `-p` flag required for accessing the app locally. The session also touches on updating source code in the container without rebuilding the image each time.
-
75Docker VolumesVídeo Aula
Learn to seamlessly update source code changes in a running Docker container. This section explains how to bypass the need to stop and rebuild the entire Docker image by utilizing Docker volumes to create a dynamic reference to local files, enabling real-time synchronization of code modifications without restarting the container.
-
76WSL and Windows Users Must Read Before Next LectureTexto
-
77Bookmarking VolumesVídeo Aula
Discover how to correct the common Docker run error by appropriately using the volume flag to map the local file system to a Docker container, ensuring that the 'node_modules' directory is not overwritten. Learn to set up a persistent volume within the Docker container to reflect code changes in real-time during local development.
-
78Shorthand with Docker ComposeVídeo Aula
Explore the simplification of complex `docker run` commands using Docker Compose, which allows encoding configurations like port settings and volumes into a YAML file. This section demonstrates creating a `docker-compose.yml` file for a development container, detailing how to specify service names, ports, and omit file mappings to node modules, ultimately leading to a streamlined container initialization process with `docker-compose up`.
-
79Overriding Dockerfile SelectionVídeo Aula
Discover how to adjust the Docker Compose build context and specify a non-standard Dockerfile name for service image construction. Understand the significance of the `context` and `Dockerfile` options for locating project files and the Dockerfile, resolving issues faced when deviating from naming conventions.
-
80Do We Need Copy?Vídeo Aula
Explore the nuances of Docker compose by setting up volume mounts and observing real-time code updates within a React app inside a container. Understand why the Dockerfile 'COPY' command remains essential for future flexibility, despite the volume mount's ability to reflect local changes immediately in the development environment.
-
81Executing TestsVídeo Aula
Learn to run tests inside a Docker container using `npm run test` in a development environment, before advancing to using Travis CI for continuous integration. Understand the importance of connecting to standard input within the container with the `-it` flags to enable interactive testing and troubleshooting common issues such as a non-responsive test suite.
-
82Live Updating TestsVídeo Aula
Discover how to troubleshoot common issues with test suites in Docker by utilizing an existing container with volume mapping for continuous test updates. Explore techniques to reflect changes in test files within a Docker container and examine alternative approaches to run tests, including setting up a dedicated service in Docker Compose.
-
83Docker Compose for Running TestsVídeo Aula
Explore a new method for running tests within a Docker container using Docker Compose by adding a dedicated test service in the Docker Compose YAML file. This approach avoids the need to acquire a container ID and automatically reruns tests when files change, with a focus on correct YAML syntax and volume mapping. However, the limitation lies in the inability to interact with the test suite directly through standard input.
-
84Shortcomings on TestingVídeo Aula
Learn how Docker Compose manages separate service containers and automatically reruns tests upon changes due to volume mapping. Discover the limitation of not being able to interact with the test suite's input commands due to the processes inside Docker containers and their standard input/output streams, exploring Docker attach as a potential but imperfect solution.
-
85Need for NginxVídeo Aula
Understand the distinctions between development and production environments in Docker container setup. Focus on the transition from using a development server for NPM run start and test commands to employing nginx for serving the production build, which includes static files like index.html and main.js, thereby eliminating the need for a development server in production. Up next, tackle crafting the Dockerfile for a production-ready web container.
-
86Multi-Step Docker BuildsVídeo Aula
Learn to configure a production-ready Docker container for a React application using Nginx and a multi-step build process. Understand the necessity of a separate Dockerfile for production, optimizing the build by eliminating unnecessary dependencies, and leveraging Node Alpine and Nginx images to create an efficient, streamlined container.
-
87Implementing Multi-Step BuildsVídeo Aula
Discover how to optimize Docker container builds for production by implementing a multi-step build process. This tutorial covers creating a Docker file that utilizes distinct build and run phases, comprising dependency installation and application build using a node alpine image, followed by copying the production assets to an Nginx image to serve the application.
-
88Running NginxVídeo Aula
Discover how to construct a multi-step Dockerfile for a React application, test the build process, and serve the app using an Nginx server. Learn to execute the Docker build command without the '-f' flag for standard file names and map local ports to the container's ports, ensuring a production-ready deployment using Nginx.
