diff --git a/CHANGELOG.md b/CHANGELOG.md index a9e2dab79e..4d3502d23a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.3.3 (2013-05-23) + - Registry: Fix push regression + - Various bugfixes + ## 0.3.2 (2013-05-09) * Runtime: Store the actual archive on commit * Registry: Improve the checksum process diff --git a/README.md b/README.md index c83feeae58..918fdaade2 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Docker is an open-source implementation of the deployment engine which powers [d It benefits directly from the experience accumulated over several years of large-scale operation and support of hundreds of thousands of applications and databases. -![Docker L](docs/sources/static_files/lego_docker.jpg "Docker") +![Docker L](docs/sources/concepts/images/lego_docker.jpg "Docker") ## Better than VMs diff --git a/api.go b/api.go index 29103fac10..0a902c4043 100644 --- a/api.go +++ b/api.go @@ -13,6 +13,8 @@ import ( "strings" ) +const API_VERSION = 1.0 + func hijackServer(w http.ResponseWriter) (io.ReadCloser, io.Writer, error) { conn, _, err := w.(http.Hijacker).Hijack() if err != nil { @@ -56,7 +58,7 @@ func getBoolParam(value string) (bool, error) { return false, fmt.Errorf("Bad parameter") } -func getAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getAuth(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { b, err := json.Marshal(srv.registry.GetAuthConfig()) if err != nil { return err @@ -65,7 +67,7 @@ func getAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[strin return nil } -func postAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postAuth(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { config := &auth.AuthConfig{} if err := json.NewDecoder(r.Body).Decode(config); err != nil { return err @@ -94,7 +96,7 @@ func postAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[stri return nil } -func getVersion(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getVersion(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { m := srv.DockerVersion() b, err := json.Marshal(m) if err != nil { @@ -104,7 +106,7 @@ func getVersion(srv *Server, w http.ResponseWriter, r *http.Request, vars map[st return nil } -func postContainersKill(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postContainersKill(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if vars == nil { return fmt.Errorf("Missing parameter") } @@ -116,7 +118,7 @@ func postContainersKill(srv *Server, w http.ResponseWriter, r *http.Request, var return nil } -func getContainersExport(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getContainersExport(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if vars == nil { return fmt.Errorf("Missing parameter") } @@ -129,7 +131,7 @@ func getContainersExport(srv *Server, w http.ResponseWriter, r *http.Request, va return nil } -func getImagesJson(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getImagesJson(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -152,14 +154,14 @@ func getImagesJson(srv *Server, w http.ResponseWriter, r *http.Request, vars map return nil } -func getImagesViz(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getImagesViz(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := srv.ImagesViz(w); err != nil { return err } return nil } -func getInfo(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getInfo(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { out := srv.DockerInfo() b, err := json.Marshal(out) if err != nil { @@ -169,7 +171,7 @@ func getInfo(srv *Server, w http.ResponseWriter, r *http.Request, vars map[strin return nil } -func getImagesHistory(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getImagesHistory(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if vars == nil { return fmt.Errorf("Missing parameter") } @@ -186,7 +188,7 @@ func getImagesHistory(srv *Server, w http.ResponseWriter, r *http.Request, vars return nil } -func getContainersChanges(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getContainersChanges(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if vars == nil { return fmt.Errorf("Missing parameter") } @@ -203,7 +205,7 @@ func getContainersChanges(srv *Server, w http.ResponseWriter, r *http.Request, v return nil } -func getContainersPs(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getContainersPs(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -227,7 +229,7 @@ func getContainersPs(srv *Server, w http.ResponseWriter, r *http.Request, vars m return nil } -func postImagesTag(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postImagesTag(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -249,7 +251,7 @@ func postImagesTag(srv *Server, w http.ResponseWriter, r *http.Request, vars map return nil } -func postCommit(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postCommit(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -276,7 +278,7 @@ func postCommit(srv *Server, w http.ResponseWriter, r *http.Request, vars map[st } // Creates an image from Pull or from Import -func postImagesCreate(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postImagesCreate(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -299,7 +301,7 @@ func postImagesCreate(srv *Server, w http.ResponseWriter, r *http.Request, vars return nil } -func getImagesSearch(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getImagesSearch(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -317,7 +319,7 @@ func getImagesSearch(srv *Server, w http.ResponseWriter, r *http.Request, vars m return nil } -func postImagesInsert(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -335,7 +337,7 @@ func postImagesInsert(srv *Server, w http.ResponseWriter, r *http.Request, vars return nil } -func postImagesPush(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -352,7 +354,7 @@ func postImagesPush(srv *Server, w http.ResponseWriter, r *http.Request, vars ma return nil } -func postContainersCreate(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postContainersCreate(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { config := &Config{} if err := json.NewDecoder(r.Body).Decode(config); err != nil { return err @@ -382,7 +384,7 @@ func postContainersCreate(srv *Server, w http.ResponseWriter, r *http.Request, v return nil } -func postContainersRestart(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postContainersRestart(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -401,7 +403,7 @@ func postContainersRestart(srv *Server, w http.ResponseWriter, r *http.Request, return nil } -func deleteContainers(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func deleteContainers(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -421,7 +423,7 @@ func deleteContainers(srv *Server, w http.ResponseWriter, r *http.Request, vars return nil } -func deleteImages(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func deleteImages(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if vars == nil { return fmt.Errorf("Missing parameter") } @@ -433,7 +435,7 @@ func deleteImages(srv *Server, w http.ResponseWriter, r *http.Request, vars map[ return nil } -func postContainersStart(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postContainersStart(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if vars == nil { return fmt.Errorf("Missing parameter") } @@ -445,7 +447,7 @@ func postContainersStart(srv *Server, w http.ResponseWriter, r *http.Request, va return nil } -func postContainersStop(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postContainersStop(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -466,7 +468,7 @@ func postContainersStop(srv *Server, w http.ResponseWriter, r *http.Request, var return nil } -func postContainersWait(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postContainersWait(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if vars == nil { return fmt.Errorf("Missing parameter") } @@ -483,7 +485,7 @@ func postContainersWait(srv *Server, w http.ResponseWriter, r *http.Request, var return nil } -func postContainersAttach(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postContainersAttach(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -526,7 +528,7 @@ func postContainersAttach(srv *Server, w http.ResponseWriter, r *http.Request, v return nil } -func getContainersByName(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getContainersByName(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if vars == nil { return fmt.Errorf("Missing parameter") } @@ -544,7 +546,7 @@ func getContainersByName(srv *Server, w http.ResponseWriter, r *http.Request, va return nil } -func getImagesByName(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getImagesByName(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if vars == nil { return fmt.Errorf("Missing parameter") } @@ -562,7 +564,7 @@ func getImagesByName(srv *Server, w http.ResponseWriter, r *http.Request, vars m return nil } -func postImagesGetCache(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func postImagesGetCache(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { apiConfig := &ApiImageConfig{} if err := json.NewDecoder(r.Body).Decode(apiConfig); err != nil { return err @@ -589,7 +591,7 @@ func ListenAndServe(addr string, srv *Server, logging bool) error { r := mux.NewRouter() log.Printf("Listening for HTTP on %s\n", addr) - m := map[string]map[string]func(*Server, http.ResponseWriter, *http.Request, map[string]string) error{ + m := map[string]map[string]func(*Server, float64, http.ResponseWriter, *http.Request, map[string]string) error{ "GET": { "/auth": getAuth, "/version": getVersion, @@ -633,7 +635,7 @@ func ListenAndServe(addr string, srv *Server, logging bool) error { localRoute := route localMethod := method localFct := fct - r.Path(localRoute).Methods(localMethod).HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + f := func(w http.ResponseWriter, r *http.Request) { utils.Debugf("Calling %s %s", localMethod, localRoute) if logging { log.Println(r.Method, r.RequestURI) @@ -644,10 +646,20 @@ func ListenAndServe(addr string, srv *Server, logging bool) error { utils.Debugf("Warning: client and server don't have the same version (client: %s, server: %s)", userAgent[1], VERSION) } } - if err := localFct(srv, w, r, mux.Vars(r)); err != nil { + version, err := strconv.ParseFloat(mux.Vars(r)["version"], 64) + if err != nil { + version = API_VERSION + } + if version == 0 || version > API_VERSION { + w.WriteHeader(http.StatusNotFound) + return + } + if err := localFct(srv, version, w, r, mux.Vars(r)); err != nil { httpError(w, err) } - }) + } + r.Path("/v{version:[0-9.]+}" + localRoute).Methods(localMethod).HandlerFunc(f) + r.Path(localRoute).Methods(localMethod).HandlerFunc(f) } } diff --git a/api_test.go b/api_test.go index dd685ffece..de4289728e 100644 --- a/api_test.go +++ b/api_test.go @@ -48,7 +48,7 @@ func TestGetAuth(t *testing.T) { t.Fatal(err) } - if err := postAuth(srv, r, req, nil); err != nil { + if err := postAuth(srv, API_VERSION, r, req, nil); err != nil { t.Fatal(err) } @@ -74,7 +74,7 @@ func TestGetVersion(t *testing.T) { r := httptest.NewRecorder() - if err := getVersion(srv, r, nil, nil); err != nil { + if err := getVersion(srv, API_VERSION, r, nil, nil); err != nil { t.Fatal(err) } @@ -98,7 +98,7 @@ func TestGetInfo(t *testing.T) { r := httptest.NewRecorder() - if err := getInfo(srv, r, nil, nil); err != nil { + if err := getInfo(srv, API_VERSION, r, nil, nil); err != nil { t.Fatal(err) } @@ -129,7 +129,7 @@ func TestGetImagesJson(t *testing.T) { r := httptest.NewRecorder() - if err := getImagesJson(srv, r, req, nil); err != nil { + if err := getImagesJson(srv, API_VERSION, r, req, nil); err != nil { t.Fatal(err) } @@ -154,7 +154,7 @@ func TestGetImagesJson(t *testing.T) { t.Fatal(err) } - if err := getImagesJson(srv, r2, req2, nil); err != nil { + if err := getImagesJson(srv, API_VERSION, r2, req2, nil); err != nil { t.Fatal(err) } @@ -179,7 +179,7 @@ func TestGetImagesJson(t *testing.T) { t.Fatal(err) } - if err := getImagesJson(srv, r3, req3, nil); err != nil { + if err := getImagesJson(srv, API_VERSION, r3, req3, nil); err != nil { t.Fatal(err) } @@ -200,7 +200,7 @@ func TestGetImagesJson(t *testing.T) { t.Fatal(err) } - err = getImagesJson(srv, r4, req4, nil) + err = getImagesJson(srv, API_VERSION, r4, req4, nil) if err == nil { t.Fatalf("Error expected, received none") } @@ -221,7 +221,7 @@ func TestGetImagesViz(t *testing.T) { srv := &Server{runtime: runtime} r := httptest.NewRecorder() - if err := getImagesViz(srv, r, nil, nil); err != nil { + if err := getImagesViz(srv, API_VERSION, r, nil, nil); err != nil { t.Fatal(err) } @@ -258,7 +258,7 @@ func TestGetImagesSearch(t *testing.T) { t.Fatal(err) } - if err := getImagesSearch(srv, r, req, nil); err != nil { + if err := getImagesSearch(srv, API_VERSION, r, req, nil); err != nil { t.Fatal(err) } @@ -282,7 +282,7 @@ func TestGetImagesHistory(t *testing.T) { r := httptest.NewRecorder() - if err := getImagesHistory(srv, r, nil, map[string]string{"name": unitTestImageName}); err != nil { + if err := getImagesHistory(srv, API_VERSION, r, nil, map[string]string{"name": unitTestImageName}); err != nil { t.Fatal(err) } @@ -305,7 +305,7 @@ func TestGetImagesByName(t *testing.T) { srv := &Server{runtime: runtime} r := httptest.NewRecorder() - if err := getImagesByName(srv, r, nil, map[string]string{"name": unitTestImageName}); err != nil { + if err := getImagesByName(srv, API_VERSION, r, nil, map[string]string{"name": unitTestImageName}); err != nil { t.Fatal(err) } @@ -342,7 +342,7 @@ func TestGetContainersPs(t *testing.T) { } r := httptest.NewRecorder() - if err := getContainersPs(srv, r, req, nil); err != nil { + if err := getContainersPs(srv, API_VERSION, r, req, nil); err != nil { t.Fatal(err) } containers := []ApiContainers{} @@ -385,7 +385,7 @@ func TestGetContainersExport(t *testing.T) { } r := httptest.NewRecorder() - if err = getContainersExport(srv, r, nil, map[string]string{"name": container.Id}); err != nil { + if err = getContainersExport(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil { t.Fatal(err) } @@ -440,7 +440,7 @@ func TestGetContainersChanges(t *testing.T) { } r := httptest.NewRecorder() - if err := getContainersChanges(srv, r, nil, map[string]string{"name": container.Id}); err != nil { + if err := getContainersChanges(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil { t.Fatal(err) } changes := []Change{} @@ -484,7 +484,7 @@ func TestGetContainersByName(t *testing.T) { defer runtime.Destroy(container) r := httptest.NewRecorder() - if err := getContainersByName(srv, r, nil, map[string]string{"name": container.Id}); err != nil { + if err := getContainersByName(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil { t.Fatal(err) } outContainer := &Container{} @@ -515,7 +515,7 @@ func TestPostAuth(t *testing.T) { srv.registry.ResetClient(authConfigOrig) r := httptest.NewRecorder() - if err := getAuth(srv, r, nil, nil); err != nil { + if err := getAuth(srv, API_VERSION, r, nil, nil); err != nil { t.Fatal(err) } @@ -562,7 +562,7 @@ func TestPostCommit(t *testing.T) { } r := httptest.NewRecorder() - if err := postCommit(srv, r, req, nil); err != nil { + if err := postCommit(srv, API_VERSION, r, req, nil); err != nil { t.Fatal(err) } if r.Code != http.StatusCreated { @@ -840,7 +840,7 @@ func TestPostContainersCreate(t *testing.T) { } r := httptest.NewRecorder() - if err := postContainersCreate(srv, r, req, nil); err != nil { + if err := postContainersCreate(srv, API_VERSION, r, req, nil); err != nil { t.Fatal(err) } if r.Code != http.StatusCreated { @@ -903,7 +903,7 @@ func TestPostContainersKill(t *testing.T) { } r := httptest.NewRecorder() - if err := postContainersKill(srv, r, nil, map[string]string{"name": container.Id}); err != nil { + if err := postContainersKill(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil { t.Fatal(err) } if r.Code != http.StatusNoContent { @@ -951,7 +951,7 @@ func TestPostContainersRestart(t *testing.T) { t.Fatal(err) } r := httptest.NewRecorder() - if err := postContainersRestart(srv, r, req, map[string]string{"name": container.Id}); err != nil { + if err := postContainersRestart(srv, API_VERSION, r, req, map[string]string{"name": container.Id}); err != nil { t.Fatal(err) } if r.Code != http.StatusNoContent { @@ -992,7 +992,7 @@ func TestPostContainersStart(t *testing.T) { defer runtime.Destroy(container) r := httptest.NewRecorder() - if err := postContainersStart(srv, r, nil, map[string]string{"name": container.Id}); err != nil { + if err := postContainersStart(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil { t.Fatal(err) } if r.Code != http.StatusNoContent { @@ -1007,7 +1007,7 @@ func TestPostContainersStart(t *testing.T) { } r = httptest.NewRecorder() - if err = postContainersStart(srv, r, nil, map[string]string{"name": container.Id}); err == nil { + if err = postContainersStart(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err == nil { t.Fatalf("A running containter should be able to be started") } @@ -1054,7 +1054,7 @@ func TestPostContainersStop(t *testing.T) { t.Fatal(err) } r := httptest.NewRecorder() - if err := postContainersStop(srv, r, req, map[string]string{"name": container.Id}); err != nil { + if err := postContainersStop(srv, API_VERSION, r, req, map[string]string{"name": container.Id}); err != nil { t.Fatal(err) } if r.Code != http.StatusNoContent { @@ -1092,7 +1092,7 @@ func TestPostContainersWait(t *testing.T) { setTimeout(t, "Wait timed out", 3*time.Second, func() { r := httptest.NewRecorder() - if err := postContainersWait(srv, r, nil, map[string]string{"name": container.Id}); err != nil { + if err := postContainersWait(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil { t.Fatal(err) } apiWait := &ApiWait{} @@ -1154,7 +1154,7 @@ func TestPostContainersAttach(t *testing.T) { t.Fatal(err) } - if err := postContainersAttach(srv, r, req, map[string]string{"name": container.Id}); err != nil { + if err := postContainersAttach(srv, API_VERSION, r, req, map[string]string{"name": container.Id}); err != nil { t.Fatal(err) } }() @@ -1224,7 +1224,7 @@ func TestDeleteContainers(t *testing.T) { t.Fatal(err) } r := httptest.NewRecorder() - if err := deleteContainers(srv, r, req, map[string]string{"name": container.Id}); err != nil { + if err := deleteContainers(srv, API_VERSION, r, req, map[string]string{"name": container.Id}); err != nil { t.Fatal(err) } if r.Code != http.StatusNoContent { diff --git a/builder_client.go b/builder_client.go index ceeab002c9..c3950b2be3 100644 --- a/builder_client.go +++ b/builder_client.go @@ -32,12 +32,6 @@ type builderClient struct { } func (b *builderClient) clearTmp(containers, images map[string]struct{}) { - for c := range containers { - if _, _, err := b.cli.call("DELETE", "/containers/"+c, nil); err != nil { - utils.Debugf("%s", err) - } - utils.Debugf("Removing container %s", c) - } for i := range images { if _, _, err := b.cli.call("DELETE", "/images/"+i, nil); err != nil { utils.Debugf("%s", err) diff --git a/commands.go b/commands.go index fda90489e4..6212459b42 100644 --- a/commands.go +++ b/commands.go @@ -24,7 +24,7 @@ import ( "unicode" ) -const VERSION = "0.3.2" +const VERSION = "0.3.3" var ( GIT_COMMIT string @@ -1167,7 +1167,7 @@ func (cli *DockerCli) call(method, path string, data interface{}) ([]byte, int, params = bytes.NewBuffer(buf) } - req, err := http.NewRequest(method, fmt.Sprintf("http://%s:%d", cli.addr, cli.port)+path, params) + req, err := http.NewRequest(method, fmt.Sprintf("http://%s:%d/v%g%s", cli.addr, cli.port, API_VERSION, path), params) if err != nil { return nil, -1, err } @@ -1199,7 +1199,7 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer) e if (method == "POST" || method == "PUT") && in == nil { in = bytes.NewReader([]byte{}) } - req, err := http.NewRequest(method, fmt.Sprintf("http://%s:%d%s", cli.addr, cli.port, path), in) + req, err := http.NewRequest(method, fmt.Sprintf("http://%s:%d/v%f%s", cli.addr, cli.port, API_VERSION, path), in) if err != nil { return err } @@ -1230,7 +1230,7 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer) e } func (cli *DockerCli) hijack(method, path string, setRawTerminal bool) error { - req, err := http.NewRequest(method, path, nil) + req, err := http.NewRequest(method, fmt.Sprintf("/v%f%s", API_VERSION, path), nil) if err != nil { return err } diff --git a/docs/sources/api/docker_remote_api.rst b/docs/sources/api/docker_remote_api.rst index 2b1aad0e84..4c8ebe847f 100644 --- a/docs/sources/api/docker_remote_api.rst +++ b/docs/sources/api/docker_remote_api.rst @@ -1,3 +1,7 @@ +:title: Remote API +:description: API Documentation for Docker +:keywords: API, Docker, rcli, REST, documentation + ================= Docker Remote API ================= @@ -118,7 +122,8 @@ Create a container .. sourcecode:: http HTTP/1.1 201 OK - + Content-Type: application/json + { "Id":"e90e34656806" "Warnings":[] diff --git a/docs/sources/api/index.rst b/docs/sources/api/index.rst index 8c118bcbc0..4d8ff3fe67 100644 --- a/docs/sources/api/index.rst +++ b/docs/sources/api/index.rst @@ -1,6 +1,6 @@ -:title: docker documentation +:title: API Documentation :description: docker documentation -:keywords: +:keywords: docker, ipa, documentation API's ============= diff --git a/docs/sources/api/registry_api.rst b/docs/sources/api/registry_api.rst index e299584e17..f33ca187bb 100644 --- a/docs/sources/api/registry_api.rst +++ b/docs/sources/api/registry_api.rst @@ -1,4 +1,4 @@ -:title: docker Registry documentation +:title: Registry Documentation :description: Documentation for docker Registry and Registry API :keywords: docker, registry, api, index diff --git a/docs/sources/commandline/command/attach.rst b/docs/sources/commandline/command/attach.rst index ac9a84c0cf..4c4c189d8f 100644 --- a/docs/sources/commandline/command/attach.rst +++ b/docs/sources/commandline/command/attach.rst @@ -1,3 +1,7 @@ +:title: Attach Command +:description: Attach to a running container +:keywords: attach, container, docker, documentation + =========================================== ``attach`` -- Attach to a running container =========================================== diff --git a/docs/sources/commandline/command/build.rst b/docs/sources/commandline/command/build.rst index 8d07c725c2..a8d2093a5b 100644 --- a/docs/sources/commandline/command/build.rst +++ b/docs/sources/commandline/command/build.rst @@ -1,3 +1,7 @@ +:title: Build Command +:description: Build a new image from the Dockerfile passed via stdin +:keywords: build, docker, container, documentation + ======================================================== ``build`` -- Build a container from Dockerfile via stdin ======================================================== diff --git a/docs/sources/commandline/command/commit.rst b/docs/sources/commandline/command/commit.rst index 1d5c503414..92f3205662 100644 --- a/docs/sources/commandline/command/commit.rst +++ b/docs/sources/commandline/command/commit.rst @@ -1,3 +1,7 @@ +:title: Commit Command +:description: Create a new image from a container's changes +:keywords: commit, docker, container, documentation + =========================================================== ``commit`` -- Create a new image from a container's changes =========================================================== diff --git a/docs/sources/commandline/command/diff.rst b/docs/sources/commandline/command/diff.rst index 301da6c499..2901a7f215 100644 --- a/docs/sources/commandline/command/diff.rst +++ b/docs/sources/commandline/command/diff.rst @@ -1,3 +1,7 @@ +:title: Diff Command +:description: Inspect changes on a container's filesystem +:keywords: diff, docker, container, documentation + ======================================================= ``diff`` -- Inspect changes on a container's filesystem ======================================================= diff --git a/docs/sources/commandline/command/export.rst b/docs/sources/commandline/command/export.rst index 88ecd2fd53..9d7e6b369c 100644 --- a/docs/sources/commandline/command/export.rst +++ b/docs/sources/commandline/command/export.rst @@ -1,3 +1,7 @@ +:title: Export Command +:description: Export the contents of a filesystem as a tar archive +:keywords: export, docker, container, documentation + ================================================================= ``export`` -- Stream the contents of a container as a tar archive ================================================================= diff --git a/docs/sources/commandline/command/history.rst b/docs/sources/commandline/command/history.rst index 92fad3b487..2f9d3f2814 100644 --- a/docs/sources/commandline/command/history.rst +++ b/docs/sources/commandline/command/history.rst @@ -1,3 +1,7 @@ +:title: History Command +:description: Show the history of an image +:keywords: history, docker, container, documentation + =========================================== ``history`` -- Show the history of an image =========================================== diff --git a/docs/sources/commandline/command/images.rst b/docs/sources/commandline/command/images.rst index 5bcfe817f4..497bda6e16 100644 --- a/docs/sources/commandline/command/images.rst +++ b/docs/sources/commandline/command/images.rst @@ -1,3 +1,7 @@ +:title: Images Command +:description: List images +:keywords: images, docker, container, documentation + ========================= ``images`` -- List images ========================= diff --git a/docs/sources/commandline/command/import.rst b/docs/sources/commandline/command/import.rst index 5fe90764b9..34a7138e07 100644 --- a/docs/sources/commandline/command/import.rst +++ b/docs/sources/commandline/command/import.rst @@ -1,3 +1,7 @@ +:title: Import Command +:description: Create a new filesystem image from the contents of a tarball +:keywords: import, tarball, docker, url, documentation + ========================================================================== ``import`` -- Create a new filesystem image from the contents of a tarball ========================================================================== diff --git a/docs/sources/commandline/command/info.rst b/docs/sources/commandline/command/info.rst index 10697dba18..6df3486c53 100644 --- a/docs/sources/commandline/command/info.rst +++ b/docs/sources/commandline/command/info.rst @@ -1,3 +1,7 @@ +:title: Info Command +:description: Display system-wide information. +:keywords: info, docker, information, documentation + =========================================== ``info`` -- Display system-wide information =========================================== diff --git a/docs/sources/commandline/command/inspect.rst b/docs/sources/commandline/command/inspect.rst index 34365d1f26..90dbe959eb 100644 --- a/docs/sources/commandline/command/inspect.rst +++ b/docs/sources/commandline/command/inspect.rst @@ -1,3 +1,7 @@ +:title: Inspect Command +:description: Return low-level information on a container +:keywords: inspect, container, docker, documentation + ========================================================== ``inspect`` -- Return low-level information on a container ========================================================== diff --git a/docs/sources/commandline/command/kill.rst b/docs/sources/commandline/command/kill.rst index cbd019e1a9..f53d3883b0 100644 --- a/docs/sources/commandline/command/kill.rst +++ b/docs/sources/commandline/command/kill.rst @@ -1,3 +1,7 @@ +:title: Kill Command +:description: Kill a running container +:keywords: kill, container, docker, documentation + ==================================== ``kill`` -- Kill a running container ==================================== diff --git a/docs/sources/commandline/command/login.rst b/docs/sources/commandline/command/login.rst index b064b40145..bab4fa34e3 100644 --- a/docs/sources/commandline/command/login.rst +++ b/docs/sources/commandline/command/login.rst @@ -1,3 +1,7 @@ +:title: Login Command +:description: Register or Login to the docker registry server +:keywords: login, docker, documentation + ============================================================ ``login`` -- Register or Login to the docker registry server ============================================================ diff --git a/docs/sources/commandline/command/logs.rst b/docs/sources/commandline/command/logs.rst index 87f3f95b65..a3423f6e0c 100644 --- a/docs/sources/commandline/command/logs.rst +++ b/docs/sources/commandline/command/logs.rst @@ -1,3 +1,7 @@ +:title: Logs Command +:description: Fetch the logs of a container +:keywords: logs, container, docker, documentation + ========================================= ``logs`` -- Fetch the logs of a container ========================================= diff --git a/docs/sources/commandline/command/port.rst b/docs/sources/commandline/command/port.rst index 4fb6d7f812..8d59fedab6 100644 --- a/docs/sources/commandline/command/port.rst +++ b/docs/sources/commandline/command/port.rst @@ -1,3 +1,7 @@ +:title: Port Command +:description: Lookup the public-facing port which is NAT-ed to PRIVATE_PORT +:keywords: port, docker, container, documentation + ========================================================================= ``port`` -- Lookup the public-facing port which is NAT-ed to PRIVATE_PORT ========================================================================= diff --git a/docs/sources/commandline/command/ps.rst b/docs/sources/commandline/command/ps.rst index f73177918b..597dbd9ae7 100644 --- a/docs/sources/commandline/command/ps.rst +++ b/docs/sources/commandline/command/ps.rst @@ -1,3 +1,7 @@ +:title: Ps Command +:description: List containers +:keywords: ps, docker, documentation, container + ========================= ``ps`` -- List containers ========================= diff --git a/docs/sources/commandline/command/pull.rst b/docs/sources/commandline/command/pull.rst index 1c417ddcde..4348f28d0f 100644 --- a/docs/sources/commandline/command/pull.rst +++ b/docs/sources/commandline/command/pull.rst @@ -1,3 +1,7 @@ +:title: Pull Command +:description: Pull an image or a repository from the registry +:keywords: pull, image, repo, repository, documentation, docker + ========================================================================= ``pull`` -- Pull an image or a repository from the docker registry server ========================================================================= diff --git a/docs/sources/commandline/command/push.rst b/docs/sources/commandline/command/push.rst index a42296c715..9304f9acc5 100644 --- a/docs/sources/commandline/command/push.rst +++ b/docs/sources/commandline/command/push.rst @@ -1,3 +1,7 @@ +:title: Push Command +:description: Push an image or a repository to the registry +:keywords: push, docker, image, repository, documentation, repo + ======================================================================= ``push`` -- Push an image or a repository to the docker registry server ======================================================================= diff --git a/docs/sources/commandline/command/restart.rst b/docs/sources/commandline/command/restart.rst index 24bba5a5a9..dfc0dfea6e 100644 --- a/docs/sources/commandline/command/restart.rst +++ b/docs/sources/commandline/command/restart.rst @@ -1,3 +1,7 @@ +:title: Restart Command +:description: Restart a running container +:keywords: restart, container, docker, documentation + ========================================== ``restart`` -- Restart a running container ========================================== diff --git a/docs/sources/commandline/command/rm.rst b/docs/sources/commandline/command/rm.rst index f6d6893bfb..dc6d91632d 100644 --- a/docs/sources/commandline/command/rm.rst +++ b/docs/sources/commandline/command/rm.rst @@ -1,3 +1,7 @@ +:title: Rm Command +:description: Remove a container +:keywords: remove, container, docker, documentation, rm + ============================ ``rm`` -- Remove a container ============================ diff --git a/docs/sources/commandline/command/rmi.rst b/docs/sources/commandline/command/rmi.rst index 3761196f23..a0131886d6 100644 --- a/docs/sources/commandline/command/rmi.rst +++ b/docs/sources/commandline/command/rmi.rst @@ -1,3 +1,7 @@ +:title: Rmi Command +:description: Remove an image +:keywords: rmi, remove, image, docker, documentation + ========================== ``rmi`` -- Remove an image ========================== diff --git a/docs/sources/commandline/command/run.rst b/docs/sources/commandline/command/run.rst index 95fb208dd3..d6c9aef315 100644 --- a/docs/sources/commandline/command/run.rst +++ b/docs/sources/commandline/command/run.rst @@ -1,3 +1,7 @@ +:title: Run Command +:description: Run a command in a new container +:keywords: run, container, docker, documentation + =========================================== ``run`` -- Run a command in a new container =========================================== @@ -19,5 +23,5 @@ -t=false: Allocate a pseudo-tty -u="": Username or UID -d=[]: Set custom dns servers for the container - -v=[]: Creates a new volumes and mount it at the specified path. + -v=[]: Creates a new volume and mounts it at the specified path. -volumes-from="": Mount all volumes from the given container. diff --git a/docs/sources/commandline/command/search.rst b/docs/sources/commandline/command/search.rst index 0af24dfaf5..2f07e20c3a 100644 --- a/docs/sources/commandline/command/search.rst +++ b/docs/sources/commandline/command/search.rst @@ -1,3 +1,7 @@ +:title: Search Command +:description: Searches for the TERM parameter on the Docker index and prints out a list of repositories that match. +:keywords: search, docker, image, documentation + =================================================================== ``search`` -- Search for an image in the docker index =================================================================== diff --git a/docs/sources/commandline/command/start.rst b/docs/sources/commandline/command/start.rst index df415ca3d3..b70ad21cfd 100644 --- a/docs/sources/commandline/command/start.rst +++ b/docs/sources/commandline/command/start.rst @@ -1,3 +1,7 @@ +:title: Start Command +:description: Start a stopped container +:keywords: start, docker, container, documentation + ====================================== ``start`` -- Start a stopped container ====================================== diff --git a/docs/sources/commandline/command/stop.rst b/docs/sources/commandline/command/stop.rst index df6d66ccf9..3d571563ec 100644 --- a/docs/sources/commandline/command/stop.rst +++ b/docs/sources/commandline/command/stop.rst @@ -1,3 +1,7 @@ +:title: Stop Command +:description: Stop a running container +:keywords: stop, container, docker, documentation + ==================================== ``stop`` -- Stop a running container ==================================== diff --git a/docs/sources/commandline/command/tag.rst b/docs/sources/commandline/command/tag.rst index 59647355e9..a9e831aae9 100644 --- a/docs/sources/commandline/command/tag.rst +++ b/docs/sources/commandline/command/tag.rst @@ -1,3 +1,7 @@ +:title: Tag Command +:description: Tag an image into a repository +:keywords: tag, docker, image, repository, documentation, repo + ========================================= ``tag`` -- Tag an image into a repository ========================================= diff --git a/docs/sources/commandline/command/version.rst b/docs/sources/commandline/command/version.rst index eedf02f2d0..fb3d3b450e 100644 --- a/docs/sources/commandline/command/version.rst +++ b/docs/sources/commandline/command/version.rst @@ -1,3 +1,7 @@ +:title: Version Command +:description: +:keywords: version, docker, documentation + ================================================== ``version`` -- Show the docker version information ================================================== diff --git a/docs/sources/commandline/command/wait.rst b/docs/sources/commandline/command/wait.rst index 2959bf880b..23bd54513c 100644 --- a/docs/sources/commandline/command/wait.rst +++ b/docs/sources/commandline/command/wait.rst @@ -1,3 +1,7 @@ +:title: Wait Command +:description: Block until a container stops, then print its exit code. +:keywords: wait, docker, container, documentation + =================================================================== ``wait`` -- Block until a container stops, then print its exit code =================================================================== diff --git a/docs/sources/commandline/index.rst b/docs/sources/commandline/index.rst index fecf8e4885..f1a3e2da45 100644 --- a/docs/sources/commandline/index.rst +++ b/docs/sources/commandline/index.rst @@ -1,6 +1,6 @@ -:title: docker documentation +:title: Commands :description: -- todo: change me -:keywords: todo: change me +:keywords: todo, commands, command line, help, docker, documentation Commands diff --git a/docs/sources/concepts/buildingblocks.rst b/docs/sources/concepts/buildingblocks.rst index 154ef00f45..5f752ea47b 100644 --- a/docs/sources/concepts/buildingblocks.rst +++ b/docs/sources/concepts/buildingblocks.rst @@ -1,4 +1,4 @@ -:title: Building blocks +:title: Building Blocks :description: An introduction to docker and standard containers? :keywords: containers, lxc, concepts, explanation diff --git a/docs/sources/concepts/containers.rst b/docs/sources/concepts/containers.rst index 8378a7e29f..e08c3654c0 100644 --- a/docs/sources/concepts/containers.rst +++ b/docs/sources/concepts/containers.rst @@ -1,6 +1,6 @@ :title: Introduction :description: An introduction to docker and standard containers? -:keywords: containers, lxc, concepts, explanation +:keywords: containers, lxc, concepts, explanation, docker, documentation :note: This version of the introduction is temporary, just to make sure we don't break the links from the website when the documentation is updated diff --git a/docs/sources/concepts/index.rst b/docs/sources/concepts/index.rst index d8e1af5770..ba1f9f4718 100644 --- a/docs/sources/concepts/index.rst +++ b/docs/sources/concepts/index.rst @@ -1,6 +1,6 @@ -:title: docker documentation +:title: Concepts :description: -- todo: change me -:keywords: todo: change me +:keywords: concepts, documentation, docker, containers diff --git a/docs/sources/contributing/contributing.rst b/docs/sources/contributing/contributing.rst index 7b2b4da2d3..c2bd7c80fb 100644 --- a/docs/sources/contributing/contributing.rst +++ b/docs/sources/contributing/contributing.rst @@ -1,3 +1,7 @@ +:title: Contribution Guidelines +:description: Contribution guidelines: create issues, convetions, pull requests +:keywords: contributing, docker, documentation, help, guideline + Contributing to Docker ====================== diff --git a/docs/sources/examples/python_web_app.rst b/docs/sources/examples/python_web_app.rst index 992a09dc42..3dd25015f1 100644 --- a/docs/sources/examples/python_web_app.rst +++ b/docs/sources/examples/python_web_app.rst @@ -40,7 +40,7 @@ We attach to the new container to see what is going on. Ctrl-C to disconnect .. code-block:: bash - BUILD_IMG=$(docker commit $BUILD_JOB _/builds/github.com/hykes/helloflask/master) + BUILD_IMG=$(docker commit $BUILD_JOB _/builds/github.com/shykes/helloflask/master) Save the changed we just made in the container to a new image called "_/builds/github.com/hykes/helloflask/master" and save the image id in the BUILD_IMG variable name. @@ -58,7 +58,7 @@ Use the new image we just created and create a new container with network port 5 .. code-block:: bash docker logs $WEB_WORKER - * Running on \http://0.0.0.0:5000/ + * Running on http://0.0.0.0:5000/ view the logs for the new container using the WEB_WORKER variable, and if everything worked as planned you should see the line "Running on http://0.0.0.0:5000/" in the log output. @@ -70,7 +70,7 @@ lookup the public-facing port which is NAT-ed store the private port used by the .. code-block:: bash - curl \http://`hostname`:$WEB_PORT + curl http://`hostname`:$WEB_PORT Hello world! access the web app using curl. If everything worked as planned you should see the line "Hello world!" inside of your console. diff --git a/docs/sources/faq.rst b/docs/sources/faq.rst index b96ed06437..901e51ddbb 100644 --- a/docs/sources/faq.rst +++ b/docs/sources/faq.rst @@ -1,3 +1,7 @@ +:title: FAQ +:description: Most frequently asked questions. +:keywords: faq, questions, documentation, docker + FAQ === diff --git a/docs/sources/index/variable.rst b/docs/sources/index/variable.rst index efbcfae80c..90eac3af8a 100644 --- a/docs/sources/index/variable.rst +++ b/docs/sources/index/variable.rst @@ -1,3 +1,7 @@ +:title: Index Environment Variable +:description: Setting this environment variable on the docker server will change the URL docker index. +:keywords: docker, index environment variable, documentation + ================================= Docker Index Environment Variable ================================= diff --git a/docs/sources/installation/amazon.rst b/docs/sources/installation/amazon.rst index 64ff20f8be..59896bb63c 100644 --- a/docs/sources/installation/amazon.rst +++ b/docs/sources/installation/amazon.rst @@ -1,3 +1,7 @@ +:title: Installation on Amazon EC2 +:description: Docker installation on Amazon EC2 with a single vagrant command. Vagrant 1.1 or higher is required. +:keywords: amazon ec2, virtualization, cloud, docker, documentation, installation + Amazon EC2 ========== diff --git a/docs/sources/installation/archlinux.rst b/docs/sources/installation/archlinux.rst index db013c6cb9..9e3766eb26 100644 --- a/docs/sources/installation/archlinux.rst +++ b/docs/sources/installation/archlinux.rst @@ -1,3 +1,7 @@ +:title: Installation on Arch Linux +:description: Docker installation on Arch Linux. +:keywords: arch linux, virtualization, docker, documentation, installation + .. _arch_linux: Arch Linux diff --git a/docs/sources/installation/binaries.rst b/docs/sources/installation/binaries.rst index 25d13ab68e..8bab5695cd 100644 --- a/docs/sources/installation/binaries.rst +++ b/docs/sources/installation/binaries.rst @@ -1,3 +1,7 @@ +:title: Installation from Binaries +:description: This instruction set is meant for hackers who want to try out Docker on a variety of environments. +:keywords: binaries, installation, docker, documentation, linux + .. _binaries: Binaries diff --git a/docs/sources/installation/index.rst b/docs/sources/installation/index.rst index 1976f30ba0..9f831091cf 100644 --- a/docs/sources/installation/index.rst +++ b/docs/sources/installation/index.rst @@ -1,6 +1,6 @@ -:title: docker documentation +:title: Documentation :description: -- todo: change me -:keywords: todo: change me +:keywords: todo, docker, documentation, installation, OS support diff --git a/docs/sources/installation/kernel.rst b/docs/sources/installation/kernel.rst index 2ec5940a7f..6f242e9e10 100644 --- a/docs/sources/installation/kernel.rst +++ b/docs/sources/installation/kernel.rst @@ -1,63 +1,35 @@ +:title: Kernel Requirements +:description: Kernel supports +:keywords: kernel requirements, kernel support, docker, installation, cgroups, namespaces + .. _kernel: Kernel Requirements =================== +In short, Docker has the following kernel requirements: + +- Linux version 3.8 or above. + +- `AUFS support `_. + +- Cgroups and namespaces must be enabled. + + The officially supported kernel is the one recommended by the :ref:`ubuntu_linux` installation path. It is the one that most developers will use, and the one that receives the most attention from the core contributors. If you decide to go with a different kernel and hit a bug, please try to reproduce it with the official kernels first. -If for some reason you cannot or do not want to use the "official" kernels, +If you cannot or do not want to use the "official" kernels, here is some technical background about the features (both optional and mandatory) that docker needs to run successfully. -In short, you need kernel version 3.8 (or above), compiled to include -`AUFS support `_. Of course, you need to -enable cgroups and namespaces. +Linux version 3.8 or above +-------------------------- - -Namespaces and Cgroups ----------------------- - -You need to enable namespaces and cgroups, to the extend of what is needed -to run LXC containers. Technically, while namespaces have been introduced -in the early 2.6 kernels, we do not advise to try any kernel before 2.6.32 -to run LXC containers. Note that 2.6.32 has some documented issues regarding -network namespace setup and teardown; those issues are not a risk if you -run containers in a private environment, but can lead to denial-of-service -attacks if you want to run untrusted code in your containers. For more details, -see `[LP#720095 `_. - -Kernels 2.6.38, and every version since 3.2, have been deployed successfully -to run containerized production workloads. Feature-wise, there is no huge -improvement between 2.6.38 and up to 3.6 (as far as docker is concerned!). - -Starting with version 3.7, the kernel has basic support for -`Checkpoint/Restore In Userspace `_, which is not used by -docker at this point, but allows to suspend the state of a container to -disk and resume it later. - -Version 3.8 provides improvements in stability, which are deemed necessary -for the operation of docker. Versions 3.2 to 3.5 have been shown to -exhibit a reproducible bug (for more details, see issue -`#407 `_). - -Version 3.8 also brings better support for the -`setns() syscall `_ -- but this should not -be a concern since docker does not leverage on this feature for now. - -If you want a technical overview about those concepts, you might -want to check those articles on dotCloud's blog: -`about namespaces `_ -and `about cgroups `_. - - -Important Note About Pre-3.8 Kernels ------------------------------------- - -As mentioned above, kernels before 3.8 are not stable when used with docker. +Kernel versions 3.2 to 3.5 are not stable when used with docker. In some circumstances, you will experience kernel "oopses", or even crashes. The symptoms include: @@ -77,6 +49,36 @@ detects something older than 3.8. See issue `#407 `_ for details. +AUFS support +------------ + +Docker currently relies on AUFS, an unioning filesystem. +While AUFS is included in the kernels built by the Debian and Ubuntu +distributions, is not part of the standard kernel. This means that if +you decide to roll your own kernel, you will have to patch your +kernel tree to add AUFS. The process is documented on +`AUFS webpage `_. + + +Cgroups and namespaces +---------------------- + +You need to enable namespaces and cgroups, to the extend of what is needed +to run LXC containers. Technically, while namespaces have been introduced +in the early 2.6 kernels, we do not advise to try any kernel before 2.6.32 +to run LXC containers. Note that 2.6.32 has some documented issues regarding +network namespace setup and teardown; those issues are not a risk if you +run containers in a private environment, but can lead to denial-of-service +attacks if you want to run untrusted code in your containers. For more details, +see `[LP#720095 `_. + +Kernels 2.6.38, and every version since 3.2, have been deployed successfully +to run containerized production workloads. Feature-wise, there is no huge +improvement between 2.6.38 and up to 3.6 (as far as docker is concerned!). + + + + Extra Cgroup Controllers ------------------------ @@ -111,39 +113,3 @@ And replace it by the following one:: GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount" Then run ``update-grub``, and reboot. - - -AUFS ----- - -Docker currently relies on AUFS, an unioning filesystem. -While AUFS is included in the kernels built by the Debian and Ubuntu -distributions, is not part of the standard kernel. This means that if -you decide to roll your own kernel, you will have to patch your -kernel tree to add AUFS. The process is documented on -`AUFS webpage `_. - -Note: the AUFS patch is fairly intrusive, but for the record, people have -successfully applied GRSEC and AUFS together, to obtain hardened production -kernels. - -If you want more information about that topic, there is an -`article about AUFS on dotCloud's blog -`_. - - -BTRFS, ZFS, OverlayFS... ------------------------- - -There is ongoing development on docker, to implement support for -`BTRFS `_ -(see github issue `#443 `_). - -People have also showed interest for `ZFS `_ -(using e.g. `ZFS-on-Linux `_) and OverlayFS. -The latter is functionally close to AUFS, and it might end up being included -in the stock kernel; so it's a strong candidate! - -Would you like to `contribute -`_ -support for your favorite filesystem? diff --git a/docs/sources/installation/rackspace.rst b/docs/sources/installation/rackspace.rst index dfb88aee84..7482404683 100644 --- a/docs/sources/installation/rackspace.rst +++ b/docs/sources/installation/rackspace.rst @@ -1,3 +1,7 @@ +:title: Rackspace Cloud Installation +:description: Installing Docker on Ubuntu proviced by Rackspace +:keywords: Rackspace Cloud, installation, docker, linux, ubuntu + =============== Rackspace Cloud =============== diff --git a/docs/sources/installation/ubuntulinux.rst b/docs/sources/installation/ubuntulinux.rst index de4a2bb9ca..6d2d3e671d 100644 --- a/docs/sources/installation/ubuntulinux.rst +++ b/docs/sources/installation/ubuntulinux.rst @@ -1,3 +1,7 @@ +:title: Requirements and Installation on Ubuntu Linux +:description: Please note this project is currently under heavy development. It should not be used in production. +:keywords: Docker, Docker documentation, requirements, virtualbox, vagrant, git, ssh, putty, cygwin, linux + .. _ubuntu_linux: Ubuntu Linux diff --git a/docs/sources/installation/upgrading.rst b/docs/sources/installation/upgrading.rst index 8dfde73891..9fa47904be 100644 --- a/docs/sources/installation/upgrading.rst +++ b/docs/sources/installation/upgrading.rst @@ -1,3 +1,7 @@ +:title: Upgrading +:description: These instructions are for upgrading Docker +:keywords: Docker, Docker documentation, upgrading docker, upgrade + .. _upgrading: Upgrading diff --git a/docs/sources/installation/vagrant.rst b/docs/sources/installation/vagrant.rst index d1a76b5a2b..24a1e91354 100644 --- a/docs/sources/installation/vagrant.rst +++ b/docs/sources/installation/vagrant.rst @@ -1,3 +1,6 @@ +:title: Using Vagrant (Mac, Linux) +:description: This guide will setup a new virtualbox virtual machine with docker installed on your computer. +:keywords: Docker, Docker documentation, virtualbox, vagrant, git, ssh, putty, cygwin .. _install_using_vagrant: diff --git a/docs/sources/toctree.rst b/docs/sources/toctree.rst index 09f2a7af5b..ae6d5f010c 100644 --- a/docs/sources/toctree.rst +++ b/docs/sources/toctree.rst @@ -1,6 +1,6 @@ -:title: docker documentation -:description: docker documentation -:keywords: +:title: Documentation +:description: -- todo: change me +:keywords: todo, docker, documentation, installation, usage, examples, contributing, faq, command line, concepts Documentation ============= diff --git a/docs/sources/use/basics.rst b/docs/sources/use/basics.rst index c71147e3f2..4c450fbc97 100644 --- a/docs/sources/use/basics.rst +++ b/docs/sources/use/basics.rst @@ -1,6 +1,6 @@ -:title: Base commands +:title: Basic Commands :description: Common usage and commands -:keywords: Examples, Usage +:keywords: Examples, Usage, basic commands, docker, documentation, examples The basics diff --git a/docs/sources/use/builder.rst b/docs/sources/use/builder.rst index 84d275782e..4e53ed4a79 100644 --- a/docs/sources/use/builder.rst +++ b/docs/sources/use/builder.rst @@ -1,3 +1,7 @@ +:title: Docker Builder +:description: Docker Builder specifes a simple DSL which allows you to automate the steps you would normally manually take to create an image. +:keywords: builder, docker, Docker Builder, automation, image creation + ============== Docker Builder ============== diff --git a/docs/sources/use/index.rst b/docs/sources/use/index.rst index 9939dc7ea8..a1086c1fd2 100644 --- a/docs/sources/use/index.rst +++ b/docs/sources/use/index.rst @@ -1,6 +1,6 @@ -:title: docker documentation +:title: Documentation :description: -- todo: change me -:keywords: todo: change me +:keywords: todo, docker, documentation, basic, builder diff --git a/docs/sources/use/puppet.rst b/docs/sources/use/puppet.rst index af2d5c8d57..1c48aec8e5 100644 --- a/docs/sources/use/puppet.rst +++ b/docs/sources/use/puppet.rst @@ -1,3 +1,6 @@ +:title: Puppet Usage +:description: Installating and using Puppet +:keywords: puppet, installation, usage, docker, documentation .. _install_using_puppet: diff --git a/docs/sources/use/workingwithrepository.rst b/docs/sources/use/workingwithrepository.rst index c1ce7f455e..9a2f96cf0d 100644 --- a/docs/sources/use/workingwithrepository.rst +++ b/docs/sources/use/workingwithrepository.rst @@ -1,3 +1,7 @@ +:title: Working With Repositories +:description: Generally, there are two types of repositories: Top-level repositories which are controlled by the people behind Docker, and user repositories. +:keywords: repo, repositiores, usage, pull image, push image, image, documentation + .. _working_with_the_repository: Working with the repository diff --git a/docs/theme/docker/layout.html b/docs/theme/docker/layout.html index aa5a24d496..d212c9ca86 100755 --- a/docs/theme/docker/layout.html +++ b/docs/theme/docker/layout.html @@ -8,7 +8,7 @@ - Docker - {{ meta['title'] if meta and meta['title'] else title }} + {{ meta['title'] if meta and meta['title'] else title }} - Docker Documentation diff --git a/docs/website/index.html b/docs/website/index.html index 2dad365ce4..d441ed8d78 100644 --- a/docs/website/index.html +++ b/docs/website/index.html @@ -198,6 +198,35 @@
+ +
+
+
+ + Mitchell Hashimoto‏@mitchellh: Docker launched today. It is incredible. They’re also working RIGHT NOW on a Vagrant provider. LXC is COMING!! +
+
+
+
+ + Adam Jacob‏@adamhjk: Docker is clearly the right idea. @solomonstre absolutely killed it. Containerized app deployment is the future, I think. +
+
+
+
+
+
+ + Matt Townsend‏@mtownsend: I have a serious code crush on docker.io - it's Lego for PaaS. Motherfucking awesome Lego. +
+
+
+
+ + Rob Harrop‏@robertharrop: Impressed by @getdocker - it's all kinds of magic. Serious rethink of AWS architecture happening @skillsmatter. +
+
+
diff --git a/packaging/ubuntu/changelog b/packaging/ubuntu/changelog index 2e4907f200..c8a8c1689b 100644 --- a/packaging/ubuntu/changelog +++ b/packaging/ubuntu/changelog @@ -1,37 +1,44 @@ +lxc-docker (0.3.3-1) precise; urgency=low + - Registry: Fix push regression + - Various bugfixes + + -- dotCloud Thu, 23 May 2013 00:00:00 -0700 + + lxc-docker (0.3.2-1) precise; urgency=low - - Runtime: Store the actual archive on commit - - Registry: Improve the checksum process - - Registry: Use the size to have a good progress bar while pushing - - Registry: Use the actual archive if it exists in order to speed up the push - - Registry: Fix error 400 on push + - Runtime: Store the actual archive on commit + - Registry: Improve the checksum process + - Registry: Use the size to have a good progress bar while pushing + - Registry: Use the actual archive if it exists in order to speed up the push + - Registry: Fix error 400 on push -- dotCloud Fri, 9 May 2013 00:00:00 -0700 lxc-docker (0.3.1-1) precise; urgency=low - - Builder: Implement the autorun capability within docker builder - - Builder: Add caching to docker builder - - Builder: Add support for docker builder with native API as top level command - - Runtime: Add go version to debug infos - - Builder: Implement ENV within docker builder - - Registry: Add docker search top level command in order to search a repository - - Images: output graph of images to dot (graphviz) - - Documentation: new introduction and high-level overview - - Documentation: Add the documentation for docker builder - - Website: new high-level overview - - Makefile: Swap "go get" for "go get -d", especially to compile on go1.1rc - - Images: fix ByParent function - - Builder: Check the command existance prior create and add Unit tests for the case - - Registry: Fix pull for official images with specific tag - - Registry: Fix issue when login in with a different user and trying to push - - Documentation: CSS fix for docker documentation to make REST API docs look better. - - Documentation: Fixed CouchDB example page header mistake - - Documentation: fixed README formatting - - Registry: Improve checksum - async calculation - - Runtime: kernel version - don't show the dash if flavor is empty - - Documentation: updated www.docker.io website. - - Builder: use any whitespaces instead of tabs - - Packaging: packaging ubuntu; issue #510: Use goland-stable PPA package to build docker + - Builder: Implement the autorun capability within docker builder + - Builder: Add caching to docker builder + - Builder: Add support for docker builder with native API as top level command + - Runtime: Add go version to debug infos + - Builder: Implement ENV within docker builder + - Registry: Add docker search top level command in order to search a repository + - Images: output graph of images to dot (graphviz) + - Documentation: new introduction and high-level overview + - Documentation: Add the documentation for docker builder + - Website: new high-level overview + - Makefile: Swap "go get" for "go get -d", especially to compile on go1.1rc + - Images: fix ByParent function + - Builder: Check the command existance prior create and add Unit tests for the case + - Registry: Fix pull for official images with specific tag + - Registry: Fix issue when login in with a different user and trying to push + - Documentation: CSS fix for docker documentation to make REST API docs look better. + - Documentation: Fixed CouchDB example page header mistake + - Documentation: fixed README formatting + - Registry: Improve checksum - async calculation + - Runtime: kernel version - don't show the dash if flavor is empty + - Documentation: updated www.docker.io website. + - Builder: use any whitespaces instead of tabs + - Packaging: packaging ubuntu; issue #510: Use goland-stable PPA package to build docker -- dotCloud Fri, 8 May 2013 00:00:00 -0700 diff --git a/utils.go b/utils.go index 27478002d3..5a9d02c490 100644 --- a/utils.go +++ b/utils.go @@ -49,10 +49,10 @@ func CompareConfig(a, b *Config) bool { } func MergeConfig(userConf, imageConf *Config) { - if userConf.Hostname != "" { + if userConf.Hostname == "" { userConf.Hostname = imageConf.Hostname } - if userConf.User != "" { + if userConf.User == "" { userConf.User = imageConf.User } if userConf.Memory == 0 {