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