This is the presentation I gave at LISA16 on automating your developer's or op admin's personal experience using "infrastructure as code" techniques to quickly create dev and test environments that mimic production and minimize surprises.
Consul is a service discovery tool that allows services to register themselves and discover other services via a distributed key-value store. It provides service discovery, health checking, and distributed configuration management. Consul works by having Consul agents that gossip and use the Raft consensus protocol to maintain a consistent key-value store across datacenters. Clients can access services via HTTP endpoints to register services, discover health checks, and access the key-value store.
In Apache Pulsar Meetup, Jia Zhai from StreamNative presents KoP (Kafka-on-Pulsar) which bring native Kafka protocol support on Pulsar broker. He gave a demo about how to use Kafka clients and Pulsar clients can work seamlessly on same data, and how Kafka Connectors can work on a Pulsar cluster.
The document provides an overview of Docker networking as of version 17.06. It begins with introductions of the presenter and some key terminology used. It then discusses why container networking is needed and compares features of container and VM networking. The major components of Docker networking including network drivers, IPAM, Swarm networking, service discovery, and load balancing are outlined. Concepts of CNI/CNM standards and IP address management are explained. Examples of different network drivers such as bridge, overlay, macvlan are provided. The document also covers Docker networking concepts such as default networks, Swarm mode, service discovery, and load balancing. It concludes with some debugging commands and a reference slide.
Spark Operator—Deploy, Manage and Monitor Spark clusters on KubernetesDatabricks
The document discusses the Spark Operator, which allows deploying, managing, and monitoring Spark clusters on Kubernetes. It describes how the operator extends Kubernetes by defining custom resources and reacting to events from those resources, such as SparkCluster, SparkApplication, and SparkHistoryServer. The operator takes care of common tasks to simplify running Spark on Kubernetes and hides the complexity through an abstract operator library.
The document discusses Docker and containerization. It introduces Docker Enterprise Edition which provides end-to-end features for container apps along with enterprise grade security and support. It also discusses Docker Assemble, a tool that can build an optimized Docker container from source code without needing a Dockerfile by detecting frameworks, adding dependencies, and optimizing the image. The document demonstrates using Docker Assemble and deploying containers to Docker Universal Control Plane (UCP) for cluster management.
Spark and Object Stores —What You Need to Know: Spark Summit East talk by Ste...Spark Summit
If you are running Apache Spark in cloud environments, Object Stores —such as Amazon S3 or Azure WASB— are a core part of your system. What you can’t do is treat them like “just another filesystem” —do that and things will, eventually, go horribly wrong.
This talk looks at the object stores in the cloud infrastructures, including underlying architectures., compares them to what a “real filesystem” is expected to do and shows how to use object stores efficiently and safely as sources of and destinations of data.
It goes into depth on recent “S3a” work, showing how including improvements in performance, security, functionality and measurement —and demonstrating how to use make best use of it from a spark application.
If you are planning to deploy Spark in cloud, or doing so today: this is information you need to understand. The performance of you code and integrity of your data depends on it.
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScaleColin Charles
This document discusses MySQL proxy technologies including MySQL Router, ProxySQL, and MariaDB MaxScale. It provides an overview of each technology, including when they were released, key features, and comparisons between them. ProxySQL is highlighted as a popular option currently with integration with Percona tools, while MySQL Router may become more widely used due to its support for MySQL InnoDB Cluster. MariaDB MaxScale is noted for its binlog routing capabilities. Overall the document aims to help people understand and choose between the different MySQL proxy options.
Consul is a service discovery tool that allows services to register themselves and discover other services via a distributed key-value store. It provides service discovery, health checking, and distributed configuration management. Consul works by having Consul agents that gossip and use the Raft consensus protocol to maintain a consistent key-value store across datacenters. Clients can access services via HTTP endpoints to register services, discover health checks, and access the key-value store.
In Apache Pulsar Meetup, Jia Zhai from StreamNative presents KoP (Kafka-on-Pulsar) which bring native Kafka protocol support on Pulsar broker. He gave a demo about how to use Kafka clients and Pulsar clients can work seamlessly on same data, and how Kafka Connectors can work on a Pulsar cluster.
The document provides an overview of Docker networking as of version 17.06. It begins with introductions of the presenter and some key terminology used. It then discusses why container networking is needed and compares features of container and VM networking. The major components of Docker networking including network drivers, IPAM, Swarm networking, service discovery, and load balancing are outlined. Concepts of CNI/CNM standards and IP address management are explained. Examples of different network drivers such as bridge, overlay, macvlan are provided. The document also covers Docker networking concepts such as default networks, Swarm mode, service discovery, and load balancing. It concludes with some debugging commands and a reference slide.
Spark Operator—Deploy, Manage and Monitor Spark clusters on KubernetesDatabricks
The document discusses the Spark Operator, which allows deploying, managing, and monitoring Spark clusters on Kubernetes. It describes how the operator extends Kubernetes by defining custom resources and reacting to events from those resources, such as SparkCluster, SparkApplication, and SparkHistoryServer. The operator takes care of common tasks to simplify running Spark on Kubernetes and hides the complexity through an abstract operator library.
The document discusses Docker and containerization. It introduces Docker Enterprise Edition which provides end-to-end features for container apps along with enterprise grade security and support. It also discusses Docker Assemble, a tool that can build an optimized Docker container from source code without needing a Dockerfile by detecting frameworks, adding dependencies, and optimizing the image. The document demonstrates using Docker Assemble and deploying containers to Docker Universal Control Plane (UCP) for cluster management.
Spark and Object Stores —What You Need to Know: Spark Summit East talk by Ste...Spark Summit
If you are running Apache Spark in cloud environments, Object Stores —such as Amazon S3 or Azure WASB— are a core part of your system. What you can’t do is treat them like “just another filesystem” —do that and things will, eventually, go horribly wrong.
This talk looks at the object stores in the cloud infrastructures, including underlying architectures., compares them to what a “real filesystem” is expected to do and shows how to use object stores efficiently and safely as sources of and destinations of data.
It goes into depth on recent “S3a” work, showing how including improvements in performance, security, functionality and measurement —and demonstrating how to use make best use of it from a spark application.
If you are planning to deploy Spark in cloud, or doing so today: this is information you need to understand. The performance of you code and integrity of your data depends on it.
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScaleColin Charles
This document discusses MySQL proxy technologies including MySQL Router, ProxySQL, and MariaDB MaxScale. It provides an overview of each technology, including when they were released, key features, and comparisons between them. ProxySQL is highlighted as a popular option currently with integration with Percona tools, while MySQL Router may become more widely used due to its support for MySQL InnoDB Cluster. MariaDB MaxScale is noted for its binlog routing capabilities. Overall the document aims to help people understand and choose between the different MySQL proxy options.
The document discusses Kubernetes networking. It describes how Kubernetes networking allows pods to have routable IPs and communicate without NAT, unlike Docker networking which uses NAT. It covers how services provide stable virtual IPs to access pods, and how kube-proxy implements services by configuring iptables on nodes. It also discusses the DNS integration using SkyDNS and Ingress for layer 7 routing of HTTP traffic. Finally, it briefly mentions network plugins and how Kubernetes is designed to be open and customizable.
In this session, Neil Avery covers the planning and operation of your KSQL deployment, including under-the-hood architectural details. You will learn about the various deployment models, how to track and monitor your KSQL applications, how to scale in and out and how to think about capacity planning. This is part 3 out of 3 in the Empowering Streams through KSQL series.
Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...Simplilearn
This presentation on Chef will help you understand why Chef is needed, what is Chef, what is configuration management, infrastructure as code, components of Chef, Chef architecture & how it works, and you will also see a demo on Chef. Chef is an open source tool developed by Opscode. It is written in Ruby and Erlang. It automates the configuration and maintenance of multiple servers. Configuration management is a collection of engineering practices that provides a systematic way to manage entities for efficient deployment. These entities include code, infrastructure and people. Now let us get started and understand Chef in detail.
Below topics are explained in this Chef presentation:
1. Why Chef?
2. What is Chef?
3. Configuration management
4. Infrastructure as code
5. Components of Chef
6. Chef architecture
7. Flavors of Chef
8. Chef demo
Simplilearn's DevOps Certification Training Course will prepare you for a career in DevOps, the fast-growing field that bridges the gap between software developers and operations. You’ll become en expert in the principles of continuous development and deployment, automation of configuration management, inter-team collaboration and IT service agility, using modern DevOps tools such as Git, Docker, Jenkins, Puppet and Nagios. DevOps jobs are highly paid and in great demand, so start on your path today.
Why learn DevOps?
Simplilearn’s DevOps training course is designed to help you become a DevOps practitioner and apply the latest in DevOps methodology to automate your software development lifecycle right out of the class. You will master configuration management; continuous integration deployment, delivery and monitoring using DevOps tools such as Git, Docker, Jenkins, Puppet and Nagios in a practical, hands-on and interactive approach. The DevOps training course focuses heavily on the use of Docker containers, a technology that is revolutionizing the way apps are deployed in the cloud today and is a critical skillset to master in the cloud age.
Who should take this course?
DevOps career opportunities are thriving worldwide. DevOps was featured as one of the 11 best jobs in America for 2017, according to CBS News, and data from Payscale.com shows that DevOps Managers earn as much as $122,234 per year, with DevOps engineers making as much as $151,461. DevOps jobs are the third-highest tech role ranked by employer demand on Indeed.com but have the second-highest talent deficit.
1. This DevOps training course will be of benefit the following professional roles:
2. Software Developers
3. Technical Project Managers
4. Architects
5. Operations Support
6. Deployment engineers
7. IT managers
8. Development managers
Learn more at: https://www.simplilearn.com/
This document provides an overview of the Masakari project in OpenStack. Masakari is an instances high availability service that automatically recovers instances from failures. It aims to provide high availability for instances, especially for applications being migrated to the cloud. The document discusses Masakari's architecture, features, community, and how to get involved in contributing to the project.
Why and How to Run Your Own Gitlab Runners as Your Company GrowsNGINX, Inc.
In this session, Casey Zednick, Senior Software Engineer for NGINX, tells you everything you need to know about GitLab Runner, an app for running jobs in your CI/CD pipeline. Using your own runners gives you full control to meet your service level objectives (SLOs), increase security, and save money at scale. It's notoriously difficult to forecast costs for dynamic cloud services like an autoscaling fleet of runners, but Casey demos a tool from the NGINX tools team that calculates your costs based on a handful of numbers. He also shows how to clone our GitLab repos to set up a production-grade fleet in Azure and monitor its performance.
Speakers:
Casey Zednick
Netty is a Java framework that provides tools for developing high performance and event-driven network applications. It uses non-blocking I/O and zero-copy techniques to minimize overhead and maximize throughput and scalability. Netty provides buffers, codecs, pipelines and handlers that allow building applications as a stack of processing layers. Example applications include a discard server and an HTTP file server that demonstrate Netty's core features and event-driven architecture.
***** DevOps Masters Program : https://www.edureka.co/masters-program/devops-engineer-training *****
This DevOps Docker Commands tutorial ( Docker Tutorial Blog Series: https://goo.gl/z93Ed1 ) will introduce you to the most commonly used Docker commands. The Hands-On session is performed on an Ubuntu-64 bit machine in which Docker is installed.
To learn how Docker can be used to integrate multiple DevOps tools, watch the video titled 'DevOps Tools', by clicking this link: https://goo.gl/up9iwd
Using eBPF for High-Performance Networking in CiliumScyllaDB
The Cilium project is a popular networking solution for Kubernetes, based on eBPF. This talk uses eBPF code and demos to explore the basics of how Cilium makes network connections, and manipulates packets so that they can avoid traversing the kernel's built-in networking stack. You'll see how eBPF enables high-performance networking as well as deep network observability and security.
Performance Wins with BPF: Getting StartedBrendan Gregg
Keynote by Brendan Gregg for the eBPF summit, 2020. How to get started finding performance wins using the BPF (eBPF) technology. This short talk covers the quickest and easiest way to find performance wins using BPF observability tools on Linux.
This document provides an overview of OpenStack, including:
- The major components of OpenStack and how they work together through REST APIs and a message queue.
- Key concepts such as tenant virtual networks, private and floating IP addresses, virtual machine instance creation, block volumes, and template image registration.
- Examples of command line operations for the Keystone authentication service.
Kernel Recipes 2019 - XDP closer integration with network stackAnne Nicolas
XDP (eXpress Data Path) is the new programmable in-kernel fast-path, which is placed as a layer before the existing Linux kernel network stack (netstack).
We claim XDP is not kernel-bypass, as it is a layer before and it can easily fall-through to netstack. Reality is that it can easily be (ab)used to create a kernel-bypass situation, where non of the kernel facilities are used (in form of BPF-helpers and in-kernel tables). The main disadvantage with kernel-bypass, is the need to re-implement everything, even basic building blocks, like routing tables and ARP protocol handling.
It is part of the concept and speed gain, that XDP allows users to avoid calling part of the kernel code. Users have the freedom to do kernel-bypass and re-implement everything, but the kernel should provide access to more in-kernel tables, via BPF-helpers, such that users can leverage other parts of the Open Source ecosystem, like router daemons etc.
This talk is about how XDP can work in-concert with netstack, and proposal on how we can take this even-further. Crazy ideas like using XDP frames to move SKB allocation out of driver code, will also be proposed.
this slide is created for understand open vswitch more easily.
so I tried to make it practical. if you just follow up this scenario, then you will get some knowledge about OVS.
In this document, I mainly use only two command "ip" and "ovs-vsctl" to show you the ability of these commands.
Exactly-once Stream Processing with Kafka StreamsGuozhang Wang
I will present the recent additions to Kafka to achieve exactly-once semantics (0.11.0) within its Streams API for stream processing use cases. This is achieved by leveraging the underlying idempotent and transactional client features. The main focus will be the specific semantics that Kafka distributed transactions enable in Streams and the underlying mechanics to let Streams scale efficiently.
Scalable Monitoring Using Prometheus with Apache Spark Clusters with Diane F...Databricks
As Apache Spark applications move to a containerized environment, there are many questions about how to best configure server systems in the container world. In this talk we will demonstrate a set of tools to better monitor performance and identify optimal configuration settings. We will demonstrate how Prometheus, a project that is now part of the Cloud Native Computing Foundation (CNCF: https://www.cncf.io/projects/), can be applied to monitor and archive system performance data in a containerized spark environment.
In our examples, we will gather spark metric output through Prometheus and present the data with Grafana dashboards. We will use our examples to demonstrate how performance can be enhanced through different tuned configuration settings. Our demo will show how to configure settings across the cluster as well as within each node.
Vagrant is an excellent tool for quickly setup a development environment in a reproducible manner. However it is also a DecOps tool. In this talk the idea is to introduce audience how they can use Vagrant for DevOps
Vagrant allows users to easily create and configure lightweight, reproducible, and portable development environments. It works with virtual machines and containers to provide a consistent environment. The document outlines how to install and use Vagrant with Docker containers to build portable development environments across different platforms. Key steps include initializing a Vagrant project, selecting a base box, configuring the Vagrantfile to provision Docker containers, and running vagrant up to launch the environment.
The document discusses Kubernetes networking. It describes how Kubernetes networking allows pods to have routable IPs and communicate without NAT, unlike Docker networking which uses NAT. It covers how services provide stable virtual IPs to access pods, and how kube-proxy implements services by configuring iptables on nodes. It also discusses the DNS integration using SkyDNS and Ingress for layer 7 routing of HTTP traffic. Finally, it briefly mentions network plugins and how Kubernetes is designed to be open and customizable.
In this session, Neil Avery covers the planning and operation of your KSQL deployment, including under-the-hood architectural details. You will learn about the various deployment models, how to track and monitor your KSQL applications, how to scale in and out and how to think about capacity planning. This is part 3 out of 3 in the Empowering Streams through KSQL series.
Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...Simplilearn
This presentation on Chef will help you understand why Chef is needed, what is Chef, what is configuration management, infrastructure as code, components of Chef, Chef architecture & how it works, and you will also see a demo on Chef. Chef is an open source tool developed by Opscode. It is written in Ruby and Erlang. It automates the configuration and maintenance of multiple servers. Configuration management is a collection of engineering practices that provides a systematic way to manage entities for efficient deployment. These entities include code, infrastructure and people. Now let us get started and understand Chef in detail.
Below topics are explained in this Chef presentation:
1. Why Chef?
2. What is Chef?
3. Configuration management
4. Infrastructure as code
5. Components of Chef
6. Chef architecture
7. Flavors of Chef
8. Chef demo
Simplilearn's DevOps Certification Training Course will prepare you for a career in DevOps, the fast-growing field that bridges the gap between software developers and operations. You’ll become en expert in the principles of continuous development and deployment, automation of configuration management, inter-team collaboration and IT service agility, using modern DevOps tools such as Git, Docker, Jenkins, Puppet and Nagios. DevOps jobs are highly paid and in great demand, so start on your path today.
Why learn DevOps?
Simplilearn’s DevOps training course is designed to help you become a DevOps practitioner and apply the latest in DevOps methodology to automate your software development lifecycle right out of the class. You will master configuration management; continuous integration deployment, delivery and monitoring using DevOps tools such as Git, Docker, Jenkins, Puppet and Nagios in a practical, hands-on and interactive approach. The DevOps training course focuses heavily on the use of Docker containers, a technology that is revolutionizing the way apps are deployed in the cloud today and is a critical skillset to master in the cloud age.
Who should take this course?
DevOps career opportunities are thriving worldwide. DevOps was featured as one of the 11 best jobs in America for 2017, according to CBS News, and data from Payscale.com shows that DevOps Managers earn as much as $122,234 per year, with DevOps engineers making as much as $151,461. DevOps jobs are the third-highest tech role ranked by employer demand on Indeed.com but have the second-highest talent deficit.
1. This DevOps training course will be of benefit the following professional roles:
2. Software Developers
3. Technical Project Managers
4. Architects
5. Operations Support
6. Deployment engineers
7. IT managers
8. Development managers
Learn more at: https://www.simplilearn.com/
This document provides an overview of the Masakari project in OpenStack. Masakari is an instances high availability service that automatically recovers instances from failures. It aims to provide high availability for instances, especially for applications being migrated to the cloud. The document discusses Masakari's architecture, features, community, and how to get involved in contributing to the project.
Why and How to Run Your Own Gitlab Runners as Your Company GrowsNGINX, Inc.
In this session, Casey Zednick, Senior Software Engineer for NGINX, tells you everything you need to know about GitLab Runner, an app for running jobs in your CI/CD pipeline. Using your own runners gives you full control to meet your service level objectives (SLOs), increase security, and save money at scale. It's notoriously difficult to forecast costs for dynamic cloud services like an autoscaling fleet of runners, but Casey demos a tool from the NGINX tools team that calculates your costs based on a handful of numbers. He also shows how to clone our GitLab repos to set up a production-grade fleet in Azure and monitor its performance.
Speakers:
Casey Zednick
Netty is a Java framework that provides tools for developing high performance and event-driven network applications. It uses non-blocking I/O and zero-copy techniques to minimize overhead and maximize throughput and scalability. Netty provides buffers, codecs, pipelines and handlers that allow building applications as a stack of processing layers. Example applications include a discard server and an HTTP file server that demonstrate Netty's core features and event-driven architecture.
***** DevOps Masters Program : https://www.edureka.co/masters-program/devops-engineer-training *****
This DevOps Docker Commands tutorial ( Docker Tutorial Blog Series: https://goo.gl/z93Ed1 ) will introduce you to the most commonly used Docker commands. The Hands-On session is performed on an Ubuntu-64 bit machine in which Docker is installed.
To learn how Docker can be used to integrate multiple DevOps tools, watch the video titled 'DevOps Tools', by clicking this link: https://goo.gl/up9iwd
Using eBPF for High-Performance Networking in CiliumScyllaDB
The Cilium project is a popular networking solution for Kubernetes, based on eBPF. This talk uses eBPF code and demos to explore the basics of how Cilium makes network connections, and manipulates packets so that they can avoid traversing the kernel's built-in networking stack. You'll see how eBPF enables high-performance networking as well as deep network observability and security.
Performance Wins with BPF: Getting StartedBrendan Gregg
Keynote by Brendan Gregg for the eBPF summit, 2020. How to get started finding performance wins using the BPF (eBPF) technology. This short talk covers the quickest and easiest way to find performance wins using BPF observability tools on Linux.
This document provides an overview of OpenStack, including:
- The major components of OpenStack and how they work together through REST APIs and a message queue.
- Key concepts such as tenant virtual networks, private and floating IP addresses, virtual machine instance creation, block volumes, and template image registration.
- Examples of command line operations for the Keystone authentication service.
Kernel Recipes 2019 - XDP closer integration with network stackAnne Nicolas
XDP (eXpress Data Path) is the new programmable in-kernel fast-path, which is placed as a layer before the existing Linux kernel network stack (netstack).
We claim XDP is not kernel-bypass, as it is a layer before and it can easily fall-through to netstack. Reality is that it can easily be (ab)used to create a kernel-bypass situation, where non of the kernel facilities are used (in form of BPF-helpers and in-kernel tables). The main disadvantage with kernel-bypass, is the need to re-implement everything, even basic building blocks, like routing tables and ARP protocol handling.
It is part of the concept and speed gain, that XDP allows users to avoid calling part of the kernel code. Users have the freedom to do kernel-bypass and re-implement everything, but the kernel should provide access to more in-kernel tables, via BPF-helpers, such that users can leverage other parts of the Open Source ecosystem, like router daemons etc.
This talk is about how XDP can work in-concert with netstack, and proposal on how we can take this even-further. Crazy ideas like using XDP frames to move SKB allocation out of driver code, will also be proposed.
this slide is created for understand open vswitch more easily.
so I tried to make it practical. if you just follow up this scenario, then you will get some knowledge about OVS.
In this document, I mainly use only two command "ip" and "ovs-vsctl" to show you the ability of these commands.
Exactly-once Stream Processing with Kafka StreamsGuozhang Wang
I will present the recent additions to Kafka to achieve exactly-once semantics (0.11.0) within its Streams API for stream processing use cases. This is achieved by leveraging the underlying idempotent and transactional client features. The main focus will be the specific semantics that Kafka distributed transactions enable in Streams and the underlying mechanics to let Streams scale efficiently.
Scalable Monitoring Using Prometheus with Apache Spark Clusters with Diane F...Databricks
As Apache Spark applications move to a containerized environment, there are many questions about how to best configure server systems in the container world. In this talk we will demonstrate a set of tools to better monitor performance and identify optimal configuration settings. We will demonstrate how Prometheus, a project that is now part of the Cloud Native Computing Foundation (CNCF: https://www.cncf.io/projects/), can be applied to monitor and archive system performance data in a containerized spark environment.
In our examples, we will gather spark metric output through Prometheus and present the data with Grafana dashboards. We will use our examples to demonstrate how performance can be enhanced through different tuned configuration settings. Our demo will show how to configure settings across the cluster as well as within each node.
Vagrant is an excellent tool for quickly setup a development environment in a reproducible manner. However it is also a DecOps tool. In this talk the idea is to introduce audience how they can use Vagrant for DevOps
Vagrant allows users to easily create and configure lightweight, reproducible, and portable development environments. It works with virtual machines and containers to provide a consistent environment. The document outlines how to install and use Vagrant with Docker containers to build portable development environments across different platforms. Key steps include initializing a Vagrant project, selecting a base box, configuring the Vagrantfile to provision Docker containers, and running vagrant up to launch the environment.
Create Development and Production Environments with VagrantBrian Hogan
Need a Linux box to test a Wordpress site or a Windows VM to test a web site on IE 10? Creating a virtual machine to test or deploy your software doesn’t have to be a manual process. Bring one up in seconds with Vagrant, software for creating and managing virtual machines. With Vagrant, you can bring up a new virtual machine with the software you need, share directories, copy files, and configure networking using a friendly DSL. You can even use shell scripts or more powerful provisioning tools to set up your software and install your apps. Whether you need a Windows machine for testing an app, or a full-blown production environment for your apps, Vagrant has you covered.
In this talk you’ll learn to script the creation of multiple local virtual machines. Then you’ll use the same strategy to provision production servers in the cloud.
I work with Vagrant, Terraform, Docker, and other provisioning systems daily and am excited to show others how to bring this into their own workflows.
Vagrant is a tool for managing virtual machine environments in development. It allows developers to easily create and configure consistent development environments across different machines. Vagrant uses virtualization technologies like VirtualBox to run virtual machines and then configure them automatically by reading a Vagrantfile configuration. This allows developers to have matching environments for things like databases, servers, and runtimes without having to manually install and configure them locally.
The Information Technology have led us into an era where the production, sharing and use of information are now part of everyday life and of which we are often unaware actors almost: it is now almost inevitable not leave a digital trail of many of the actions we do every day; for example, by digital content such as photos, videos, blog posts and everything that revolves around the social networks (Facebook and Twitter in particular). Added to this is that with the "internet of things", we see an increase in devices such as watches, bracelets, thermostats and many other items that are able to connect to the network and therefore generate large data streams. This explosion of data justifies the birth, in the world of the term Big Data: it indicates the data produced in large quantities, with remarkable speed and in different formats, which requires processing technologies and resources that go far beyond the conventional systems management and storage of data. It is immediately clear that, 1) models of data storage based on the relational model, and 2) processing systems based on stored procedures and computations on grids are not applicable in these contexts. As regards the point 1, the RDBMS, widely used for a great variety of applications, have some problems when the amount of data grows beyond certain limits. The scalability and cost of implementation are only a part of the disadvantages: very often, in fact, when there is opposite to the management of big data, also the variability, or the lack of a fixed structure, represents a significant problem. This has given a boost to the development of the NoSQL database. The website NoSQL Databases defines NoSQL databases such as "Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open source and horizontally scalable." These databases are: distributed, open source, scalable horizontally, without a predetermined pattern (key-value, column-oriented, document-based and graph-based), easily replicable, devoid of the ACID and can handle large amounts of data. These databases are integrated or integrated with processing tools based on the MapReduce paradigm proposed by Google in 2009. MapReduce with the open source Hadoop framework represent the new model for distributed processing of large amounts of data that goes to supplant techniques based on stored procedures and computational grids (step 2). The relational model taught courses in basic database design, has many limitations compared to the demands posed by new applications based on Big Data and NoSQL databases that use to store data and MapReduce to process large amounts of data.
Course Website http://pbdmng.datatoknowledge.it/
Contact me to download the slides
Docker allows building and running applications inside lightweight containers. Some key benefits of Docker include:
- Portability - Dockerized applications are completely portable and can run on any infrastructure from development machines to production servers.
- Consistency - Docker ensures that application dependencies and environments are always the same, regardless of where the application is run.
- Efficiency - Docker containers are lightweight since they don't need virtualization layers like VMs. This allows for higher density and more efficient use of resources.
This document provides information about Linux containers and Docker. It discusses:
1) The evolution of IT from client-server models to thin apps running on any infrastructure and the challenges of ensuring consistent service interactions and deployments across environments.
2) Virtual machines and their benefits of full isolation but large disk usage, and Vagrant which allows packaging and provisioning of VMs via files.
3) Docker and how it uses Linux containers powered by namespaces and cgroups to deploy applications in lightweight portable containers that are more efficient than VMs. Examples of using Docker are provided.
Building with Virtual Development EnvironmentsOscar Merida
Struggling with getting Apache, MySQL, PHP and everything else you need to start working on your next project? In this talk, we'll look at how to use Vagrant to setup a reusable development environment for Drupal. Vagrant automates setting it up so you can focus on getting work done, share identical environments with colleagues, and precisely match your local and production environments.
Powering Development and Testing Environments with VagrantCoen Jacobs
Vagrant is a tool that allows developers to easily create and configure consistent development environments. It creates virtual machines that mirror production environments, allowing developers to work locally. Vagrant handles the installation of software, configuration, and provisioning so developers can focus on coding. It ensures environments are consistent across teams by managing environments through files under version control. Vagrant solves problems with traditional development environments by making them repeatable, isolated, and easy to understand.
OSCON: Advanced Docker developer workflows on Mac OS and WindowsDocker, Inc.
with Anil Madhavapeddy and Richard Mortier
Most developers use a Mac or Windows host to develop Docker Linux containers. This normally requires the installation of a Linux virtual machine as well as a complicated setup that includes a local networked filesystem for sharing data between the host and the Linux container, including UID mapping and case sensitivity, with inotify often being unreliable into the container; replicating Linux networking configuration locally to reflect the structure of the deployed microservices on the local laptop; and maintaining a separate Linux virtual machine and hypervisor such as VirtualBox, leading to heavyweight resource usage on a developer laptop.
Anil Madhavapeddy and Richard Mortier outline various methods to make using Docker on a Mac OS or Windows laptop as transparent as possible to the developer, including build scenarios from the conventional (Compose-based web stacks) to the deep end of systems (unikernel compilation) to the multi-CPU architecture (cross-compiling ARM containers on a normal Mac or Windows host).
Building with Virtual Development EnvironmentsOscar Merida
Struggling with getting Apache, MySQL, PHP and everything else you need to start working on your next project? In this talk, we'll look at how to use Vagrant to setup a reusable development environment for Drupal. Vagrant automates setting it up so you can focus on getting work done, share identical environments with colleagues, and precisely match your local and production environments.
Vagrant is a tool that allows users to create and configure lightweight, reproducible, and portable development environments. It works by allowing users to define and provision virtual development environments using configuration files. Vagrant provides users with a standardized way to manage virtual machines across different operating systems and virtualization platforms.
This document outlines an agenda for a Vagrant 101 workshop. The workshop will teach participants about environments and Infrastructure as Code using Vagrant. It will cover setting up a Vagrant environment with VirtualBox, basic Vagrant commands like init, up, ssh, destroy and box add. The agenda includes introducing environments, Vagrant, VirtualBox, commands, and workflow. Requirements are basic Linux knowledge and the latest versions of Vagrant and VirtualBox installed.
These are the slides from WpCampus 2016 presentation Varying WordPress Development Environment . This is a presentation and demo of what VVV is, how to install and how to use it.
Varying WordPress Development Environment WordCamp Columbus 2016David Brattoli
These are the slides of David Brattoli's WordCamp Columbus 2016 presentation Varying WordPress Development Environment. This presentation covers setting a local web development for WordPress using Varying-Vagrant-Vagrants.
Create your very own Development Environment with Vagrant and Packerfrastel
Vagrant, Packer, and Puppet can be used together to create a development environment. Packer is used to build custom base boxes that include only the operating system. Vagrant uses these base boxes to create isolated virtual machines. Puppet then provisions the virtual machines by installing additional software, configuring applications, and defining infrastructure as code. This allows for consistent, reproducible development environments that match production.
Similar to Making Developers Productive with Vagrant, VirtualBox, and Docker (20)
Do you want Software for your Business? Visit Deuglo
Deuglo has top Software Developers in India. They are experts in software development and help design and create custom Software solutions.
Deuglo follows seven steps methods for delivering their services to their customers. They called it the Software development life cycle process (SDLC).
Requirement — Collecting the Requirements is the first Phase in the SSLC process.
Feasibility Study — after completing the requirement process they move to the design phase.
Design — in this phase, they start designing the software.
Coding — when designing is completed, the developers start coding for the software.
Testing — in this phase when the coding of the software is done the testing team will start testing.
Installation — after completion of testing, the application opens to the live server and launches!
Maintenance — after completing the software development, customers start using the software.
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsPeter Muessig
The UI5 tooling is the development and build tooling of UI5. It is built in a modular and extensible way so that it can be easily extended by your needs. This session will showcase various tooling extensions which can boost your development experience by far so that you can really work offline, transpile your code in your project to use even newer versions of EcmaScript (than 2022 which is supported right now by the UI5 tooling), consume any npm package of your choice in your project, using different kind of proxies, and even stitching UI5 projects during development together to mimic your target environment.
Odoo ERP software
Odoo ERP software, a leading open-source software for Enterprise Resource Planning (ERP) and business management, has recently launched its latest version, Odoo 17 Community Edition. This update introduces a range of new features and enhancements designed to streamline business operations and support growth.
The Odoo Community serves as a cost-free edition within the Odoo suite of ERP systems. Tailored to accommodate the standard needs of business operations, it provides a robust platform suitable for organisations of different sizes and business sectors. Within the Odoo Community Edition, users can access a variety of essential features and services essential for managing day-to-day tasks efficiently.
This blog presents a detailed overview of the features available within the Odoo 17 Community edition, and the differences between Odoo 17 community and enterprise editions, aiming to equip you with the necessary information to make an informed decision about its suitability for your business.
Hand Rolled Applicative User ValidationCode KataPhilip Schwarz
Could you use a simple piece of Scala validation code (granted, a very simplistic one too!) that you can rewrite, now and again, to refresh your basic understanding of Applicative operators <*>, <*, *>?
The goal is not to write perfect code showcasing validation, but rather, to provide a small, rough-and ready exercise to reinforce your muscle-memory.
Despite its grandiose-sounding title, this deck consists of just three slides showing the Scala 3 code to be rewritten whenever the details of the operators begin to fade away.
The code is my rough and ready translation of a Haskell user-validation program found in a book called Finding Success (and Failure) in Haskell - Fall in love with applicative functors.
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
Measures in SQL (SIGMOD 2024, Santiago, Chile)Julian Hyde
SQL has attained widespread adoption, but Business Intelligence tools still use their own higher level languages based upon a multidimensional paradigm. Composable calculations are what is missing from SQL, and we propose a new kind of column, called a measure, that attaches a calculation to a table. Like regular tables, tables with measures are composable and closed when used in queries.
SQL-with-measures has the power, conciseness and reusability of multidimensional languages but retains SQL semantics. Measure invocations can be expanded in place to simple, clear SQL.
To define the evaluation semantics for measures, we introduce context-sensitive expressions (a way to evaluate multidimensional expressions that is consistent with existing SQL semantics), a concept called evaluation context, and several operations for setting and modifying the evaluation context.
A talk at SIGMOD, June 9–15, 2024, Santiago, Chile
Authors: Julian Hyde (Google) and John Fremlin (Google)
https://doi.org/10.1145/3626246.3653374
SMS API Integration in Saudi Arabia| Best SMS API ServiceYara Milbes
Discover the benefits and implementation of SMS API integration in the UAE and Middle East. This comprehensive guide covers the importance of SMS messaging APIs, the advantages of bulk SMS APIs, and real-world case studies. Learn how CEQUENS, a leader in communication solutions, can help your business enhance customer engagement and streamline operations with innovative CPaaS, reliable SMS APIs, and omnichannel solutions, including WhatsApp Business. Perfect for businesses seeking to optimize their communication strategies in the digital age.
8 Best Automated Android App Testing Tool and Framework in 2024.pdfkalichargn70th171
Regarding mobile operating systems, two major players dominate our thoughts: Android and iPhone. With Android leading the market, software development companies are focused on delivering apps compatible with this OS. Ensuring an app's functionality across various Android devices, OS versions, and hardware specifications is critical, making Android app testing essential.
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesQuickdice ERP
Explore the seamless transition to e-invoicing with this comprehensive guide tailored for Saudi Arabian businesses. Navigate the process effortlessly with step-by-step instructions designed to streamline implementation and enhance efficiency.
DDS Security Version 1.2 was adopted in 2024. This revision strengthens support for long runnings systems adding new cryptographic algorithms, certificate revocation, and hardness against DoS attacks.
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
Using Query Store in Azure PostgreSQL to Understand Query PerformanceGrant Fritchey
Microsoft has added an excellent new extension in PostgreSQL on their Azure Platform. This session, presented at Posette 2024, covers what Query Store is and the types of information you can get out of it.
How to write a program in any programming language
Making Developers Productive with Vagrant, VirtualBox, and Docker
1. December 4–9, 2016 | Boston, MA
www.usenix.org/lisa16 #lisa16
Making Developers More Productive with
Vagrant, VirtualBox, and Docker
John J. Rofrano
Senior Technical Staff Member, IBM T.J. Watson Research
+ +
2. Even the Development Team !!!
DevOps Principle of the Day:
“AUTOMATE EVERYTHING!”
3. What We Will Cover?
• How to create customized development environments with Vagrant
and VirtualBox that can be created and destroyed and created
again in a consistent fashion
• How to leverage Docker containers for middleware deployment
• How to make your DevOps team more productive with just a single
command: > vagrant up
4. The Problem
• Manually creating local environments for developers to work in is:
• Time consuming
• Error prone
• Inconsistent at best
• Unreproducible at worst!
6. The Wrong Solution
• Carefully and painstakingly create documentation in the form of
“runbooks” that give step-by-step instructions on how to recreate the
development environment via cut-n-paste
• NOT VERY AGILE !!!
• We value: Working software over comprehensive documentation
7. The Right Solution
• Automate the creation of local
development environments right
on your laptop or desktop
Use VirtualBox to create
Virtual Machines to
develop in
Use Docker to handle
middleware without any
installation
Use Vagrant to quickly provision
complex configurations consistently
with repeatability
8. Virtual Machines
• Virtual Machines (VM) are created
by emulating computer hardware in
software
• The emulation is provided by
software called a Hypervisor
• Each Guest OS thinks it’s talking to
dedicated computer hardware but it
is really talking to the hypervisor that
is sharing a much larger system
BINS/LIBS BINS/LIBS BINS/LIBS
GUEST OS
(RedHat)
GUEST OS
(Windows)
GUEST OS
(Ubuntu)
HYPERVISOR
HOST OPERATING SYSTEM
INFRASTRUCTURE
APP 1 APP 2 APP 3
9. Virtual Machines
• Virtual Machines (VM) are created
by emulating computer hardware in
software
• The emulation is provided by
software called a Hypervisor
• Each Guest OS thinks it’s talking to
dedicated computer hardware but it
is really talking to the hypervisor that
is sharing a much larger system
BINS/LIBS BINS/LIBS BINS/LIBS
GUEST OS
(RedHat)
GUEST OS
(Windows)
GUEST OS
(Ubuntu)
HYPERVISOR
HOST OPERATING SYSTEM
INFRASTRUCTURE
APP 1 APP 2 APP 3
VM VM VM
10. What is VirtualBox?
• VirtualBox is a free Hypervisor that runs on
OS X, Windows, and Linux
• Similar to VMware Workstation on a PC, or
VMware Fusions and Parallels Desktop on
a Mac
• Allows you to run your code in a Virtual
Machine
11. What is Vagrant?
• Vagrant is a developers tool for creating
lightweight, reproducible and portable virtual
environments via command-line
• It supports VirtualBox, VMware, SoftLayer,
Amazon AWS and Digital Ocean
• It supports configuration management utilities
like Puppet, Chef, etc.
• It supports Docker natively which makes is easy
to use Docker containers in VMs
12. What is Docker?
• Docker packages applications into Containers
that include all of their dependencies, but share
the kernel with other containers
• Containers run as an isolated process in
userspace on the host operating system
• Containers are not tied to any specific
infrastructure – Docker containers run on any
computer, on any infrastructure and in any
cloud.
• This guarantees that it will always run the same,
regardless of the environment it is running in.
13. Baked vs. Fried
• Do you Bake software into the image?
• Or do you Fry it up fresh when you need it?
• I like to Fry!
14. Today’s Focus
• Installing Vagrant and VirtualBox
• Create a simply Vagrantfile that spins up a Web Server in a VM
• Create a more complex Vagrantfile that leverages Docker
16. Some Assembly Required
• Tools you will need to complete this lab:
• Computer running OS X, Linux, or Windows*
• Internet Access to download boxes
• Text Editor (…i like Atom)
• GitHub Account
• PC users must have "VT-x/AMD-V hardware
acceleration" turned on in your BIOS for
VirtualBox to work.
* Windows users may need an ssh client
19. Windows SSH
• Vagrant requires an SSH client
which Windows doesn’t have by
default
• The easiest way to solve this is to
install git with the optional unix tools
• Here is a tutorial:
http://tech.osteel.me/posts/2015/01/25/how-to-use-vagrant-on-windows.html
20. Create Your First Vagrant VM
• Create a folder to work in:
• Go from Zero to running Ubuntu Trusty 64 with these 2 commands:
• That’s it! 😀
$ vagrant init ubuntu/trusty64
$ vagrant up
$ mkdir lab-vagrant-demo
$ cd lab-vagrant-demo
21. What Did “init” do?
• It created a default Vagrantfile that you can customize
• The Vagrantfile controls how the VM will be provisioned
• By editing the Vagrantfile we can change the VM’s behavior
• The Vagrantfile will be what you check-in to GitHub
22. Default Vagrantfile
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
# config.vm.box_check_update = false
# config.vm.network "forwarded_port", guest: 80, host: 8080
# config.vm.network "private_network", ip: "192.168.33.10"
# config.vm.network "public_network"
# config.vm.synced_folder "../data", “/vagrant_data"
# config.vm.provider "virtualbox" do |vb|
# vb.gui = true
# vb.memory = "1024"
# end
# config.push.define "atlas" do |push|
# push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
# end
# config.vm.provision "shell", inline: <<-SHELL
# sudo apt-get update
# sudo apt-get install -y apache2
# SHELL
end
23. Default Vagrantfile
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
# config.vm.box_check_update = false
# config.vm.network "forwarded_port", guest: 80, host: 8080
# config.vm.network "private_network", ip: "192.168.33.10"
# config.vm.network "public_network"
# config.vm.synced_folder "../data", “/vagrant_data"
# config.vm.provider "virtualbox" do |vb|
# vb.gui = true
# vb.memory = "1024"
# end
# config.push.define "atlas" do |push|
# push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
# end
# config.vm.provision "shell", inline: <<-SHELL
# sudo apt-get update
# sudo apt-get install -y apache2
# SHELL
end
This is a Ruby file that uses Ruby syntax
24. Default Vagrantfile
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
# config.vm.box_check_update = false
# config.vm.network "forwarded_port", guest: 80, host: 8080
# config.vm.network "private_network", ip: "192.168.33.10"
# config.vm.network "public_network"
# config.vm.synced_folder "../data", “/vagrant_data"
# config.vm.provider "virtualbox" do |vb|
# vb.gui = true
# vb.memory = "1024"
# end
# config.push.define "atlas" do |push|
# push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
# end
# config.vm.provision "shell", inline: <<-SHELL
# sudo apt-get update
# sudo apt-get install -y apache2
# SHELL
end
This is a Ruby file that uses Ruby syntax
Selects the box to use as a base
25. Default Vagrantfile
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
# config.vm.box_check_update = false
# config.vm.network "forwarded_port", guest: 80, host: 8080
# config.vm.network "private_network", ip: "192.168.33.10"
# config.vm.network "public_network"
# config.vm.synced_folder "../data", “/vagrant_data"
# config.vm.provider "virtualbox" do |vb|
# vb.gui = true
# vb.memory = "1024"
# end
# config.push.define "atlas" do |push|
# push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
# end
# config.vm.provision "shell", inline: <<-SHELL
# sudo apt-get update
# sudo apt-get install -y apache2
# SHELL
end
This is a Ruby file that uses Ruby syntax
Selects the box to use as a base
}Everything else is commented out
26. What Did “up” Do?
• Vagrant downloaded the ubuntu/trusty64 box from
atlas.hashicorp.com
• VirtualBox was called to create a VM from that box
• Installed VirtualBox tools and setup the network and shared your
current folder as /vagrant
• Ran provisioning scripts to prepare the VM (more on that later)
• Set up SSH keys to logon to the VM
27. Initial Vagrant Run
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
iotia:lab-vagrant-demo rofrano$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Setting the name of the VM: lab-vagrant-demo_default_1466018224850_26496
==> default: Clearing any previously set forwarded ports...
==> default: Couldn't find Cheffile at ./Cheffile.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
28. Initial Vagrant Run
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
iotia:lab-vagrant-demo rofrano$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Setting the name of the VM: lab-vagrant-demo_default_1466018224850_26496
==> default: Clearing any previously set forwarded ports...
==> default: Couldn't find Cheffile at ./Cheffile.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
Creates the
VM
29. Initial Vagrant Run
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
iotia:lab-vagrant-demo rofrano$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Setting the name of the VM: lab-vagrant-demo_default_1466018224850_26496
==> default: Clearing any previously set forwarded ports...
==> default: Couldn't find Cheffile at ./Cheffile.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
Creates the
VM
Setup Network/Port
Forwarding
30. Initial Vagrant Run
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
iotia:lab-vagrant-demo rofrano$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Setting the name of the VM: lab-vagrant-demo_default_1466018224850_26496
==> default: Clearing any previously set forwarded ports...
==> default: Couldn't find Cheffile at ./Cheffile.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
Creates the
VM
Setup Network/Port
Forwarding
Setup SSH keys
33. What Other Boxes Are There?
http://www.vagrantbox.es/
This is one way to add these boxes
34. How To Use A Different Box?
• To use a different box, specify a name in config.vm.box and
the url in config.vm.box_url
Vagrant.configure(2) do |config|
config.vm.box = "centos64-x86_64"
config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/
download/v6.4.2/centos64-x86_64-20140116.box"
end
35. Accessing Your VM
• Use SSH client to access your VM
• /vagrant folder holds your current directory on the host OS
$ vagrant ssh
$ cd /vagrant
36. Vagrant SSH
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
$ vagrant ssh
37. Vagrant SSH
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
$ vagrant ssh ssh into the vm
38. Vagrant SSH
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
$ vagrant ssh
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-87-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Wed Jun 15 19:17:28 UTC 2016
System load: 0.91 Processes: 81
Usage of /: 3.5% of 39.34GB Users logged in: 0
Memory usage: 25% IP address for eth0: 10.0.2.15
Swap usage: 0%
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
$
39. Vagrant SSH
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
$ vagrant ssh
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-87-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Wed Jun 15 19:17:28 UTC 2016
System load: 0.91 Processes: 81
Usage of /: 3.5% of 39.34GB Users logged in: 0
Memory usage: 25% IP address for eth0: 10.0.2.15
Swap usage: 0%
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
$ cd /vagrant
$ ls -l
40. Vagrant SSH
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
$ vagrant ssh
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-87-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Wed Jun 15 19:17:28 UTC 2016
System load: 0.91 Processes: 81
Usage of /: 3.5% of 39.34GB Users logged in: 0
Memory usage: 25% IP address for eth0: 10.0.2.15
Swap usage: 0%
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
$ cd /vagrant
$ ls -l
access to local filesystem via the /vagrant folder
41. Vagrant SSH
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
$ vagrant ssh
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-87-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Wed Jun 15 19:17:28 UTC 2016
System load: 0.91 Processes: 81
Usage of /: 3.5% of 39.34GB Users logged in: 0
Memory usage: 25% IP address for eth0: 10.0.2.15
Swap usage: 0%
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
$ cd /vagrant
$ ls -l
total 4
-rw-r--r-- 1 vagrant vagrant 1928 Jun 15 19:12 Vagrantfile
$
42. Vagrant SSH
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
$ vagrant ssh
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-87-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Wed Jun 15 19:17:28 UTC 2016
System load: 0.91 Processes: 81
Usage of /: 3.5% of 39.34GB Users logged in: 0
Memory usage: 25% IP address for eth0: 10.0.2.15
Swap usage: 0%
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
$ cd /vagrant
$ ls -l
total 4
-rw-r--r-- 1 vagrant vagrant 1928 Jun 15 19:12 Vagrantfile
$
This is your Vagrantfile from
inside the VM
43. Getting In and Out of your VM
• Just like any remote server that you ssh into, you use exit to leave
• To get back in you just ssh again
$ exit
iotia:lab-vagrant rofrano$
iotia:lab-vagrant rofrano$ vagrant ssh
$
44. Vagrant file sharing
• Vagrant is sharing the host folder it was invoked from within the vm
as /vagrant
• This means that you and edit files with your native Mac or Windows
editor
• …and still be able to run the code on your Linux VM
45. Install Apache
• We can install software using Chef, Ansible, Puppet, Salt, Shell, etc.
• Let’s use the “shell” provisioner to add apache2 (just uncomment the code)
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get update
sudo apt-get install -y apache2
SHELL
end
46. Install Apache
• We can install software using Chef, Ansible, Puppet, Salt, Shell, etc.
• Let’s use the “shell” provisioner to add apache2 (just uncomment the code)
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get update
sudo apt-get install -y apache2
SHELL
end
Uncomment this code
from the bottom of the Vagrantfile
It uses shell syntax for the
OS (Ubuntu in this case)
47. Re-provision the VM after Updates
• After making changes to a Vagrantfile in any of the provisioning
sections, you must re-provision the VM
$ exit
$ vagrant reload --provision
48. Re-provision the VM after Updates
• After making changes to a Vagrantfile in any of the provisioning
sections, you must re-provision the VM
$ exit
$ vagrant reload --provision
Reload alone will only reboot the VM and run non-provisioning
blocks but the --provision parameter forces the provision blocks
to be re-evaluated and run
49. Testing the Web Server
• Use SSH client to access your VM and CURL to access Apache
• You should see HTML returned
• But if you access it from your browser it will fail! Why?
$ vagrant ssh
$ curl 127.0.0.1
50. Let’s Forward The Web Port
• We must forward the ports that we want to access from outside the
VM. Let’s add a private IP Address for direct access too:
Vagrant.configure(2) do |config|
config.vm.box = “ubuntu/trusty64"
# accessing "localhost:8080" will access port 80 on the guest machine.
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get update
sudo apt-get install -y apache2
SHELL
end
51. Let’s Forward The Web Port
• We must forward the ports that we want to access from outside the
VM. Let’s add a private IP Address for direct access too:
Vagrant.configure(2) do |config|
config.vm.box = “ubuntu/trusty64"
# accessing "localhost:8080" will access port 80 on the guest machine.
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get update
sudo apt-get install -y apache2
SHELL
end
We should use ports higher
than 1024 if we are not root
52. Reload the VM after Updates
• Since we didn't change any of the provisioning blocks in the
Vagrantfile, we can just reload the VM and the port forwarding
will be picked up
$ exit
$ vagrant reload
53. New Vagrant Run
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
iotia:lab-vagrant-demo rofrano$ vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Couldn't find Cheffile at ./Cheffile.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports...
default: 80 (guest) => 8080 (host) (adapter 1)
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default: Warning: Remote connection disconnect. Retrying...
==> default: Machine booted and ready!
GuestAdditions 5.0.20 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => /Users/rofrano/github/Demo/lab-vagrant-demo
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
iotia:lab-vagrant-demo rofrano$
54. New Vagrant Run
• Use SSH client to access your VM
vagrant ssh
/vagrant
• /vagrant folder holds your current directory on the host OS
iotia:lab-vagrant-demo rofrano$ vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Couldn't find Cheffile at ./Cheffile.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports...
default: 80 (guest) => 8080 (host) (adapter 1)
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default: Warning: Remote connection disconnect. Retrying...
==> default: Machine booted and ready!
GuestAdditions 5.0.20 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => /Users/rofrano/github/Demo/lab-vagrant-demo
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
iotia:lab-vagrant-demo rofrano$
Our port got forwarded from 80 inside the VM
to 8080 outside the VM (on the host)
56. Test It In Your Browser
config.vm.network "forwarded_port", guest: 80, host: 8080
Can be accessed from
127.0.0.1:8080
57. Test It In Your Browser
config.vm.network "forwarded_port", guest: 80, host: 8080
Can be accessed from
127.0.0.1:8080
config.vm.network "private_network", ip: "192.168.33.10"
Can be also accessed from
192.168.33.10:80
59. Adding Your Own Content
• We can link a local folder to the html root to serve up our own
content (remember our local folder is shared with the VM!)
• First lets create a new ./html folder and add index.html:
$ mkdir html
$ cd html
$ echo '<html><h1>Hello World!</h1></html>' > index.html
60. Link Our HTML Folder
• We can point /var/www/html to our host folder /vagrant/html
Vagrant.configure(2) do |config|
config.vm.box = “ubuntu/trusty64"
# accessing "localhost:8080" will access port 80 on the guest machine.
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get update
sudo apt-get install -y apache2
sudo rm -rf /var/www/html
sudo ln -s /vagrant/html /var/www/html
SHELL
end
61. Link Our HTML Folder
• We can point /var/www/html to our host folder /vagrant/html
Vagrant.configure(2) do |config|
config.vm.box = “ubuntu/trusty64"
# accessing "localhost:8080" will access port 80 on the guest machine.
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get update
sudo apt-get install -y apache2
sudo rm -rf /var/www/html
sudo ln -s /vagrant/html /var/www/html
SHELL
end
Remove the /var/www/html folder
and link to our host’s ./html folder
63. Re-provision the VM after Updates
• Since we changed a provision block in the Vagrantfile we must
reload and provision
$ vagrant reload --provision
65. What Just Happened?
• We are serving up local files from our laptop inside of the VM
• That means we can develop locally with our favorite IDE tools
• And we can run the code in a Linux VM just like a production server!
• Very Cool ! ! ! 😎
66. Removing a VM Permanently
• When you no longer need a VM you can delete it from your computer.
• We are finished with this one and will create a new one in the next
section
• This is accomplished with the destroy command
$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N]
==> default: Destroying VM and associated drives...
67. Lets Add Docker To The Mix
• We want to create an environment to run a Python / Flask
microservice that uses a Redis database to store a hit counter
• We will use Docker to run Redis without having to install anything
• Vagrant supports a Docker provisioner that we can leverage
+ +
68. Clone the Project from GitHub
• You are a new developer to the project and you want to get up and
running quickly so that you can start developing:
$ git clone git@github.com:rofrano/lab-vagrant.git
$ cd lab-vagrant
$ vagrant up
78. Application Code
Pull runtime data from the environment
Connect to Redis and
run Flask Server
/ returns info
/hits calls Redis to
increment counter
and return it
79. Start the Application
• Once the Vagrant VM has been provisioned we can ssh into it and
start the Python Flask application
$ vagrant ssh
$ cd /vagrant
$ python app.py
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
82. Flask is Serving Our Application
Root / returns information
/hits increments and returns the hit counter
83. What Just Happened?
• A developer (you) who possibly never worked with Python, Flask, or
Redis before
• Just cloned a git repo and provisioned a working development
environment
• With one command: vagrant up
85. Vagrant Ruby on Rails Environment
# Forward RAILS port
config.vm.network :forwarded_port, guest: 3000, host: 3000, auto_correct: true
# Setup a Ruby on Rails development environment
config.vm.provision :shell, privileged: false, inline: <<-SHELL
sudo apt-get update
sudo apt-get -y install git libsqlite3-dev libpq-dev nodejs
sudo apt-get -y autoremove
# disable docs during gem install
echo "gem: --no-document" >> ~/.gemrc
gem update --no-rdoc --no-ri
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
# use RVM to install Ruby and Rails
curl -sSL https://get.rvm.io | bash -s stable --rails
# Add Heroku toolbelt
sudo wget -O- https://toolbelt.heroku.com/install-ubuntu.sh | sh
SHELL
86. Working With Docker In The VM
• We can run any Docker commands inside the VM to get the current
status of any Docker containers
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis alpine 8a8bdae38335 7 days ago 29.07 MB
87. Working With Docker In The VM
• We can run any Docker commands inside the VM to get the current
status of any Docker containers
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis alpine 8a8bdae38335 7 days ago 29.07 MB
List Image Inventory
88. Working With Docker In The VM
• We can run any Docker commands inside the VM to get the current
status of any Docker containers
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis alpine 8a8bdae38335 7 days ago 29.07 MB
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ef040bad484 redis:alpine "docker-entrypoint.sh" 25 hours ago Up 16 minutes 0.0.0.0:6379->6379/tcp redis
89. Working With Docker In The VM
• We can run any Docker commands inside the VM to get the current
status of any Docker containers
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis alpine 8a8bdae38335 7 days ago 29.07 MB
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ef040bad484 redis:alpine "docker-entrypoint.sh" 25 hours ago Up 16 minutes 0.0.0.0:6379->6379/tcp redis
List Running Containers
90. $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ef040bad484 redis:alpine "docker-entrypoint.sh" 25 hours ago Up 16 minutes 0.0.0.0:6379->6379/tcp redis
config.vm.provision "docker" do |d|
d.pull_images "redis:alpine"
d.run "redis:alpine",
args: "--restart=always -d --name redis -h redis -p 6379:6379 -v /var/lib/redis/data:/data"
end
Vagrantfile to Docker Mapping
• This is the mapping from the Vagrantfile to the Docker containers:
Vagrantfile
91. $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ef040bad484 redis:alpine "docker-entrypoint.sh" 25 hours ago Up 16 minutes 0.0.0.0:6379->6379/tcp redis
config.vm.provision "docker" do |d|
d.pull_images "redis:alpine"
d.run "redis:alpine",
args: "--restart=always -d --name redis -h redis -p 6379:6379 -v /var/lib/redis/data:/data"
end
Vagrantfile to Docker Mapping
• This is the mapping from the Vagrantfile to the Docker containers:
Image to run
Vagrantfile
92. $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ef040bad484 redis:alpine "docker-entrypoint.sh" 25 hours ago Up 16 minutes 0.0.0.0:6379->6379/tcp redis
config.vm.provision "docker" do |d|
d.pull_images "redis:alpine"
d.run "redis:alpine",
args: "--restart=always -d --name redis -h redis -p 6379:6379 -v /var/lib/redis/data:/data"
end
Vagrantfile to Docker Mapping
• This is the mapping from the Vagrantfile to the Docker containers:
Image to run Port to listen on
Vagrantfile
93. $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ef040bad484 redis:alpine "docker-entrypoint.sh" 25 hours ago Up 16 minutes 0.0.0.0:6379->6379/tcp redis
config.vm.provision "docker" do |d|
d.pull_images "redis:alpine"
d.run "redis:alpine",
args: "--restart=always -d --name redis -h redis -p 6379:6379 -v /var/lib/redis/data:/data"
end
Vagrantfile to Docker Mapping
• This is the mapping from the Vagrantfile to the Docker containers:
Image to run Port to listen on
name of container
Vagrantfile
94. What about data persistence?
• Map a Volume in the VM to persist data cross Docker containers
Vagrant.configure(2) do |config|
config.vm.provision "shell", inline: <<-SHELL
# Prepare Redis data share
sudo mkdir -p /var/lib/redis/data
sudo chown vagrant:vagrant /var/lib/redis/data
SHELL
# Add Redis docker container
config.vm.provision "docker" do |d|
d.pull_images "redis:alpine"
d.run "redis:alpine",
args: "--restart=always -d --name redis -h redis -p 6379:6379 -v /var/lib/redis/data:/data"
end
end
95. What about data persistence?
• Map a Volume in the VM to persist data cross Docker containers
Vagrant.configure(2) do |config|
config.vm.provision "shell", inline: <<-SHELL
# Prepare Redis data share
sudo mkdir -p /var/lib/redis/data
sudo chown vagrant:vagrant /var/lib/redis/data
SHELL
# Add Redis docker container
config.vm.provision "docker" do |d|
d.pull_images "redis:alpine"
d.run "redis:alpine",
args: "--restart=always -d --name redis -h redis -p 6379:6379 -v /var/lib/redis/data:/data"
end
end
Persist container data in the VM
102. Handy Docker Startup Args
• --restart=always <— if it stops, restart it
• -d <— run as a daemon process (background)
• --name <name> <— name of running container in docker ps
• -p <host>:<cont> <— forward host port to container port
• -v </host/folder>:<container/folder> <— map volume
• -e MY_ENV_VAR=<value> <— inject environment variable
103. Where To Get More Containers?
hub.docker.com
• Contains 1000’s of Docker
images with almost every
software you can imagine
• Usually “official” images
come from the creator of the
software
• Most have documentation on
how to best use them
104. Ending Your Vagrant Session
• When you are done for the day, it’s a good idea to shutdown your
VM.
• This is accomplished with the halt command
$ exit
iotia:lab-vagrant rofrano$ vagrant halt
==> default: Attempting graceful shutdown of VM...
105. Removing a VM Permanently
• When you no longer need a VM you can delete it from your
computer
• This is accomplished with the destroy command
$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N]
==> default: Destroying VM and associated drives...
106. Handy Vagrant Commands
• vagrant up — bring up the vm
• vagrant ssh — open a shell inside the vm
• exit — exit out of the vm shell back to your host computer
• vagrant halt — shutdown the vm to return later with vagrant up
• vagrant suspend | resume — suspend vm and resume it later
• vagrant reload --provision — restarts vagrant machine, loads new Vagrantfile configuration and
reprovisions shell scripts
• vagrant destroy — delete the vm for good
• vagrant status — see the status of all the current Vagrantfile’s VM
• vagrant global-status — see the status of all Vagrant VM’s
107. Summary
• You just deployed your first Vagrant environment
• You learned how to automatically install additional software
• You added Docker containers to supply needed middleware
• You can now check your Vagrantfile into github so that others
can create the perfect development environment when working on
your project.