Browse code

Update roadmap to reflect reality.

The roadmap is one of the most important ways that a new contributor may
get started on the codebase, as such it is important for it to reflect
the real effort that is currently happening.

This update just brings it up to date. There may be some other efforts
going on and I would encourage people to update the roadmap accordingly
as a separate effort.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>

Brian Goff authored on 2018/10/29 08:54:23
Showing 1 changed files
... ...
@@ -35,34 +35,83 @@ issue, in the Slack channel, or in person at the Moby Summits that happen every
35 35
 
36 36
 ## 1.1 Runtime improvements
37 37
 
38
-We introduced [`runC`](https://runc.io) as a standalone low-level tool for container
39
-execution in 2015, the first stage in spinning out parts of the Engine into standalone tools.
38
+Over time we have accumulated a lot of functionality in the container runtime
39
+aspect of Moby while also growing in other areas. Much of the container runtime
40
+pieces are now duplicated work available in other, lower level components such
41
+as [containerd](https://containerd.io).
40 42
 
41
-As runC continued evolving, and the OCI specification along with it, we created
42
-[`containerd`](https://github.com/containerd/containerd), a daemon to control and monitor `runC`.
43
-In late 2016 this was relaunched as the `containerd` 1.0 track, aiming to provide a common runtime
44
-for the whole spectrum of container systems, including Kubernetes, with wide community support.
45
-This change meant that there was an increased scope for `containerd`, including image management
46
-and storage drivers.
43
+Moby currently only utilizes containerd for basic runtime state management, e.g. starting
44
+and stopping a container, which is what the pre-containerd 1.0 daemon provided.
45
+Now that containerd is a full-fledged container runtime which supports full
46
+container life-cycle management, we would like to start relying more on containerd
47
+and removing the bits in Moby which are now duplicated. This will neccessitate
48
+a signficant effort to refactor and even remove large parts of Moby's codebase.
47 49
 
48
-Moby will rely on a long-running `containerd` companion daemon for all container execution
49
-related operations. This could open the door in the future for Engine restarts without interrupting
50
-running containers. The switch over to containerd 1.0 is an important goal for the project, and
51
-will result in a significant simplification of the functions implemented in this repository.
50
+Tracking issues:
52 51
 
53
-## 1.2 Internal decoupling
52
+- [#38043](https://github.com/moby/moby/issues/38043) Proposal: containerd image integration
53
+
54
+## 1.2 Image Builder
55
+
56
+Work is ongoing to integrate [BuildKit](https://github.com/moby/buildkit) into
57
+Moby and replace the "v0" build implementation. Buildkit offers better cache
58
+management, parallelizable build steps, and better extensibility while also
59
+keeping builds portable, a chief tenent of Moby's builder.
60
+
61
+Upon completion of this effort, users will have a builder that performs better
62
+while also being more extensible, enabling users to provide their own custom
63
+syntax which can be either Dockerfile-like or something completely different.
64
+
65
+See [buildpacks on buildkit](https://github.com/tonistiigi/buildkit-pack) as an
66
+example of this extensibility.
67
+
68
+New features for the builder and Dockerfile should be implemented first in the
69
+BuildKit backend using an external Dockerfile implementation from the container
70
+images. This allows everyone to test and evaluate the feature without upgrading
71
+their daemon. New features should go to the experimental channel first, and can be
72
+part of the `docker/dockerfile:experimental` image. From there they graduate to
73
+`docker/dockerfile:latest` and binary releases. The Dockerfile frontend source
74
+code is temporarily located at
75
+[https://github.com/moby/buildkit/tree/master/frontend/dockerfile](https://github.com/moby/buildkit/tree/master/frontend/dockerfile)
76
+with separate new features defined with go build tags.
77
+
78
+Tracking issues:
79
+
80
+- [#32925](https://github.com/moby/moby/issues/32925) discussion: builder future: buildkit
81
+
82
+## 1.3 Rootless Mode
83
+
84
+Running the daemon requires elevated privileges for many tasks. We would like to
85
+support running the daemon as a nomral, unprivileged user without requiring `suid`
86
+binaries.
87
+
88
+Tracking issues:
89
+
90
+- [#37375](https://github.com/moby/moby/issues/37375) Proposal: allow running `dockerd` as an unprivileged user (aka rootless mode)
91
+
92
+## 1.4 Testing
93
+
94
+Moby has many tests, both unit and integration. Moby needs more tests which can
95
+cover the full spectrum functionality and edge cases out there.
96
+
97
+Tests in the `integration-cli` folder should also be migrated into (both in
98
+location and style) the `integration` folder. These newer tests are simpler to
99
+run in isolation, simpler to read, simpler to write, and more fully exercise the
100
+API. Meanwhile tests of the docker CLI should generally live in docker/cli.
101
+
102
+Tracking issues:
103
+
104
+- [#32866](https://github.com/moby/moby/issues/32866) Replace integration-cli suite with API test suite
105
+
106
+## 1.5 Internal decoupling
54 107
 
55 108
 A lot of work has been done in trying to decouple Moby internals. This process of creating
56 109
 standalone projects with a well defined function that attract a dedicated community should continue.
57 110
 As well as integrating `containerd` we would like to integrate [BuildKit](https://github.com/moby/buildkit)
58 111
 as the next standalone component.
59
-
60 112
 We see gRPC as the natural communication layer between decoupled components.
61 113
 
62
-## 1.3 Custom assembly tooling
63
-
64
-We have been prototyping the Moby [assembly tool](https://github.com/moby/tool) which was originally
65
-developed for LinuxKit and intend to turn it into a more generic packaging and assembly mechanism
66
-that can build not only the default version of Moby, as distribution packages or other useful forms,
67
-but can also build very different container systems, themselves built of cooperating daemons built in
68
-and running in containers. We intend to merge this functionality into this repo.
114
+In addition to pushing out large components into other projects, much of the
115
+internal code structure, and in particular the
116
+["Daemon"](https://godoc.org/github.com/docker/docker/daemon#Daemon) object,
117
+should be split into smaller, more manageable, and more testable components.