In this article, we explore how Docker is revolutionizing software training by providing consistent, scalable, and efficient environments. We’ll cover the basics of Docker, its role in improving training consistency, and real-world applications across various industries. Additionally, we’ll discuss the future trends in Docker-based training and how it’s shaping the landscape of educational technology.
Key Takeaways:
- Consistency: Docker ensures all trainees work in identical environments, reducing errors.
- Scalability: Docker easily scales to accommodate large training sessions.
- Flexibility: Docker allows for customized training environments tailored to specific needs.
- Efficiency: Quick setup and teardown of training environments streamline the learning process.
- Future Trends: Docker is set to play an increasingly important role in the evolution of software training.
Table of contents
- Introduction
- Understanding Docker: A Brief Overview
- The Role of Docker in Software Training
- Setting Up Docker for Training: Step-by-Step Guide
- Benefits of Using Docker in Software Training
- Real-World Applications of Docker in Training
- How Appsembler Enhances Software Training with Docker
- Live examples of Docker for software training
- Future Trends: The Evolution of Docker in Software Training
- Conclusion
- Frequently Asked Questions
Introduction
Docker has rapidly become a cornerstone in software development, revolutionizing the way developers build, ship, and run applications. At its core, Docker is an open-source platform that automates the deployment of applications inside lightweight, portable containers. These containers package an application and its dependencies into a single, isolated unit, ensuring that it runs consistently across any environment—be it on a developer’s laptop or in a production data center.
This level of consistency has profound implications for software training. In traditional training environments, inconsistencies between the trainer’s setup and the learners’ setups often lead to confusion, errors, and wasted time troubleshooting. Docker eliminates these challenges by providing a standardized environment that can be replicated across all training instances. Whether training is conducted in-person, online, or through a Learning Management System (LMS) like Open edX, Docker ensures that every participant works within the same environment, reducing the friction and learning curve associated with software training.
Moreover, the scalability of Docker makes it ideal for training environments. As the demand for software training grows, especially in enterprise settings, the need for scalable and efficient training solutions becomes critical. Docker enables the creation of virtual labs that can be easily scaled to accommodate large numbers of participants without compromising on performance or reliability. This scalability is essential in scenarios where multiple learners need to interact with the same software simultaneously, such as in virtual labs integrated with an LMS.
In essence, Docker not only enhances the efficiency of software training but also supports the creation of immersive, hands-on learning experiences that are both scalable and consistent. By leveraging Docker, organizations can ensure that their training programs are more effective, accessible, and adaptable to the needs of a diverse learner base, ultimately driving better outcomes in software education.
Understanding Docker: A Brief Overview
Docker is a powerful platform that has transformed how software is developed, tested, and deployed. At its essence, Docker allows developers to package an application along with all its dependencies into a standardized unit called a container. These containers are lightweight, portable, and self-sufficient, meaning they can run anywhere—from a developer’s laptop to a cloud server—without any compatibility issues.
The core components of Docker include the Docker Engine, Docker Images, and Docker Containers. The Docker Engine is the runtime that allows you to build and run containers. It is the backbone of the Docker platform, managing the entire lifecycle of containers. Docker Images are the blueprint for containers, defining what the container will include, such as the operating system, application code, and required dependencies. Once an image is created, it can be deployed as a Docker Container, which is the live, running instance of that image.
Docker’s role in the software development lifecycle is profound. Traditionally, software development involved multiple environments—development, testing, and production—each of which could have different configurations. These differences often led to the infamous “it works on my machine” problem, where software that functioned perfectly in one environment failed in another. Docker resolves this by providing a consistent environment across all stages of development. Developers can create an image that runs the application in a container, and this same image can be used throughout the lifecycle, ensuring that the application behaves the same way in every environment.
This standardization is a game-changer, especially in software training. By using Docker, educators and trainers can ensure that every participant has the exact same setup, reducing the variability that often causes confusion and errors during training sessions. It allows for the quick creation of complex environments that are essential for hands-on learning, making it easier to teach and learn new software skills.
In summary, Docker’s ability to create standardized, portable environments has revolutionized software development and training. It eliminates inconsistencies, streamlines the development process, and provides an ideal platform for delivering effective, scalable software training programs.
The Role of Docker in Software Training
Traditional software training methods often involve setting up individual environments on each learner’s machine, leading to a host of challenges. These challenges include inconsistent environments, where slight differences in software versions or configurations can cause errors, making it difficult for learners to follow along. Additionally, setting up these environments can be time-consuming, and the process is often prone to errors that detract from the learning experience. Scalability is another issue; as the number of learners increases, maintaining consistent training environments across all participants becomes increasingly difficult.
Docker addresses these challenges by providing a consistent, portable, and scalable environment for software training. With Docker, instructors can create a single, standardized environment in the form of a Docker image, which can then be distributed to all learners. This ensures that every participant has the exact same setup, eliminating discrepancies that can lead to confusion and frustration. Whether the training is conducted in-person or remotely, Docker containers run identically on any machine, ensuring a smooth and uniform learning experience for all participants.
Scalability is another area where Docker excels. In traditional setups, scaling a training session to accommodate more participants often involves significant manual effort, such as configuring new machines or setting up additional environments. Docker simplifies this process by allowing instructors to quickly spin up as many containerized environments as needed, without the overhead of managing individual installations. This is particularly beneficial in virtual labs, where multiple learners can interact with complex software environments in real time, all within the same controlled setting.
Case studies highlight the effectiveness of Docker in software training. For instance, companies like JFrog have used Docker to streamline their training programs, allowing them to deliver consistent, high-quality training to a global audience. By using Docker, they were able to reduce setup time from hours to minutes, ensuring that more time was spent on learning rather than troubleshooting. Similarly, educational institutions have adopted Docker to provide students with hands-on experience in a controlled environment, significantly enhancing their learning outcomes.
In summary, Docker revolutionizes software training by overcoming the limitations of traditional methods. It provides a consistent, scalable, and efficient environment that enhances the learning experience, making it an indispensable tool for modern software training programs. Whether in a corporate setting, an academic institution, or a virtual lab, Docker ensures that all participants can engage with the training material on an equal footing, leading to more effective and impactful learning.
Setting Up Docker for Training: Step-by-Step Guide
Setting up Docker for software training is a straightforward process that can significantly enhance the efficiency and effectiveness of your training programs. This guide will walk you through the steps to set up a Docker environment specifically tailored for training purposes, ensuring that your learners have a consistent and reliable experience.
Step 1: Install Docker
The first step is to install Docker on the machine that will serve as the host for your training environment. Docker is compatible with various operating systems, including Windows, macOS, and Linux. You can download Docker Desktop from the official Docker website and follow the installation instructions for your specific operating system. Once installed, verify the installation by opening a terminal or command prompt and typing docker --version
to ensure Docker is correctly set up.
Step 2: Create a Docker Image for Training
A Docker image is essentially a snapshot of an environment that contains the operating system, software, and dependencies required for your training. To create a Docker image tailored for software training, start by writing a Dockerfile—a script that specifies the base image, software packages, and configuration settings.
For example, if you’re training learners on Python development, your Dockerfile might start with an official Python base image and include commands to install additional libraries or tools needed for the course. Here’s a simple example:
# Use the official Python image from Docker Hub
FROM python:3.8
# Set the working directory in the container
WORKDIR /usr/src/app
# Copy the training materials into the container
COPY . .
# Install any necessary dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Command to run the training script
CMD ["python", "./train.py"]
Once your Dockerfile is ready, build the Docker image using the following command:
docker build -t training-environment .
This command packages your environment into a Docker image named training-environment
.
Step 3: Configure and Run Docker Containers
With your Docker image created, the next step is to configure and run Docker containers for each participant. A container is a running instance of your Docker image, providing the isolated environment needed for training.
To start a container, use the following command:
docker run -it --name trainee1 training-environment
This command runs a new container named trainee1
based on the training-environment
image. The -it
flag ensures that the container runs interactively, allowing participants to engage directly with the environment.
For larger training sessions, you can easily spin up multiple containers, each representing a separate environment for different learners. Simply repeat the docker run
command with different container names.
Step 4: Best Practices for Maintaining Docker Environments
Maintaining Docker environments for training involves regular updates and optimizations to ensure they remain efficient and relevant. Here are some best practices:
- Regularly Update Images: As software and dependencies evolve, periodically update your Docker images to include the latest versions and security patches. This ensures that your training environment remains up-to-date.
- Automate Image Builds: Use CI/CD tools to automate the building and testing of Docker images. This can save time and reduce errors, especially when updating environments across multiple training sessions.
- Use Volume Mounts: Consider using Docker volumes to persist data outside of containers. This is particularly useful in training scenarios where learners might need to save their progress or results.
- Monitor and Log: Implement logging and monitoring within your containers to track usage, performance, and errors. This data can help you refine and improve your training environments over time.
Setting up Docker for software training is a powerful way to create consistent, scalable, and easily maintainable environments. By following these steps and best practices, you can ensure that your learners have the best possible experience, whether they are engaging with an LMS like Open edX, participating in virtual labs, or attending in-person training sessions. Docker not only simplifies the setup process but also enhances the overall effectiveness of your training programs.
Benefits of Using Docker in Software Training
Using Docker in software training offers numerous benefits that address many of the challenges associated with traditional training methods. By leveraging Docker, training programs can be more consistent, scalable, flexible, and efficient, leading to a more effective learning experience for all participants.
Consistency: Ensuring All Trainees Have the Same Environment
One of the primary benefits of using Docker in software training is the consistency it provides. Traditional training environments often suffer from discrepancies between the instructor’s setup and the participants’ setups. These differences can lead to confusion, errors, and frustration, as learners struggle to replicate the instructor’s results. Docker solves this problem by creating standardized environments that are identical for every participant. Whether the training is conducted in-person, remotely, or through a Learning Management System (LMS) like Open edX, Docker ensures that everyone is working within the same environment, eliminating variables that can disrupt the learning process.
Scalability: Easily Replicable Environments for Large Training Sessions
Scalability is another significant advantage of using Docker in software training. As training programs grow, especially in large organizations or academic institutions, the ability to scale the environment to accommodate more participants becomes crucial. With Docker, scaling is as simple as replicating the existing Docker image to create new containers for each participant. This allows for quick and efficient scaling, whether you’re running a small workshop or a large-scale virtual lab with hundreds of participants. The ease of replicating environments ensures that every learner, regardless of the size of the training session, has access to the same high-quality training experience.
Flexibility: Tailoring Environments to Specific Training Needs
Docker also offers remarkable flexibility in software training. Unlike traditional setups that might require specific hardware or configurations, Docker containers can run on any system that supports Docker, removing the need for specialized hardware. This flexibility allows instructors to tailor training environments to meet the specific needs of their curriculum. For example, if a course requires a particular version of a programming language or software tool, Docker can easily accommodate this by creating a custom image with the exact specifications required. This adaptability is particularly beneficial in virtual labs, where different courses may require different environments, all of which can be managed seamlessly using Docker.
Efficiency: Quick Setup and Teardown of Training Environments
Efficiency is another key benefit of using Docker in software training. Setting up traditional training environments can be time-consuming, often involving manual installation of software, configuration of settings, and troubleshooting issues. Docker streamlines this process by allowing instructors to pre-configure a Docker image that includes everything needed for the training. Once the image is ready, setting up the environment is as simple as starting a container, which takes only a few seconds. This quick setup allows more time to be spent on actual learning rather than on technical setup. Additionally, tearing down the environment after training is just as fast, as containers can be easily removed without leaving behind any residual data or configurations.
In summary, Docker offers a host of benefits that make it an ideal tool for software training. Its ability to create consistent, scalable, flexible, and efficient environments transforms the way training is delivered, ensuring that all participants have the best possible learning experience. Whether used in conjunction with an LMS like Open edX, within virtual labs, or in traditional classroom settings, Docker enhances the overall effectiveness of software training programs, making it an invaluable resource for educators and learners alike.
Real-World Applications of Docker in Training
Docker’s versatility and efficiency have made it a valuable tool across various industries for software training, enabling organizations to overcome traditional challenges and achieve better training outcomes. This section explores real-world applications of Docker in training, highlighting examples from different industries, success stories, and strategies to mitigate potential challenges.
Examples of Industries Using Docker for Training
Several industries have adopted Docker for training purposes due to its ability to provide consistent, scalable, and flexible environments. For example, in the technology sector, companies like Google and IBM use Docker to train developers and IT professionals on cloud computing, DevOps practices, and software development. Docker containers allow these companies to create standardized training environments that mirror real-world production setups, giving learners hands-on experience with tools and technologies in a controlled setting.
In the financial services industry, organizations like JP Morgan and Goldman Sachs utilize Docker for training employees on complex trading algorithms and financial modeling software. Docker’s portability and consistency ensure that trainees can work with sophisticated tools without worrying about environment discrepancies, which is crucial in a field where accuracy and precision are paramount.
The education sector is another area where Docker has made a significant impact. Universities and online learning platforms like edX have integrated Docker into their eLearning systems, enabling students to access pre-configured environments for courses on programming, data science, and cybersecurity. This approach not only simplifies the learning process but also ensures that students have the resources they need to succeed, regardless of their local setup.
Success Stories and Metrics
One notable success story comes from JFrog, a company that specializes in DevOps and software management tools. JFrog implemented Docker to streamline its training programs, allowing them to deliver consistent, high-quality training to developers worldwide. By using Docker, JFrog was able to reduce setup time from several hours to just minutes, significantly improving the efficiency of their training sessions. As a result, they reported a 30% increase in training completion rates and higher overall satisfaction scores from participants.
Another success story is from Coursera, an online learning platform that offers courses in various technical fields. Coursera integrated Docker into its virtual labs, enabling students to interact with complex software environments without requiring extensive local resources. This integration led to a 40% increase in student engagement and a 20% improvement in course completion rates, demonstrating the effectiveness of Docker in enhancing the learning experience.
Potential Challenges and How to Mitigate Them
Despite its many advantages, using Docker in training does present some challenges. One common issue is the initial learning curve for instructors and administrators unfamiliar with containerization technology. To mitigate this, organizations can provide targeted training for their staff on Docker basics and best practices, ensuring that everyone involved in the training process is comfortable with the technology.
Another challenge is resource management, particularly in large-scale training sessions where multiple containers are running simultaneously. Docker can be resource-intensive, and without proper management, it could lead to performance bottlenecks. To address this, it’s essential to monitor resource usage closely and optimize the configuration of containers to ensure that they run efficiently on the available hardware.
Lastly, security concerns can arise when using Docker, particularly in training environments that involve sensitive data. Organizations should implement robust security practices, such as isolating containers, regularly updating images, and using secure Docker registries, to protect against potential vulnerabilities.
Docker has proven to be a transformative tool in software training across various industries. Its ability to provide consistent, scalable, and flexible training environments has led to significant improvements in training outcomes, as demonstrated by success stories from companies like JFrog and Coursera. While there are challenges associated with using Docker, these can be effectively managed with the right strategies, making Docker an invaluable asset in modern software training programs.
How Appsembler Enhances Software Training with Docker
Appsembler plays a pivotal role in the software training ecosystem by leveraging Docker to create seamless, scalable, and consistent training environments. As a leader in Learning Management Systems (LMS) and virtual labs, Appsembler uses Docker to streamline the delivery of hands-on software training, making it easier for organizations to train employees, students, and customers effectively.
How Appsembler Uses Docker to Streamline Training Processes
Appsembler integrates Docker into its platform to address the common challenges associated with traditional software training. By using Docker, Appsembler ensures that every training environment is consistent, regardless of the participant’s location or hardware setup. This eliminates the discrepancies that often arise in training sessions, where variations in software versions or configurations can lead to confusion and inefficiency.
With Docker, Appsembler can quickly spin up identical training environments for each learner. Whether the training involves complex software like data analytics tools, programming languages, or DevOps practices, Docker containers provide a standardized environment that mirrors the production setup. This not only enhances the learning experience but also allows learners to focus on acquiring skills rather than troubleshooting setup issues.
Features of Appsembler’s Platform Leveraging Docker
Appsembler’s platform is designed to make the most of Docker’s capabilities, offering features that enhance the delivery of software training:
- Instant Lab Provisioning: Appsembler uses Docker to provision virtual labs instantly. This means that learners can access fully-configured environments within seconds, allowing them to start training immediately without the need for lengthy setup processes.
- Scalable Training Environments: The platform’s ability to scale is a significant advantage, especially for organizations with large training cohorts. Docker containers can be replicated effortlessly to accommodate any number of learners, ensuring that everyone has access to the same high-quality environment.
- Customizable Learning Paths: Appsembler allows instructors to create customized Docker images tailored to specific courses or learning objectives. This flexibility means that training can be highly targeted, with environments that include exactly what the learner needs to succeed.
- Secure and Isolated Environments: By using Docker, Appsembler ensures that each learner’s environment is isolated and secure. This is particularly important for training that involves sensitive data or requires high levels of security compliance.
Case Studies and Testimonials from Appsembler Clients
Appsembler’s approach to using Docker in software training has garnered positive feedback from clients across various industries. For instance, Cybrary, an online cybersecurity training platform, uses Appsembler’s virtual labs to provide learners with hands-on experience in a secure, isolated environment. By leveraging Docker, Cybrary was able to offer labs that accurately simulate real-world cybersecurity scenarios, significantly improving learner engagement and outcomes.
Another success story comes from Snowflake, a cloud data platform company that uses Appsembler’s platform to deliver training to its customers. By utilizing Docker, Snowflake can provide consistent training environments that mirror its cloud environment, ensuring that customers can practice and learn effectively without encountering setup issues.
Appsembler’s use of Docker enhances the software training experience by providing consistent, scalable, and secure environments. Through features like instant lab provisioning and customizable learning paths, Appsembler ensures that learners can focus on what matters most—developing their skills. The success stories from clients like Cybrary and Snowflake underscore the effectiveness of this approach, making Appsembler a key player in the software training ecosystem.
Live examples of Docker for software training
We’ve already deployed our Docker-powered Virtual Labs solution at a number of companies who are already reaping the benefit.
InterSystems, a company that builds mission-critical applications for healthcare, business, wanted to give its learners hands-on experience with the software, and conduct exercises in a real-life environment.
The company deployed Open edX and out Virtual Labs platform to enable the development of individualized and hands-on virtual training lab environments. InterSystems used Docker Container technology to allow students to access these individualized environments from anywhere in the world.
There are currently up to 100 individualized learner labs running at the same time across the majority of the company’s courses.
In-memory database platform Redis Labs also used Docker-powered virtual labs, as well as our Tahoe platform, when it created Redis University, which is a public-facing platform that allows anyone to take its courses.
The lab environment simulates the Redis server and also comes packaged with sample code so learners can immediately start testing and learning new skills.
Future Trends: The Evolution of Docker in Software Training
As Docker continues to gain traction in the world of software training, several emerging trends indicate that its role will only grow more significant in the coming years. These trends point to a future where containerization is a cornerstone of educational technology, reshaping how training is delivered across industries.
Emerging Trends in the Use of Docker for Training
One of the most prominent trends is the increasing integration of Docker with cloud-based Learning Management Systems (LMS) like Open edX. As more organizations move their training programs online, the demand for scalable, consistent training environments that can be accessed from anywhere is rising. Docker’s ability to create portable, cloud-agnostic containers makes it an ideal solution for these LMS platforms, enabling them to offer robust virtual labs and hands-on training experiences to a global audience.
Another trend is the growing use of Docker in microlearning and modular training approaches. Organizations are beginning to break down complex training programs into smaller, more manageable modules that can be completed in short bursts. Docker’s flexibility allows these modules to be quickly deployed, tailored to specific learning objectives, and updated as needed, making it easier to deliver personalized training at scale.
The Future of Containerization in Education and Training
The future of containerization in education and training looks promising, with Docker poised to become even more integral to how training is designed and delivered. As technology advances, we can expect to see more sophisticated uses of Docker in training environments, such as the incorporation of artificial intelligence (AI) and machine learning (ML) to create adaptive learning environments. These environments could automatically adjust the training content and environment based on a learner’s progress and needs, offering a more personalized and effective learning experience.
Additionally, as the demand for remote and hybrid learning grows, Docker’s role in providing consistent and accessible training environments will become increasingly critical. Organizations will likely rely more on containerization to ensure that their training programs are resilient, scalable, and able to reach learners regardless of their location or device.
Predictions on How Docker Will Continue to Shape the Training Industry
Looking ahead, Docker is expected to further solidify its position as a key enabler of innovation in the training industry. We predict that Docker will play a crucial role in the continued evolution of virtual labs, making them more interactive and immersive. As container orchestration tools like Kubernetes become more widespread, we can anticipate that training environments will become even more dynamic, capable of scaling automatically based on demand and learner engagement.
Moreover, Docker is likely to drive the adoption of continuous learning models, where training environments are always available and can be updated in real-time. This approach will allow learners to engage with training materials as needed, fostering a culture of continuous improvement and upskilling within organizations.
The future of Docker in software training is bright, with emerging trends pointing towards its growing importance in creating scalable, consistent, and adaptive training environments. As containerization continues to evolve, Docker will undoubtedly play a pivotal role in shaping the next generation of educational technology, ensuring that training programs are more effective, accessible, and resilient than ever before.
Conclusion
Docker has emerged as a transformative tool in the realm of software training, offering numerous benefits that address the challenges of traditional training methods. By providing consistent, scalable, and flexible environments, Docker ensures that every learner has access to the same high-quality training experience, regardless of their location or hardware setup. Its ability to streamline the setup and management of training environments makes it an invaluable resource for organizations looking to enhance their training programs.
For organizations seeking to improve the effectiveness of their training initiatives, adopting Docker is a strategic move. Docker not only simplifies the creation and deployment of training environments but also enhances the overall learning experience by ensuring that all participants can focus on developing their skills without the distraction of technical issues. As the demand for skilled software professionals continues to grow, Docker’s role in providing efficient, scalable, and accessible training solutions will become increasingly critical.
Looking ahead, Docker is poised to play an even more significant role in the future of software training. As containerization technology evolves and integrates with emerging trends like AI-driven learning and continuous education models, Docker will continue to shape the way training is delivered across industries. Organizations that embrace Docker now will be well-positioned to lead in this new era of software training, where adaptability, consistency, and scalability are key to success.
Frequently Asked Questions
Docker is an open-source platform that enables developers to automate the deployment, scaling, and management of applications within lightweight, portable containers. These containers encapsulate everything needed to run an application, including the code, runtime, system tools, libraries, and settings, ensuring that the application behaves consistently across different environments.
In software training, Docker is important because it allows trainers to create standardized, isolated environments that can be easily replicated across all participants’ machines. This eliminates the common issues of environment discrepancies and setup errors, providing a consistent and reliable training experience for every learner. Docker’s portability also means that training environments can be quickly deployed on any system, making it ideal for both in-person and remote training sessions.
Docker improves the consistency of training environments by encapsulating all the components required to run an application within a single, portable container. This container includes everything from the operating system and application code to the necessary libraries and dependencies.
Because these containers are isolated from the host system and other containers, they eliminate the variability that often arises from differences in hardware, software versions, or system configurations.
When using Docker for software training, all participants use the same container image, ensuring that everyone has an identical environment. This consistency reduces the risk of errors and misunderstandings that can occur when learners are working in different setups, making the training process smoother and more effective.
Yes, Docker is well-suited for large-scale training sessions. One of Docker’s key strengths is its scalability, which allows instructors to easily replicate training environments across numerous containers. Whether training a handful of participants or hundreds, Docker enables the rapid deployment of consistent environments for each learner.
For large-scale sessions, Docker containers can be managed and orchestrated using tools like Kubernetes, which helps in efficiently distributing resources and managing container lifecycles. This ensures that even as the number of participants grows, each one receives the same high-quality training environment, without the overhead of manually setting up individual systems.
The primary benefits of using Docker in a training setting include:
Consistency: Docker provides standardized environments that are identical for all learners, eliminating discrepancies that can cause confusion and errors.
Scalability: Docker allows for the easy replication of training environments, making it ideal for scaling up to accommodate large groups of participants.
Flexibility: Docker containers can run on any system that supports Docker, removing the need for specialized hardware and enabling training across diverse platforms.
Efficiency: Setting up and tearing down training environments is quick and straightforward with Docker, allowing more time to be spent on learning rather than on technical setup.
These benefits make Docker an excellent choice for delivering effective and efficient software training, whether in-person, remotely, or through virtual labs.
Appsembler integrates Docker into its platform to provide seamless, scalable, and consistent training environments. By leveraging Docker, Appsembler allows organizations to create and deploy standardized training environments quickly, ensuring that all learners have access to the same high-quality resources. Appsembler’s platform also supports instant lab provisioning, enabling learners to engage with fully-configured Docker environments in seconds, which enhances the overall training experience. Additionally, the platform’s ability to scale easily using Docker containers ensures that even large training sessions can be managed effectively, providing consistent and reliable environments for all participants.