From 1542c70b53c26c476069ef18241b44d08d92670b Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 1 Jul 2019 09:57:48 +0200 Subject: [PATCH 01/27] Reworked Dockerfile for a more production oriented usage - Added .dockerignore to speed up build context and avoid rebuilding when unecessary - Specified Alpine and Go versions as build arguments - Specified Go target CPU architecture as build arguments to be able to build for ARM devices - Specified base images as build arguments to be able to build for ARM devices - Trimmed down size of final image using `-a -installsuffix cgo -ldflags="-s -w"` go build flags and by copying the statically built binary only to the final image - Added clear build and run instructions for the Docker container --- .dockerignore | 11 +++++++++++ Dockerfile | 23 ++++++++++++----------- README.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 11 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..1865f296 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +.circleci +.github +docs +test +.gitignore +.goreleaser.yml +*.md +coverage.txt +Dockerfile +LICENSE +test.sh diff --git a/Dockerfile b/Dockerfile index c1badb7f..924ce603 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,16 @@ -# run with: -# docker build -t lazydocker . -# docker run -it lazydocker:latest /bin/sh -l +ARG BASE_IMAGE_BUILDER=golang +ARG BASE_IMAGE=alpine +ARG ALPINE_VERSION=3.10 +ARG GO_VERSION=1.12.6 -FROM golang:alpine +FROM ${BASE_IMAGE_BUILDER}:${GO_VERSION}-alpine${ALPINE_VERSION} AS builder +ARG GOARCH=amd64 +ARG GOARM WORKDIR /go/src/github.com/jesseduffield/lazydocker/ COPY ./ . -RUN CGO_ENABLED=0 GOOS=linux go build +RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} GOARM=${GOARM} go build -a -installsuffix cgo -ldflags="-s -w" -FROM alpine:latest -RUN apk add -U git xdg-utils -WORKDIR /go/src/github.com/jesseduffield/lazydocker/ -COPY --from=0 /go/src/github.com/jesseduffield/lazydocker /go/src/github.com/jesseduffield/lazydocker -COPY --from=0 /go/src/github.com/jesseduffield/lazydocker/lazydocker /bin/ -RUN echo "alias gg=lazydocker" >> ~/.profile +FROM ${BASE_IMAGE}:${ALPINE_VERSION} +RUN apk --update add -q --progress --no-cache -U git xdg-utils +ENTRYPOINT [ "lazydocker" ] +COPY --from=builder /go/src/github.com/jesseduffield/lazydocker/lazydocker /usr/bin/lazydocker diff --git a/README.md b/README.md index 57b35619..0af4172a 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,55 @@ required go version: 1.12 go get github.com/jesseduffield/lazydocker ``` +### Docker + +1.
Build it...

+ + - If you have a x86_64 CPU architecture + + ```sh + docker build -t lazydocker . https://github.com/jesseduffield/lazydocker.git + ``` + + - If you have a ARM 32 bit v6 architecture + + ```sh + docker build -t lazydocker \ + --build-arg BASE_IMAGE_BUILDER=arm32v6/golang \ + --build-arg BASE_IMAGE=arm32v6/alpine \ + --build-arg GOARCH=arm \ + --build-arg GOARM=6 \ + https://github.com/jesseduffield/lazydocker.git + ``` + + - If you have a ARM 32 bit v7 architecture + + ```sh + docker build -t lazydocker \ + --build-arg BASE_IMAGE_BUILDER=arm32v7/golang \ + --build-arg BASE_IMAGE=arm32v7/alpine \ + --build-arg GOARCH=arm \ + --build-arg GOARM=7 \ + https://github.com/jesseduffield/lazydocker.git + ``` + + - If you have a ARM 64 bit v8 architecture + + ```sh + docker build -t lazydocker \ + --build-arg BASE_IMAGE_BUILDER=arm64v8/golang \ + --build-arg BASE_IMAGE=arm64v8/alpine \ + --build-arg GOARCH=arm64 \ + https://github.com/jesseduffield/lazydocker.git + ``` + +

+1. Run it + + ```sh + docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazydocker + ``` + ## Usage Call `lazydocker` in your terminal. I personally use this a lot so I've made an alias for it like so: From ceb8cfcd76fb044bacd69369f4eeb4aaf07b555f Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 1 Jul 2019 11:51:08 +0200 Subject: [PATCH 02/27] Added Docker labels and Go commit, version and buildSource --- Dockerfile | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 924ce603..ed76b715 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,11 +6,24 @@ ARG GO_VERSION=1.12.6 FROM ${BASE_IMAGE_BUILDER}:${GO_VERSION}-alpine${ALPINE_VERSION} AS builder ARG GOARCH=amd64 ARG GOARM +ARG VERSION=0.2.4 +RUN apk --update add -q --progress git WORKDIR /go/src/github.com/jesseduffield/lazydocker/ COPY ./ . -RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} GOARM=${GOARM} go build -a -installsuffix cgo -ldflags="-s -w" +RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} GOARM=${GOARM} go build -a -installsuffix cgo -ldflags="-s -w \ + -X main.commit=$(git rev-parse HEAD) \ + -X main.version=${VERSION} \ + -X main.buildSource=Docker" FROM ${BASE_IMAGE}:${ALPINE_VERSION} +ARG VERSION=0.2.4 +LABEL org.label-schema.schema-version="1.0.0-rc1" \ + maintainer="jessedduffield@gmail.com" \ + org.label-schema.vcs-ref=$VCS_REF \ + org.label-schema.url="https://github.com/jesseduffield/lazydocker" \ + org.label-schema.vcs-description="The lazier way to manage everything docker" \ + org.label-schema.docker.cmd="docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazydocker" \ + org.label-schema.version=${VERSION} RUN apk --update add -q --progress --no-cache -U git xdg-utils ENTRYPOINT [ "lazydocker" ] COPY --from=builder /go/src/github.com/jesseduffield/lazydocker/lazydocker /usr/bin/lazydocker From 330131b6ca4f1f12e89df823a21f7e72061081b9 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 1 Jul 2019 11:57:50 +0200 Subject: [PATCH 03/27] Fixed Docker regarding no size window with gocui - Runs the container with `/bin/sh` initially - Invoke `lazydocker` from within the container, or gocui fails as the terminal window is invalid at launch --- Dockerfile | 3 +-- README.md | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index ed76b715..351e334a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,6 +24,5 @@ LABEL org.label-schema.schema-version="1.0.0-rc1" \ org.label-schema.vcs-description="The lazier way to manage everything docker" \ org.label-schema.docker.cmd="docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazydocker" \ org.label-schema.version=${VERSION} -RUN apk --update add -q --progress --no-cache -U git xdg-utils -ENTRYPOINT [ "lazydocker" ] +ENTRYPOINT [ "/bin/sh" ] COPY --from=builder /go/src/github.com/jesseduffield/lazydocker/lazydocker /usr/bin/lazydocker diff --git a/README.md b/README.md index 0af4172a..c651f8f6 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,8 @@ go get github.com/jesseduffield/lazydocker docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazydocker ``` +1. Then enter `lazydocker` + ## Usage Call `lazydocker` in your terminal. I personally use this a lot so I've made an alias for it like so: From fd70aaaf0579b263629921c97a048f4df10dcb06 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 1 Jul 2019 15:37:55 +0200 Subject: [PATCH 04/27] Git commit reference mechanism changed - Git commit is passed as a build argument as explained in README.md - `.git` directory is ignored by Docker for a quicker build and smaller context - the build arg VCS_REF is used both to tag the image and the Go program --- .dockerignore | 1 + Dockerfile | 5 +++-- README.md | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.dockerignore b/.dockerignore index 1865f296..af55e3c1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -9,3 +9,4 @@ coverage.txt Dockerfile LICENSE test.sh +.git diff --git a/Dockerfile b/Dockerfile index 351e334a..8e57d6b5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,16 +7,17 @@ FROM ${BASE_IMAGE_BUILDER}:${GO_VERSION}-alpine${ALPINE_VERSION} AS builder ARG GOARCH=amd64 ARG GOARM ARG VERSION=0.2.4 -RUN apk --update add -q --progress git +ARG VCS_REF= WORKDIR /go/src/github.com/jesseduffield/lazydocker/ COPY ./ . RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} GOARM=${GOARM} go build -a -installsuffix cgo -ldflags="-s -w \ - -X main.commit=$(git rev-parse HEAD) \ + -X main.commit=${VCS_REF} \ -X main.version=${VERSION} \ -X main.buildSource=Docker" FROM ${BASE_IMAGE}:${ALPINE_VERSION} ARG VERSION=0.2.4 +ARG VCS_REF= LABEL org.label-schema.schema-version="1.0.0-rc1" \ maintainer="jessedduffield@gmail.com" \ org.label-schema.vcs-ref=$VCS_REF \ diff --git a/README.md b/README.md index c651f8f6..3ebf97e0 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,8 @@ go get github.com/jesseduffield/lazydocker https://github.com/jesseduffield/lazydocker.git ``` + You can also add `--build-arg VCS_REF=$(git rev-parse HEAD)` so that the go build and the container contain the commit used. +

1. Run it From 580936c73c6e2aebc8028bd7c9809667614b0eb8 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 1 Jul 2019 15:38:21 +0200 Subject: [PATCH 05/27] Fixed docker build typo (both URL and PATH) --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ebf97e0..e6efcee9 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,9 @@ go get github.com/jesseduffield/lazydocker - If you have a x86_64 CPU architecture ```sh - docker build -t lazydocker . https://github.com/jesseduffield/lazydocker.git + docker build -t lazydocker https://github.com/jesseduffield/lazydocker.git + # or locally within the repository: + docker build -t lazydocker . ``` - If you have a ARM 32 bit v6 architecture From c89e396121dba417ea255b2e4a3bf0ea85771200 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 1 Jul 2019 15:39:52 +0200 Subject: [PATCH 06/27] Lazydocker can be ran directly as entrypoint Thanks to the script: ```sh #!/bin/sh resize > /dev/null lazydocker $@ ``` --- Dockerfile | 3 ++- README.md | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8e57d6b5..899cd05e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,5 +25,6 @@ LABEL org.label-schema.schema-version="1.0.0-rc1" \ org.label-schema.vcs-description="The lazier way to manage everything docker" \ org.label-schema.docker.cmd="docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazydocker" \ org.label-schema.version=${VERSION} -ENTRYPOINT [ "/bin/sh" ] +RUN printf "#!/bin/sh\n\nresize > /dev/null\nlazydocker \$@\n" > /usr/bin/run && chmod 500 /usr/bin/run +ENTRYPOINT [ "/usr/bin/run" ] COPY --from=builder /go/src/github.com/jesseduffield/lazydocker/lazydocker /usr/bin/lazydocker diff --git a/README.md b/README.md index e6efcee9..8d569792 100644 --- a/README.md +++ b/README.md @@ -101,8 +101,6 @@ go get github.com/jesseduffield/lazydocker docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazydocker ``` -1. Then enter `lazydocker` - ## Usage Call `lazydocker` in your terminal. I personally use this a lot so I've made an alias for it like so: From 18d34d5c01bfc101ae479372d1fb58bfccb45026 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Tue, 2 Jul 2019 13:57:44 +0200 Subject: [PATCH 07/27] `VERSION` and `VCS_REF` build arguments are unset by default --- Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 899cd05e..872b3f83 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,8 +6,8 @@ ARG GO_VERSION=1.12.6 FROM ${BASE_IMAGE_BUILDER}:${GO_VERSION}-alpine${ALPINE_VERSION} AS builder ARG GOARCH=amd64 ARG GOARM -ARG VERSION=0.2.4 -ARG VCS_REF= +ARG VERSION +ARG VCS_REF WORKDIR /go/src/github.com/jesseduffield/lazydocker/ COPY ./ . RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} GOARM=${GOARM} go build -a -installsuffix cgo -ldflags="-s -w \ @@ -16,8 +16,8 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} GOARM=${GOARM} go build -a -instal -X main.buildSource=Docker" FROM ${BASE_IMAGE}:${ALPINE_VERSION} -ARG VERSION=0.2.4 -ARG VCS_REF= +ARG VERSION +ARG VCS_REF LABEL org.label-schema.schema-version="1.0.0-rc1" \ maintainer="jessedduffield@gmail.com" \ org.label-schema.vcs-ref=$VCS_REF \ From d78648cabb8f78b92051361687bdf3c9be15fa62 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Tue, 2 Jul 2019 14:06:44 +0200 Subject: [PATCH 08/27] Added Docker automated build hook and readme badges for Docker - Build arguments are injected by the build hook - Badges added: number of pulls, stars and if the build is automated --- README.md | 4 ++++ hooks/build | 6 ++++++ 2 files changed, 10 insertions(+) create mode 100644 hooks/build diff --git a/README.md b/README.md index 8d569792..5ecf72a3 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,10 @@ go get github.com/jesseduffield/lazydocker ### Docker +[![Docker Pulls](https://img.shields.io/docker/pulls/jesseduffield/lazydocker.svg)](https://hub.docker.com/r/jesseduffield/lazydocker) +[![Docker Stars](https://img.shields.io/docker/stars/jesseduffield/lazydocker.svg)](https://hub.docker.com/r/jesseduffield/lazydocker) +[![Docker Automated](https://img.shields.io/docker/cloud/automated/jesseduffield/lazydocker.svg)](https://hub.docker.com/r/jesseduffield/lazydocker) + 1.
Build it...

- If you have a x86_64 CPU architecture diff --git a/hooks/build b/hooks/build new file mode 100644 index 00000000..17973ef3 --- /dev/null +++ b/hooks/build @@ -0,0 +1,6 @@ +#!/bin/bash + +docker build --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ + --build-arg VCS_REF=`git rev-parse --short HEAD` \ + --build-arg VERSION=`git describe --abbrev=0 --tag` \ + -t $IMAGE_NAME . From 20f4ad8e4921df1f42a7f7624a558c8397416de0 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Tue, 2 Jul 2019 20:08:29 +0200 Subject: [PATCH 09/27] Resolved screen size issue, final Docker image uses Scratch --- Dockerfile | 12 ++++++------ README.md | 3 --- pkg/app/app.go | 16 +++++++++++++++- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 872b3f83..656e0ff1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,4 @@ ARG BASE_IMAGE_BUILDER=golang -ARG BASE_IMAGE=alpine ARG ALPINE_VERSION=3.10 ARG GO_VERSION=1.12.6 @@ -15,16 +14,17 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} GOARM=${GOARM} go build -a -instal -X main.version=${VERSION} \ -X main.buildSource=Docker" -FROM ${BASE_IMAGE}:${ALPINE_VERSION} -ARG VERSION +FROM scratch +ARG BUILD_DATE ARG VCS_REF +ARG VERSION LABEL org.label-schema.schema-version="1.0.0-rc1" \ maintainer="jessedduffield@gmail.com" \ + org.label-schema.build-date=$BUILD_DATE \ org.label-schema.vcs-ref=$VCS_REF \ org.label-schema.url="https://github.com/jesseduffield/lazydocker" \ org.label-schema.vcs-description="The lazier way to manage everything docker" \ org.label-schema.docker.cmd="docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazydocker" \ org.label-schema.version=${VERSION} -RUN printf "#!/bin/sh\n\nresize > /dev/null\nlazydocker \$@\n" > /usr/bin/run && chmod 500 /usr/bin/run -ENTRYPOINT [ "/usr/bin/run" ] -COPY --from=builder /go/src/github.com/jesseduffield/lazydocker/lazydocker /usr/bin/lazydocker +ENTRYPOINT [ "/lazydocker" ] +COPY --from=builder /go/src/github.com/jesseduffield/lazydocker/lazydocker /lazydocker \ No newline at end of file diff --git a/README.md b/README.md index 5ecf72a3..d9122098 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,6 @@ go get github.com/jesseduffield/lazydocker ```sh docker build -t lazydocker \ --build-arg BASE_IMAGE_BUILDER=arm32v6/golang \ - --build-arg BASE_IMAGE=arm32v6/alpine \ --build-arg GOARCH=arm \ --build-arg GOARM=6 \ https://github.com/jesseduffield/lazydocker.git @@ -80,7 +79,6 @@ go get github.com/jesseduffield/lazydocker ```sh docker build -t lazydocker \ --build-arg BASE_IMAGE_BUILDER=arm32v7/golang \ - --build-arg BASE_IMAGE=arm32v7/alpine \ --build-arg GOARCH=arm \ --build-arg GOARM=7 \ https://github.com/jesseduffield/lazydocker.git @@ -91,7 +89,6 @@ go get github.com/jesseduffield/lazydocker ```sh docker build -t lazydocker \ --build-arg BASE_IMAGE_BUILDER=arm64v8/golang \ - --build-arg BASE_IMAGE=arm64v8/alpine \ --build-arg GOARCH=arm64 \ https://github.com/jesseduffield/lazydocker.git ``` diff --git a/pkg/app/app.go b/pkg/app/app.go index 57015918..dc07d70a 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -2,7 +2,11 @@ package app import ( "io" + "os" "strings" + "time" + + "golang.org/x/crypto/ssh/terminal" "github.com/jesseduffield/lazydocker/pkg/commands" "github.com/jesseduffield/lazydocker/pkg/config" @@ -51,8 +55,18 @@ func NewApp(config *config.AppConfig) (*App, error) { } func (app *App) Run() error { + // before we do anything, we need to check that we have some window space available + for { + width, _, err := terminal.GetSize(int(os.Stdin.Fd())) + if err != nil { + return err + } + if width == 0 { + time.Sleep(time.Millisecond * 50) + } + break + } err := app.Gui.RunWithSubprocesses() - return err } From 767488a5e77edc814b88213e02cba54558be9f01 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Tue, 2 Jul 2019 20:08:56 +0200 Subject: [PATCH 10/27] Detailed development Docker build in readme with all build args --- README.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d9122098..ccf49a44 100644 --- a/README.md +++ b/README.md @@ -60,8 +60,6 @@ go get github.com/jesseduffield/lazydocker ```sh docker build -t lazydocker https://github.com/jesseduffield/lazydocker.git - # or locally within the repository: - docker build -t lazydocker . ``` - If you have a ARM 32 bit v6 architecture @@ -93,7 +91,17 @@ go get github.com/jesseduffield/lazydocker https://github.com/jesseduffield/lazydocker.git ``` - You can also add `--build-arg VCS_REF=$(git rev-parse HEAD)` so that the go build and the container contain the commit used. + - For development: + + ```sh + git clone https://github.com/jesseduffield/lazydocker.git + cd lazydocker + docker build -t lazydocker \ + --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ + --build-arg VCS_REF=`git rev-parse --short HEAD` \ + --build-arg VERSION=`git describe --abbrev=0 --tag` \ + . + ```

1. Run it From d404716d0a3482525b8186785a9699249deccad8 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Tue, 2 Jul 2019 20:14:34 +0200 Subject: [PATCH 11/27] Fixed bad loop for checking terminal size --- pkg/app/app.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/pkg/app/app.go b/pkg/app/app.go index dc07d70a..84034da7 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -56,17 +56,16 @@ func NewApp(config *config.AppConfig) (*App, error) { func (app *App) Run() error { // before we do anything, we need to check that we have some window space available - for { - width, _, err := terminal.GetSize(int(os.Stdin.Fd())) + var err error + width := 0 + for width == 0 { + width, _, err = terminal.GetSize(int(os.Stdin.Fd())) if err != nil { return err } - if width == 0 { - time.Sleep(time.Millisecond * 50) - } - break + time.Sleep(time.Millisecond * 50) } - err := app.Gui.RunWithSubprocesses() + err = app.Gui.RunWithSubprocesses() return err } From 7107a4cfa1bd3120a0d6563d057152d7c056e5cc Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Tue, 2 Jul 2019 20:26:15 +0200 Subject: [PATCH 12/27] Added config bind mount instruction to Docker container --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ccf49a44..017b370a 100644 --- a/README.md +++ b/README.md @@ -104,12 +104,20 @@ go get github.com/jesseduffield/lazydocker ```

-1. Run it +1. Create a directory *config* on your host: ```sh - docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazydocker + mkdir config ``` +1. Run the container + + ```sh + docker run -it -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd)/config:/.config/jesseduffield/lazydocker lazydocker + ``` + + On Windows, replace `$(pwd)` by `%cd%` + ## Usage Call `lazydocker` in your terminal. I personally use this a lot so I've made an alias for it like so: From e637497fdb22318046873d8df9a33a2787f4e0c9 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Fri, 5 Jul 2019 01:29:33 +0200 Subject: [PATCH 13/27] Removed useless `installsuffix cgo` from Docker Go build --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 656e0ff1..fe414140 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ ARG VERSION ARG VCS_REF WORKDIR /go/src/github.com/jesseduffield/lazydocker/ COPY ./ . -RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} GOARM=${GOARM} go build -a -installsuffix cgo -ldflags="-s -w \ +RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} GOARM=${GOARM} go build -a -ldflags="-s -w \ -X main.commit=${VCS_REF} \ -X main.version=${VERSION} \ -X main.buildSource=Docker" From 29ad43c4a4fdbc09d8085c68c820fbde8aa473a2 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Fri, 5 Jul 2019 01:31:28 +0200 Subject: [PATCH 14/27] Fixed infinite loop for checking terminal space as discussed in PR - All the checks are in the `waitForTerminalSpace` function - It tries to run the program directly if the width is positive - It then sleeps 50 milliseconds the first time if the width is zero - If after the first sleep, the terminal width is still zero, it prints the waiting time to stderr and will keep on doing so with increasing sleep times. --- pkg/app/app.go | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/pkg/app/app.go b/pkg/app/app.go index 84034da7..4f845439 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -1,6 +1,7 @@ package app import ( + "fmt" "io" "os" "strings" @@ -55,20 +56,34 @@ func NewApp(config *config.AppConfig) (*App, error) { } func (app *App) Run() error { - // before we do anything, we need to check that we have some window space available - var err error - width := 0 - for width == 0 { - width, _, err = terminal.GetSize(int(os.Stdin.Fd())) - if err != nil { - return err - } - time.Sleep(time.Millisecond * 50) + err := waitForTerminalSpace() + if err != nil { + return err } err = app.Gui.RunWithSubprocesses() return err } +func waitForTerminalSpace() error { + // before we do anything, we need to check that we have some window space available + tStart := time.Now() + count := 0 + for { + width, _, err := terminal.GetSize(int(os.Stdin.Fd())) + if err != nil { + return err + } + if width != 0 { + return nil + } + count++ + time.Sleep(time.Millisecond * 50 * time.Duration(count)) + if count > 1 { + fmt.Fprintf(os.Stderr, "waited %s for available terminal space\n", time.Since(tStart)) + } + } +} + // Close closes any resources func (app *App) Close() error { for _, closer := range app.closers { From ee6b990792f0c0ea14aa18c4208ca2ab77146968 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Fri, 5 Jul 2019 14:39:27 +0200 Subject: [PATCH 15/27] Applied changes from @dawidd6 to check on terminal space at start --- pkg/app/app.go | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/pkg/app/app.go b/pkg/app/app.go index 4f845439..3be17f4b 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -4,7 +4,9 @@ import ( "fmt" "io" "os" + "os/signal" "strings" + "syscall" "time" "golang.org/x/crypto/ssh/terminal" @@ -66,21 +68,20 @@ func (app *App) Run() error { func waitForTerminalSpace() error { // before we do anything, we need to check that we have some window space available - tStart := time.Now() - count := 0 - for { - width, _, err := terminal.GetSize(int(os.Stdin.Fd())) - if err != nil { - return err - } - if width != 0 { - return nil - } - count++ - time.Sleep(time.Millisecond * 50 * time.Duration(count)) - if count > 1 { - fmt.Fprintf(os.Stderr, "waited %s for available terminal space\n", time.Since(tStart)) - } + width, height, err := terminal.GetSize(int(os.Stdin.Fd())) + if err != nil { + return err + } + if width > 0 && height > 0 { + return nil + } + winch := make(chan os.Signal) + signal.Notify(winch, syscall.SIGWINCH) + select { + case <-winch: + return nil + case <-time.After(time.Second): + return fmt.Errorf("there is no available terminal space") } } From d8b0e1872fac34105811ee873fd434940da32d3d Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Fri, 5 Jul 2019 14:43:41 +0200 Subject: [PATCH 16/27] Updated readme's Docker section - No need to build for amd64 architectures, just pull automatically from Docker Hub when invoking `docker run ...` - Build instructions only for ARM devices as Docker Hub does not build for ARM architectures really. - Updated Docker image tag from `lazydocker` to `lazyteam/lazydocker` - Added docker-compose.yml collapsible example --- README.md | 71 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 017b370a..52c1c12c 100644 --- a/README.md +++ b/README.md @@ -50,22 +50,16 @@ go get github.com/jesseduffield/lazydocker ### Docker -[![Docker Pulls](https://img.shields.io/docker/pulls/jesseduffield/lazydocker.svg)](https://hub.docker.com/r/jesseduffield/lazydocker) -[![Docker Stars](https://img.shields.io/docker/stars/jesseduffield/lazydocker.svg)](https://hub.docker.com/r/jesseduffield/lazydocker) -[![Docker Automated](https://img.shields.io/docker/cloud/automated/jesseduffield/lazydocker.svg)](https://hub.docker.com/r/jesseduffield/lazydocker) +[![Docker Pulls](https://img.shields.io/docker/pulls/lazyteam/lazydocker.svg)](https://hub.docker.com/r/lazyteam/lazydocker) +[![Docker Stars](https://img.shields.io/docker/stars/lazyteam/lazydocker.svg)](https://hub.docker.com/r/lazyteam/lazydocker) +[![Docker Automated](https://img.shields.io/docker/cloud/automated/lazyteam/lazydocker.svg)](https://hub.docker.com/r/lazyteam/lazydocker) -1.
Build it...

- - - If you have a x86_64 CPU architecture - - ```sh - docker build -t lazydocker https://github.com/jesseduffield/lazydocker.git - ``` +1.

Click if you have an ARM device

- If you have a ARM 32 bit v6 architecture ```sh - docker build -t lazydocker \ + docker build -t lazyteam/lazydocker \ --build-arg BASE_IMAGE_BUILDER=arm32v6/golang \ --build-arg GOARCH=arm \ --build-arg GOARM=6 \ @@ -75,7 +69,7 @@ go get github.com/jesseduffield/lazydocker - If you have a ARM 32 bit v7 architecture ```sh - docker build -t lazydocker \ + docker build -t lazyteam/lazydocker \ --build-arg BASE_IMAGE_BUILDER=arm32v7/golang \ --build-arg GOARCH=arm \ --build-arg GOARM=7 \ @@ -85,24 +79,12 @@ go get github.com/jesseduffield/lazydocker - If you have a ARM 64 bit v8 architecture ```sh - docker build -t lazydocker \ + docker build -t lazyteam/lazydocker \ --build-arg BASE_IMAGE_BUILDER=arm64v8/golang \ --build-arg GOARCH=arm64 \ https://github.com/jesseduffield/lazydocker.git ``` - - For development: - - ```sh - git clone https://github.com/jesseduffield/lazydocker.git - cd lazydocker - docker build -t lazydocker \ - --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ - --build-arg VCS_REF=`git rev-parse --short HEAD` \ - --build-arg VERSION=`git describe --abbrev=0 --tag` \ - . - ``` -

1. Create a directory *config* on your host: @@ -113,10 +95,45 @@ go get github.com/jesseduffield/lazydocker 1. Run the container ```sh - docker run -it -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd)/config:/.config/jesseduffield/lazydocker lazydocker + docker run -it -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd)/config:/.config/jesseduffield/lazydocker lazyteam/lazydocker ``` - On Windows, replace `$(pwd)` by `%cd%` + On Windows, replace `$(pwd)` by `%cd%`. + +
You can also use docker-compose

+ + ```yml + version: '3' + services: + lazydocker: + build: + context: https://github.com/jesseduffield/lazydocker.git + args: + BASE_IMAGE_BUILDER: golang + GOARCH: amd64 + GOARM: + image: jesseduffield/lazydocker + container_name: lazydocker + stdin_open: true + tty: true + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./config:/.config/jesseduffield/lazydocker + ``` + +

+ +For development, you can build the image using: + +```sh +git clone https://github.com/jesseduffield/lazydocker.git +cd lazydocker +docker build -t lazyteam/lazydocker \ + --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ + --build-arg VCS_REF=`git rev-parse --short HEAD` \ + --build-arg VERSION=`git describe --abbrev=0 --tag` \ + . +``` ## Usage From 92837ca1cb4a8aabb6bff399ca2185e0abce3edf Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Fri, 5 Jul 2019 14:46:38 +0200 Subject: [PATCH 17/27] Buffering channel with a size of 1 --- pkg/app/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/app/app.go b/pkg/app/app.go index 3be17f4b..fe4931c8 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -75,7 +75,7 @@ func waitForTerminalSpace() error { if width > 0 && height > 0 { return nil } - winch := make(chan os.Signal) + winch := make(chan os.Signal, 1) signal.Notify(winch, syscall.SIGWINCH) select { case <-winch: From 5532f1da8076d7bfc6f9bfed4a59abc772101dd4 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Sat, 6 Jul 2019 14:55:45 +0200 Subject: [PATCH 18/27] Moved docker-compose.yml out of readme --- README.md | 23 +---------------------- docker-compose.yml | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 22 deletions(-) create mode 100644 docker-compose.yml diff --git a/README.md b/README.md index 52c1c12c..9afa22ee 100644 --- a/README.md +++ b/README.md @@ -100,28 +100,7 @@ go get github.com/jesseduffield/lazydocker On Windows, replace `$(pwd)` by `%cd%`. -
You can also use docker-compose

- - ```yml - version: '3' - services: - lazydocker: - build: - context: https://github.com/jesseduffield/lazydocker.git - args: - BASE_IMAGE_BUILDER: golang - GOARCH: amd64 - GOARM: - image: jesseduffield/lazydocker - container_name: lazydocker - stdin_open: true - tty: true - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - ./config:/.config/jesseduffield/lazydocker - ``` - -

+ You can also use this [docker-compose.yml](https://github.com/jesseduffield/lazydocker/blob/master/docker-compose.yml) For development, you can build the image using: diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..a7e23aa1 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3' +services: + lazydocker: + build: + context: https://github.com/jesseduffield/lazydocker.git + args: + BASE_IMAGE_BUILDER: golang + GOARCH: amd64 + GOARM: + image: jesseduffield/lazydocker + container_name: lazydocker + stdin_open: true + tty: true + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./config:/.config/jesseduffield/lazydocker \ No newline at end of file From a01f704d6118cda8ba893916bc11c19ce9985a77 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Sat, 6 Jul 2019 14:56:06 +0200 Subject: [PATCH 19/27] Added volume to Dockerfile so bind mounting is optional --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index fe414140..03eafc31 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,4 +27,5 @@ LABEL org.label-schema.schema-version="1.0.0-rc1" \ org.label-schema.docker.cmd="docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazydocker" \ org.label-schema.version=${VERSION} ENTRYPOINT [ "/lazydocker" ] +VOLUME [ "/.config/jesseduffield/lazydocker" ] COPY --from=builder /go/src/github.com/jesseduffield/lazydocker/lazydocker /lazydocker \ No newline at end of file From 88896e911716da6e5ed51e8477b890da7ac3d15f Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Sun, 7 Jul 2019 12:19:44 +0200 Subject: [PATCH 20/27] Removed terminal space check (gocui got fixed) --- pkg/app/app.go | 32 +------------------------------- 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/pkg/app/app.go b/pkg/app/app.go index fe4931c8..eb1e3829 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -1,15 +1,8 @@ package app import ( - "fmt" "io" - "os" - "os/signal" "strings" - "syscall" - "time" - - "golang.org/x/crypto/ssh/terminal" "github.com/jesseduffield/lazydocker/pkg/commands" "github.com/jesseduffield/lazydocker/pkg/config" @@ -58,33 +51,10 @@ func NewApp(config *config.AppConfig) (*App, error) { } func (app *App) Run() error { - err := waitForTerminalSpace() - if err != nil { - return err - } - err = app.Gui.RunWithSubprocesses() + err := app.Gui.RunWithSubprocesses() return err } -func waitForTerminalSpace() error { - // before we do anything, we need to check that we have some window space available - width, height, err := terminal.GetSize(int(os.Stdin.Fd())) - if err != nil { - return err - } - if width > 0 && height > 0 { - return nil - } - winch := make(chan os.Signal, 1) - signal.Notify(winch, syscall.SIGWINCH) - select { - case <-winch: - return nil - case <-time.After(time.Second): - return fmt.Errorf("there is no available terminal space") - } -} - // Close closes any resources func (app *App) Close() error { for _, closer := range app.closers { From dec14665e1e5381af4b81b4db8777b7b26d111b0 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 15 Jul 2019 22:02:04 -0700 Subject: [PATCH 21/27] Simplified docker run readme thanks to default volume --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9afa22ee..74c267a5 100644 --- a/README.md +++ b/README.md @@ -95,11 +95,14 @@ go get github.com/jesseduffield/lazydocker 1. Run the container ```sh - docker run -it -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd)/config:/.config/jesseduffield/lazydocker lazyteam/lazydocker + docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazyteam/lazydocker ``` On Windows, replace `$(pwd)` by `%cd%`. + You can optionally bind mount the config directory with `-v $(pwd)/config:/.config/jesseduffield/lazydocker`, + although it is saved in a volume by default. + You can also use this [docker-compose.yml](https://github.com/jesseduffield/lazydocker/blob/master/docker-compose.yml) For development, you can build the image using: From 98697c544e37ee8a38f14f8c9e1aac6e7030fcaa Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 15 Jul 2019 22:03:17 -0700 Subject: [PATCH 22/27] Added Docker CLI binary to final image --- Dockerfile | 17 ++++++++++++++++- README.md | 4 ++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 03eafc31..b88ad974 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,6 +14,20 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} GOARM=${GOARM} go build -a -ldflag -X main.version=${VERSION} \ -X main.buildSource=Docker" +FROM ${BASE_IMAGE_BUILDER}:${GO_VERSION}-alpine${ALPINE_VERSION} AS docker-builder +ARG GOARCH=amd64 +ARG GOARM +ARG DOCKER_VERSION=v18.09.7 +RUN apk add -U -q --progress --no-cache git bash coreutils gcc musl-dev +WORKDIR /go/src/github.com/docker/cli +RUN git clone --branch ${DOCKER_VERSION} --single-branch --depth 1 https://github.com/docker/cli.git . > /dev/null 2>&1 +ENV CGO_ENABLED=0 \ + GOARCH=${GOARCH} \ + GOARM=${GOARM} \ + DISABLE_WARN_OUTSIDE_CONTAINER=1 +RUN ./scripts/build/binary +RUN rm build/docker && mv build/docker-linux-* build/docker + FROM scratch ARG BUILD_DATE ARG VCS_REF @@ -28,4 +42,5 @@ LABEL org.label-schema.schema-version="1.0.0-rc1" \ org.label-schema.version=${VERSION} ENTRYPOINT [ "/lazydocker" ] VOLUME [ "/.config/jesseduffield/lazydocker" ] -COPY --from=builder /go/src/github.com/jesseduffield/lazydocker/lazydocker /lazydocker \ No newline at end of file +ENV PATH=/ +COPY --from=docker-builder /go/src/github.com/docker/cli/build/docker /docker \ No newline at end of file diff --git a/README.md b/README.md index 74c267a5..f36cc6cf 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,10 @@ docker build -t lazyteam/lazydocker \ . ``` +If you encounter a compatibility issue with Docker bundled binary, try rebuilding +the image with the build argument `--build-arg DOCKER_VERSION="v$(docker -v | cut -d" " -f3 | rev | cut -c 2- | rev)"` +so that the bundled docker binary matches your host docker binary version. + ## Usage Call `lazydocker` in your terminal. I personally use this a lot so I've made an alias for it like so: From dedafb3acf1bee97f82d8b8de264341d1218f778 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 15 Jul 2019 22:11:08 -0700 Subject: [PATCH 23/27] All binaries are in `/bin` directory. --- Dockerfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index b88ad974..e3c1ef2b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,7 +40,8 @@ LABEL org.label-schema.schema-version="1.0.0-rc1" \ org.label-schema.vcs-description="The lazier way to manage everything docker" \ org.label-schema.docker.cmd="docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazydocker" \ org.label-schema.version=${VERSION} -ENTRYPOINT [ "/lazydocker" ] +ENTRYPOINT [ "/bin/lazydocker" ] VOLUME [ "/.config/jesseduffield/lazydocker" ] -ENV PATH=/ -COPY --from=docker-builder /go/src/github.com/docker/cli/build/docker /docker \ No newline at end of file +ENV PATH=/bin +COPY --from=builder /go/src/github.com/jesseduffield/lazydocker/lazydocker /bin/lazydocker +COPY --from=docker-builder /go/src/github.com/docker/cli/build/docker /bin/docker \ No newline at end of file From 84320dd4de79f1837860b8147f7a50ae641fa912 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Tue, 16 Jul 2019 05:00:52 -0700 Subject: [PATCH 24/27] Uses modules for Docker build --- Dockerfile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index e3c1ef2b..b36952b6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,9 +7,11 @@ ARG GOARCH=amd64 ARG GOARM ARG VERSION ARG VCS_REF -WORKDIR /go/src/github.com/jesseduffield/lazydocker/ +WORKDIR /tmp/gobuild COPY ./ . -RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} GOARM=${GOARM} go build -a -ldflags="-s -w \ +RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} GOARM=${GOARM} \ + go build -a -mod=vendor \ + -ldflags="-s -w \ -X main.commit=${VCS_REF} \ -X main.version=${VERSION} \ -X main.buildSource=Docker" @@ -43,5 +45,5 @@ LABEL org.label-schema.schema-version="1.0.0-rc1" \ ENTRYPOINT [ "/bin/lazydocker" ] VOLUME [ "/.config/jesseduffield/lazydocker" ] ENV PATH=/bin -COPY --from=builder /go/src/github.com/jesseduffield/lazydocker/lazydocker /bin/lazydocker -COPY --from=docker-builder /go/src/github.com/docker/cli/build/docker /bin/docker \ No newline at end of file +COPY --from=docker-builder /go/src/github.com/docker/cli/build/docker /bin/docker +COPY --from=builder /tmp/gobuild/lazydocker /bin/lazydocker \ No newline at end of file From a497b56e36c3bbe526d05514f495f78ca36bb752 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Tue, 16 Jul 2019 05:02:48 -0700 Subject: [PATCH 25/27] Simplified readme instructions for Docker run and removed volume - Volume did not work properly as the config would be persistent but not shared across restart of the container running interactively. - Docker run instructions were therefore updated and simplified to bind mount the config directory as volume do not really work in this situation. --- Dockerfile | 1 - README.md | 21 +++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index b36952b6..3294eb75 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,7 +43,6 @@ LABEL org.label-schema.schema-version="1.0.0-rc1" \ org.label-schema.docker.cmd="docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazydocker" \ org.label-schema.version=${VERSION} ENTRYPOINT [ "/bin/lazydocker" ] -VOLUME [ "/.config/jesseduffield/lazydocker" ] ENV PATH=/bin COPY --from=docker-builder /go/src/github.com/docker/cli/build/docker /bin/docker COPY --from=builder /tmp/gobuild/lazydocker /bin/lazydocker \ No newline at end of file diff --git a/README.md b/README.md index f36cc6cf..0f8ad82b 100644 --- a/README.md +++ b/README.md @@ -86,24 +86,25 @@ go get github.com/jesseduffield/lazydocker ```

-1. Create a directory *config* on your host: - - ```sh - mkdir config - ``` 1. Run the container ```sh - docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazyteam/lazydocker + docker run -it -v \ + /var/run/docker.sock:/var/run/docker.sock \ + -v /yourpath:/.config/jesseduffield/lazydocker \ + lazyteam/lazydocker ``` - On Windows, replace `$(pwd)` by `%cd%`. + - Don't forget to change `/yourpath` to an actual path you created to store lazydocker's config + - You can also use this [docker-compose.yml](https://github.com/jesseduffield/lazydocker/blob/master/docker-compose.yml) + - You might want to create an alias, for example: + + ```sh + echo "alias ld='docker run -it -v /var/run/docker.sock:/var/run/docker.sock -v /yourpath/config:/.config/jesseduffield/lazydocker lazyteam/lazydocker'" >> ~/.zshrc + ``` - You can optionally bind mount the config directory with `-v $(pwd)/config:/.config/jesseduffield/lazydocker`, - although it is saved in a volume by default. - You can also use this [docker-compose.yml](https://github.com/jesseduffield/lazydocker/blob/master/docker-compose.yml) For development, you can build the image using: From 80fdf3142b37862b76a0889b5a49cf4c187c3965 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Tue, 16 Jul 2019 05:03:09 -0700 Subject: [PATCH 26/27] Switched to opencontainers.org labels for Docker image --- Dockerfile | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3294eb75..31bfe3e1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,14 +34,16 @@ FROM scratch ARG BUILD_DATE ARG VCS_REF ARG VERSION -LABEL org.label-schema.schema-version="1.0.0-rc1" \ - maintainer="jessedduffield@gmail.com" \ - org.label-schema.build-date=$BUILD_DATE \ - org.label-schema.vcs-ref=$VCS_REF \ - org.label-schema.url="https://github.com/jesseduffield/lazydocker" \ - org.label-schema.vcs-description="The lazier way to manage everything docker" \ - org.label-schema.docker.cmd="docker run -it -v /var/run/docker.sock:/var/run/docker.sock lazydocker" \ - org.label-schema.version=${VERSION} +LABEL \ + org.opencontainers.image.authors="jessedduffield@gmail.com" \ + org.opencontainers.image.created=$BUILD_DATE \ + org.opencontainers.image.version=$VERSION \ + org.opencontainers.image.revision=$VCS_REF \ + org.opencontainers.image.url="https://github.com/jesseduffield/lazydocker" \ + org.opencontainers.image.documentation="https://github.com/jesseduffield/lazydocker" \ + org.opencontainers.image.source="https://github.com/jesseduffield/lazydocker" \ + org.opencontainers.image.title="lazydocker" \ + org.opencontainers.image.description="The lazier way to manage everything docker" ENTRYPOINT [ "/bin/lazydocker" ] ENV PATH=/bin COPY --from=docker-builder /go/src/github.com/docker/cli/build/docker /bin/docker From 25e877539d96458ec6d5356b14a9e5dda78f3b93 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Tue, 16 Jul 2019 05:06:35 -0700 Subject: [PATCH 27/27] Removed `PATH` variable definition in Dockerfile As @ibnesayeed mentionned, some environment variables are actually defined even in Scratch Docker images. `PATH` contains `/bin` so there is no need to overwrite it. --- Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 31bfe3e1..594f6e27 100644 --- a/Dockerfile +++ b/Dockerfile @@ -45,6 +45,5 @@ LABEL \ org.opencontainers.image.title="lazydocker" \ org.opencontainers.image.description="The lazier way to manage everything docker" ENTRYPOINT [ "/bin/lazydocker" ] -ENV PATH=/bin COPY --from=docker-builder /go/src/github.com/docker/cli/build/docker /bin/docker COPY --from=builder /tmp/gobuild/lazydocker /bin/lazydocker \ No newline at end of file