README: better intro, getting started instructions

Signed-off-by: Solomon Hykes <sh.github.6811@hykes.org>
This commit is contained in:
Solomon Hykes 2021-01-27 12:08:16 -08:00
parent cc5a48d39b
commit a282abfeb9

111
README.md
View File

@ -1,21 +1,50 @@
# dagger: the devops superglu, by the creators of docker
# Dagger: the devops superglu, by the creators of docker
Dagger is an automation platform that lets software teams bind all their tools and infrastructure together into a unified supply chain.
Dagger is a scripting environment for automating the delivery of your application to the cloud,
from code to production.
Thanks to its vast catalog of adapters, developed in the open and curated for safety and quality,
you can drop Dagger into an existing stack *without changing it*, and immediately start automating the most repetitive and complex tasks.
If you are familiar with PaaS services like Heroku, Firebase or Openshift:
Dagger makes it easy to create a custom PaaS that is perfectly tailored to each application,
instead of forcing it into a rigid, homogeneous mold. The Dagger philosophy
is that the platform should adapt to the application, not the other way around.
This means that, unlike traditional PaaS, you can use Dagger with all your applications,
*without having to change your tooling, software stack or infrastructure*.
TODO:
*[... principles: productivity + compat]*
*[.. do out-of-the-box things that would require months of work otherwise]*
*[.. alternative to the dilemna: paas or build your own?]*
## Warning: alpha software
Please note that Dagger is *alpha-quality software*. This means it has many bugs,
the user interface is minimal, and it may change in incompatible ways at any time.
If you are still willing to try it, thank you! We appreciate your help.
Please do not hesitate to ask questions, report bugs, or share feedback,
either in a github or in the discord chatroom.
## Platform as code
The most important feature of Dagger is that it is *programmable*.
Thanks to its powerful scripting environment and growing catalog of reusable components,
anyone with basic programming knowledge can assemble a custom platform for their application,
and quickly start automating repetitive and complex tasks, so the entire team can spend
less time getting deployment to work, and more time developing.
And most importantly, Dagger is *programmable*. Thanks to a powerful scripting environment,
anyone with basic programming knowledge can extend Dagger with their own custom adapters and workflows.
Whether you're a seasoned SRE building a custom PAAS for your organization, a hobbyist on a fun
over-engineered week-end project, or a developer trying to setup CICD because, well, someone has to do it..
There's a whole community of fellow automation enthusiasts ready to help you write your first Dagger script.
There's a whole community of fellow automation enthusiasts ready to help you write your first script.
## Usage examples
A few examples of how Dagger is used in the wild:
- Deploy a new API to AWS Elastic Container Service while continuing to deploy the main app on Heroku
- Use AWS Elastic Container Service to deploy the new API, while continuing to deploy the main app on Heroku.
- Deploy lightweight staging environments on-demand for QA, integration testing or product demos.
- Run integration tests on a live production-like deployment, automatically, for each pull request.
- Deploy the same app on Netlify for testing, and on Kubernetes for production
@ -31,6 +60,70 @@ A few examples of how Dagger is used in the wild:
- Migrate from Helm to Kustomize, without disrupting next week's big release.
## Getting started
1. Build the `dagger` command-line tool. You will need [Go](https://golang.org) version 1.13 or later.
```
$ make
```
2. Copy the `dagger` tool to a location listed in your `$PATH`. For example, to copy it to `/usr/local/bin`:
```
$ cp ./cmd/dagger/dagger /usr/local/bin
```
3. Run [buildkitd](https://github.com/moby/buildkit) on your local machine. The simplest way to do this is using [Docker](https://docker.com).
On a machine with Docker installed, run:
```
$ docker run -d --name buildkitd --privileged moby/buildkit:latest
```
4. Compute a test configuration
Currently `dagger` can only do one thing: compute a configuration with optional inputs, and print the result.
If you are confused by how to use this for your application, that is normal: `dagger compute` is a low-level command
which exposes the naked plumbing of the Dagger engine. In future versions, more user-friendly commands will be available
which hide the complexity of `dagger compute` (but it will always be available to power users, of course!).
Here is an example command, using an example configuration:
```
$ dagger compute \
./examples/simple \
--input 'www: hostname: "www.mysuperapp.com"' \
--input 'www: source: #dagger: compute: [{do:"fetch-git", remote:"https://github.com/samalba/hellogo", ref:"master"}]'
```
## Custom buildkit setup
Dagger can be configured to use an existing buildkit daemon, running either locally or remotely. This can be done using two environment variables: `BUILDKIT_HOST` and `DOCKER_HOST`.
To use a buildkit daemon listening on TCP port `1234` on localhost:
```
$ export BUILDKIT_HOST=tcp://localhost:1234
```
To use a buildkit daemon running in a container named "super-buildkit" on the local docker host:
```
$ export BUILDKIT_HOST=docker-container://super-buildkit
```
To use a buildkit daemon running on a remote docker host (be careful to properly secure remotely accessible docker hosts!)
```
$ export BUILDKIT_HOST=docker-container://super-buildkit
$ export DOCKER_HOST=tcp://my-remote-docker-host:2376
```
## Comparison to other automation platforms
@ -61,3 +154,5 @@ Kustomize, Helm, jsonnet
### Gitops
Flux, ...