Docker and Vagrant are virtualization containers. Both worlds have their own quirks but each one serves their purpose well. Vagrant, the older brother, uses virtual machines to create isolated environments for software development. On the other side, Docker uses another technique called Containers for isolation and in that term uses local system files and resources. Before those tools, there were so many problems with porting applications, setting them up on other development machines or servers. The problem was that all machines had different setups, some had different versions of required files or they didn't have required extensions. Modern distributed applications development often faces two problems, first problem is inconsistency of development environments because of multiple versions of operating systems and packages and the second one is services and discrepancies between development and test/deployment environments. Virtualization technology, such as virtual machines (VMs) and containers that can handle these problems effectively, but they are often difficult to use in real-world development processes due to the lack of appropriate tools for developers. Modern distributed applications, especially web applications, are typically built using a set of loosely coupled services, with rapid development and deployment cycles. These services may run in multiple virtual machines and are ephemeral according to clients demands. This paper presents both tools, compares them and shows which one of them is the best for which specific use. The purpose of this paper is to show when and why to use which tool and to show advantages and disadvantages of each one.