github.com/dahs81/otto@v0.2.1-0.20160126165905-6400716cf085/website/source/intro/vs/docker.html.md (about) 1 --- 2 layout: "intro" 3 page_title: "Otto vs. Docker" 4 sidebar_current: "vs-other-docker" 5 description: |- 6 Comparison between Otto and Docker. 7 --- 8 9 # Otto vs. Docker 10 11 Docker is an ecosystem of tools including the Docker runtime, Compose, 12 Machine and Swarm. Each of these tools solves a different problem, but 13 they are all specific to Docker. 14 15 To develop using Docker, users must either develop on Linux or start a 16 virtual machine running Linux. Then a `docker-compose.yml` is constructed 17 with all the containers needed to run the full set of dependencies for your application. 18 This is used by Docker Compose to manage the lifecycle of development 19 containers. 20 21 Once ready for deployment, you must build the application, create 22 a Docker container, and upload it to Docker Hub or another registry. 23 To build your application you create a `Dockerfile` which contains 24 the compilation depedencies and emits a binary or compile artifact. 25 Another `Dockerfile` is used to create a minimal deployment container 26 with just this artifact, unless you want to deploy the container 27 that includes all the compilation dependencies. 28 29 Servers are provisioned with Docker Machine, which creates a server 30 that has the Docker runtime installed. Machine does not have 31 configuration file to specify all the machines needed, so it should 32 be invoked by a provisioning script. 33 34 If more than a single server is required, Docker Swarm is used to 35 cluster the servers together. This allows containers to be scheduled 36 to the cluster as if it were a single large machine. Docker Swarm 37 can be configured by Machine during server provisioning. 38 39 Once setup, containers must be provisioned on the cluster. This 40 can be done with the `docker` CLI pointing at the Swarm cluster. 41 For applications with dependencies, this should be wrapped in 42 a deployment script to ensure those are launched along with the 43 application. 44 45 Otto is a single tool and is much simpler to use. Otto uses an `Appfile` 46 to describe the application and any upstream dependencies. Otto 47 uses this same `Appfile` to setup development environments, 48 building, launch infrastructure, and deployment. 49 50 To create a development environment, `otto dev` is run. This 51 uses the `Appfile` to setup a virtual machine and downloads 52 any compilation or upstream dependencies. 53 54 Once ready, you can create the infrastructure for your application 55 by running `otto infra`. This provisions the servers needed to 56 run your application. This only needs to be done once to create 57 the infrastructure. 58 59 To build the application you run `otto build`. This packages 60 the application to be deployed. This can use Docker, but this 61 is a detail that developers do not need to worry about. The 62 `Appfile` already encodes what is needed and no `Dockerfile` 63 is necessary. 64 65 Lastly, `otto deploy` is used to deploy the application. 66 This will use the infrastructure setup by `otto infra` and 67 the build artifacts from `otto build`. 68 69 Otto is designed to be a single tool that manages the workflow 70 from development to production and requires only the `Appfile`. 71 It is meant to simplify the complex state of development today, 72 while using production hardened tools and industry best practices 73 automatically.