 Well, without any further ado, let's begin with the presentations. I would like to call the first group, which will be presenting on the topic, advance concepts of containerization using Docker and their implementation on Sunbird and IIT Bombay X platforms. A huge round of applause for them. Good morning everyone. My name is Pratik Khaas and my teammate name is Visragh Upta. We are here to present our summer internship project. Our project title is advance concept of containerization using Docker and their implementation on Sunbird and IIT Bombay X platform. Docker is a tool to develop, create, run and deploy application using containers. What are the motivations for this project? We like IIT Bombay X and Sunbird software are using Docker. When other teams are developing software on Sunbirds, so they have to run Docker. They have to face some road blocks like the right-listed on PPT. First is running is a big step. Means when you create application in Docker, you have to interact with Docker using command line interface. You don't have any GUI tool and there are also complications with container networks. You have to connect them properly for working applications. We are not used to containerize application architecture. We are comfortable in making application in a single machine with all services on a single machine. But we are not used to deploy application using the services on running on different containers. Docker itself is using some because Docker is in active development. So some developers may argue that if they develop an application in Docker and Docker might stop the support for previous version they implemented. So our objective is to get people to use the Docker. There are some advantages of using Docker. First one is application of Docker. Applications of Docker have significant variety. You can set up your environment, Python, Django, Node, JS and try out what is the best choice for you. Second, some features are unique to Docker. Like Docker have a Docker compose. So you can deploy your application using service in a single machine, Docker swarm. You can make a cluster of different virtual machines or computers and deploy application on that. Third, development, deployment, cycle can be optimized. You can add a continuous integration, continuous deployment using Docker. You just have to build the image from a Docker file and approach the Docker hub and directly run on a production or development environment. We studied, analyzed that case, Conrad University case study that used to occur for their solving problems. So we restart some problems they are facing and we find out how they solve their problem. First is they use Java and we just stop releasing update. Devourment testing and production environment are not seen. They cannot keep up with development and release their product in production development as fast as in Devourm. As you can see last project update for confidence they took 6 months. Original developers and engineers are not available. So they have to read all documents and configuration files and so for update a application. After using Docker, they can implement a continuous into CI and CD pipeline. So all things are gets automated. So project update takes only couple of weeks now. Then automatic build and deploy containers to Devourment testing because we build a Docker image on a Devourment and we directly run on a production. We do not have to worry about our dependency issues in production environment. This also decrease time splatter on issues with the environments. We also studied another case study, General Electric. They also have some issues and they solve using Docker. They have to spend every 6 weeks to move from Devourment to production environment. They have lots of regressive code to migrate to crowd. So they need some tools to manage that microservices architecture they are planning to move. They are using VMware. But in VMware they only deploy one application per VM. So using container, using Docker you can deploy up to 14 applications per VM. Automation with Puppet has a poor adoption rate because Puppet has its own automation language you have to write in. So Docker they use Docker based on automation software using Voyager. And also decreases the time of production to Devourment to production. And up to 60% of code migrated in just 4 months of fix. We study some use case of Docker network. Docker network is a component provided in Docker to communication between the Docker containers. So there are some driver options are ever in a Docker. There are bridge driver over the host network. We use them and study how Docker developer can use in different conditions and when they can use this type of network drivers. So first one is bridge network. It is used for container communication on the same Docker host. So when you are developing application which is running on a single Docker host machine. So what you can do is suppose you have front end porter and back end porter. So you run a front end service and back end service and connect them using some worker service. So you can manage your data flow and everything from worker service. And there is a over end network. This is used for connect multiple container, multiple Docker demons on running on different Docker host and another communication between them. Docker swam also uses this over a network to connect to two other clusters of nodes. Third one is a host network. So when you do not want to isolate your network stack from a host network. Suppose you have to like you are developing application like vial stack. Then you host network stack. So you want to your host network stack to provided also in a container. Because container runs always on an isolated environment. Using host network you can do that. MacViren you can allow container to appear as a physical device on a network. So what is advantage of this is you do not have to use the Docker swarm in MacViren. You can directly connect any available network host through directly connected to it. You do not have to connect to a Docker swarm. Because it act as a physical device. We also find out some use cases of a Docker storage. Docker storage it provides a persistent storage for using and storing data beyond container because when container gets stopped it is right over here got destroyed and we do not have access to the data. So we can use Docker storage for that. There are different options available for that. We can use bind moutes. Advantage of using bind moutes is sharing source code build artifacts between development environment on Docker or standard container like we use this type of bind mout. We dockerize sunbar port. So we use this type of mount in a sunbar port. In that we just change code in a host directory and all changes get reflected in the container. We can use a volume also. It is managed by Docker and Docker is when you do use that. When you do not have a specific given directory structure means in bind mout you have a home home directory type of thing but when you deploy in a cluster it might not have that directory structure and not different machine. So you can use Docker volume it is managed by Docker. You can use any file structure you want but in bind mout you have to use host file structure. There are also tempfs. It is very unique to Docker. It is storing all data into a RAM. So we can take advantage of that RAM. We can use the tempfs mount in a testing or write heavy application like database integration testing. So we can test a database so we can improve or read and write speed because we are storing data on a RAM. So now I would like to hand over to my friend to present it next part in a PPT. So as my friend was talking about Docker so it is a very good tool and it is very flexible and very performant but when you scale the app to multiple applications the problem rises of managing multiple Docker and here Docker some helps because it helps it basically helps you to manage clusters. So if multiple machines are connected to Docker and many applications are running on them you can basically declare what you want to do. So like I want five applications of my front end, two applications of my back end, three applications of database so it provides a declarative service model so that you can declare what you have to provide and you can just go on with it. And then it provides service discovery and load balancing. So service discovery like when you are running, when you are deploying the application having front end and back end and back end can contain a MongoDB database so you do not have to worry about if it is a single MongoDB database or it is a cluster of MongoDB. So in the front end app you can just write MongoDB and it will get connected to that application. Load balancing like when you are running front end application and you are running five applications of it. So Docker swarm what it will do is like it will in round robin fashion it will send a request to all the applications so that the load is balanced between all the containers. Then Kubernetes it is a more mature form of Docker swarm and it is developed by Google so it provides much more features as compared to Docker swarm like automatic bin packing. So what it means is like when container is deployed on a host machine and there are like ten machines. So it will automatically decide where the load is less or where we can deploy the container so that the service is highly available and it also provides a feature of self-filling. So when a container goes down it can automatically reprovision it and start the container from that state so that the service is not blocked. Then it is very flexible in terms of storage and networking. So it is like a Lego game so you can the main is Kubernetes and you can add much more storage plugins and much more networking plugins to it. So like you can back your container on AWS or Google Cloud and or Digital Ocean and it provides many more features of networking so that it is useful for your application. So this is a typical production deployment pipeline and so you know the first part is basically control integration and second part is container deployment. So what happens like when a developer pushes code on GitHub the code get pulled by Jenkins server. So Jenkins is basically a container integration tool. So the code get pushed code get pulled by Jenkins server it is built into an image and it is deployed into a Docker containers they are tested and then when the testing is complete and then Rancher what it will does is it will deploy the application to AWS or Digital Ocean and these. So what is the like advantage of Docker is you can dispose of like you can start a Docker in seconds and you can dispose of in a second. So it will help in decreasing the time from development to production. So this is main architecture of edX. What we have we have looked at how edX works and how edX has they have dockerized most of the architecture for local development. So we have looked at how they have dockerized their applications how they have used Docker storage and Docker networking to handle that communication. There was a position system which edX was using MongoDB. So we have created a MongoDB Sharded Cluster so that we can understand how we can set up our own Sharded Cluster from scratch. So in our application sample application which we have developed we have created three shards having two replica each. So the data will be divided into three parts according to hashing function and each shard has a primary replica and a secondary replica and it also has a cluster of conflict server and one query router. So what it will do is like it will query the incoming request depending on where it is stored and in case of sunbird what you have done is that we have installed the sunbird on local machine to understand how it works so that we can dockerize it and initially some of the services like player content and access services of sunbird are already dockerized. But we have found out that why they have not dockerized Cassandra Posty SQL Elastic Search. And then at the end we have dockerized sunbird portal and keyclaw service. So in conclusion what we have done till now is that we have learnt about how docker can be useful in different use cases. We have deployed sample application ranging from simple hello world application to a complex application like MongoDB Sharded Cluster or Hadoop or Cassandra Cluster. We have also looked at how sunbird works and how it can be dockerized. Thank you. I appreciate you finishing in time. Started 15 minutes late but will delay the lunch break. Some quick questions. Here you had VMs to work with. When you go back to your own institute and this applies to all of you. If you want to use this wonderful facility how could you use it? For example if you have a local server available to you let's say in your final project would you be able to create VMs there and deploy this? Yes we can deploy it if you don't want actually a VM you can also deploy it on a normal system. So you can just start using docker as is. Incidentally Nagesh the later architecture with Jenkins that is where you wanted to put that Selenium automation and everything right? A couple more questions on your part this sharding just remember one thing this concept of sharding and all emerged when conventional storage was being used which did not have any intrinsic reliability. But if you look at our cloud the OpenV storage automatically does this distribution. So sharding is implied replication is implied you don't have to do absolutely anything of that sort. Now when you don't have to do this how would you deploy Mongo for scalability for example. So you don't have to do any sharding or anything but you may run multiple Mongo applications each one having its own storage. What is guaranteed in such cloud environment is that the storage already has inbuilt replication inbuilt sharding. So you don't have to do anything at all there. And one last point I wanted to make was this automatic load balancing that you mentioned round robin is what you said that is deployed. But is round robin the best policy always? So is there any provision for you to introduce your own load balancing algorithms or it's fixed by the way? Like Engines is a reverse voxel load balancing server so you can deploy Engines on a Docker container and you can manage all the services from there. In fact this was the question because NGNX is a far better load balancer mechanism than the conventional one. Thank you. Good work.