aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
Diffstat (limited to 'docker')
-rw-r--r--docker/Dockerfile27
-rw-r--r--docker/Dockerfile.go_build20
-rw-r--r--docker/Dockerfile.local29
-rw-r--r--docker/Makefile19
-rw-r--r--docker/README.md22
-rw-r--r--docker/dev-compose.yml43
-rwxr-xr-xdocker/entrypoint.sh42
-rw-r--r--docker/filer.toml4
-rw-r--r--docker/local-cluster-compose.yml53
-rw-r--r--docker/local-dev-compose.yml35
-rw-r--r--docker/seaweedfs-compose.yml40
-rw-r--r--docker/seaweedfs-dev-compose.yml35
12 files changed, 274 insertions, 95 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile
index c7a343111..7146b91c7 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -1,9 +1,24 @@
-FROM frolvlad/alpine-glibc
+FROM alpine
-# Tried to use curl only (curl -o /tmp/linux_amd64.tar.gz ...), however it turned out that the following tar command failed with "gzip: stdin: not in gzip format"
-RUN apk add --no-cache --virtual build-dependencies --update wget curl ca-certificates && \
- wget -P /tmp https://github.com/$(curl -s -L https://github.com/chrislusf/seaweedfs/releases/latest | egrep -o 'chrislusf/seaweedfs/releases/download/.*/linux_amd64.tar.gz') && \
- tar -C /usr/bin/ -xzvf /tmp/linux_amd64.tar.gz && \
+RUN \
+ ARCH=$(if [ $(uname -m) == "x86_64" ] && [ $(getconf LONG_BIT) == "64" ]; then echo "amd64"; \
+ elif [ $(uname -m) == "x86_64" ] && [ $(getconf LONG_BIT) == "32" ]; then echo "386"; \
+ elif [ $(uname -m) == "aarch64" ]; then echo "arm64"; \
+ elif [ $(uname -m) == "armv7l" ]; then echo "arm"; \
+ elif [ $(uname -m) == "armv6l" ]; then echo "arm"; fi;) && \
+ echo "Building for $ARCH" 1>&2 && \
+ SUPERCRONIC_SHA1SUM=$(echo $ARCH | sed 's/386/e0126b0102b9f388ecd55714358e3ad60d0cebdb/g' | sed 's/amd64/5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85/g' | sed 's/arm64/e2714c43e7781bf1579c85aa61259245f56dbba1/g' | sed 's/arm/47481c3341bc3a1ae91a728e0cc63c8e6d3791ad/g') && \
+ SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.9/supercronic-linux-$ARCH && \
+ SUPERCRONIC=supercronic-linux-$ARCH && \
+ # Install SeaweedFS and Supercronic ( for cron job mode )
+ apk add --no-cache --virtual build-dependencies --update wget curl ca-certificates && \
+ wget -P /tmp https://github.com/$(curl -s -L https://github.com/chrislusf/seaweedfs/releases/latest | egrep -o "chrislusf/seaweedfs/releases/download/.*/linux_$ARCH.tar.gz") && \
+ tar -C /usr/bin/ -xzvf /tmp/linux_$ARCH.tar.gz && \
+ curl -fsSLO "$SUPERCRONIC_URL" && \
+ echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - && \
+ chmod +x "$SUPERCRONIC" && \
+ mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" && \
+ ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic && \
apk del build-dependencies && \
rm -rf /tmp/*
@@ -22,6 +37,8 @@ EXPOSE 9333
# s3 server http port
EXPOSE 8333
+RUN mkdir -p /data/filerldb2
+
VOLUME /data
COPY filer.toml /etc/seaweedfs/filer.toml
diff --git a/docker/Dockerfile.go_build b/docker/Dockerfile.go_build
index d0a214476..306ce3aa1 100644
--- a/docker/Dockerfile.go_build
+++ b/docker/Dockerfile.go_build
@@ -1,5 +1,15 @@
-FROM golang:latest
-RUN go get github.com/chrislusf/seaweedfs/weed
+FROM frolvlad/alpine-glibc as builder
+RUN apk add git go g++
+RUN mkdir -p /go/src/github.com/chrislusf/
+RUN git clone https://github.com/chrislusf/seaweedfs /go/src/github.com/chrislusf/seaweedfs
+RUN cd /go/src/github.com/chrislusf/seaweedfs/weed && go install
+
+FROM alpine AS final
+LABEL author="Chris Lu"
+COPY --from=builder /root/go/bin/weed /usr/bin/
+RUN mkdir -p /etc/seaweedfs
+COPY --from=builder /go/src/github.com/chrislusf/seaweedfs/docker/filer.toml /etc/seaweedfs/filer.toml
+COPY --from=builder /go/src/github.com/chrislusf/seaweedfs/docker/entrypoint.sh /entrypoint.sh
# volume server gprc port
EXPOSE 18080
@@ -16,12 +26,10 @@ EXPOSE 9333
# s3 server http port
EXPOSE 8333
+RUN mkdir -p /data/filerldb2
+
VOLUME /data
-RUN mkdir -p /etc/seaweedfs
-RUN cp /go/src/github.com/chrislusf/seaweedfs/docker/filer.toml /etc/seaweedfs/filer.toml
-RUN cp /go/src/github.com/chrislusf/seaweedfs/docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
-RUN cp /go/bin/weed /usr/bin/
ENTRYPOINT ["/entrypoint.sh"]
diff --git a/docker/Dockerfile.local b/docker/Dockerfile.local
new file mode 100644
index 000000000..693d8a952
--- /dev/null
+++ b/docker/Dockerfile.local
@@ -0,0 +1,29 @@
+FROM alpine AS final
+LABEL author="Chris Lu"
+COPY ./weed /usr/bin/
+RUN mkdir -p /etc/seaweedfs
+COPY ./filer.toml /etc/seaweedfs/filer.toml
+COPY ./entrypoint.sh /entrypoint.sh
+
+# volume server grpc port
+EXPOSE 18080
+# volume server http port
+EXPOSE 8080
+# filer server grpc port
+EXPOSE 18888
+# filer server http port
+EXPOSE 8888
+# master server shared grpc port
+EXPOSE 19333
+# master server shared http port
+EXPOSE 9333
+# s3 server http port
+EXPOSE 8333
+
+RUN mkdir -p /data/filerldb2
+
+VOLUME /data
+
+RUN chmod +x /entrypoint.sh
+
+ENTRYPOINT ["/entrypoint.sh"]
diff --git a/docker/Makefile b/docker/Makefile
new file mode 100644
index 000000000..166188bc3
--- /dev/null
+++ b/docker/Makefile
@@ -0,0 +1,19 @@
+all: gen
+
+.PHONY : gen
+
+gen: dev
+
+build:
+ cd ../weed; GOOS=linux go build; mv weed ../docker/
+ docker build --no-cache -t chrislusf/seaweedfs:local -f Dockerfile.local .
+ rm ./weed
+
+dev: build
+ docker-compose -f local-dev-compose.yml -p seaweedfs up
+
+cluster: build
+ docker-compose -f local-cluster-compose.yml -p seaweedfs up
+
+clean:
+ rm ./weed
diff --git a/docker/README.md b/docker/README.md
index cfe281e71..d6e1f4928 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -11,11 +11,29 @@ docker-compose -f seaweedfs-compose.yml -p seaweedfs up
```
-## Development
+## Try latest tip
+
+```bash
+
+wget https://raw.githubusercontent.com/chrislusf/seaweedfs/master/docker/seaweedfs-dev-compose.yml
+
+docker-compose -f seaweedfs-dev-compose.yml -p seaweedfs up
+
+```
+
+## Local Development
```bash
cd $GOPATH/src/github.com/chrislusf/seaweedfs/docker
+make
+```
-docker-compose -f dev-compose.yml -p seaweedfs up
+## Build and push a multiarch build
+Make sure that `docker buildx` is supported (might be an experimental docker feature)
+```bash
+BUILDER=$(docker buildx create --driver docker-container --use)
+docker buildx build --pull --push --platform linux/386,linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 . -t chrislusf/seaweedfs
+docker buildx stop $BUILDER
```
+
diff --git a/docker/dev-compose.yml b/docker/dev-compose.yml
deleted file mode 100644
index 0306b3cb0..000000000
--- a/docker/dev-compose.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-version: '2'
-
-services:
- master:
- build:
- context: .
- dockerfile: Dockerfile.go_build
- ports:
- - 9333:9333
- - 19333:19333
- command: "master"
- volume:
- build:
- context: .
- dockerfile: Dockerfile.go_build
- ports:
- - 8080:8080
- - 18080:18080
- command: 'volume -max=5 -mserver="master:9333" -port=8080'
- depends_on:
- - master
- filer:
- build:
- context: .
- dockerfile: Dockerfile.go_build
- ports:
- - 8888:8888
- - 18888:18888
- command: 'filer -master="master:9333"'
- depends_on:
- - master
- - volume
- s3:
- build:
- context: .
- dockerfile: Dockerfile.go_build
- ports:
- - 8333:8333
- command: 's3 -filer="filer:8888"'
- depends_on:
- - master
- - volume
- - filer
diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
index 105087dbe..05db7a672 100755
--- a/docker/entrypoint.sh
+++ b/docker/entrypoint.sh
@@ -3,48 +3,46 @@
case "$1" in
'master')
- ARGS="-ip `hostname -i` -mdir /data"
- # Is this instance linked with an other master? (Docker commandline "--link master1:master")
- if [ -n "$MASTER_PORT_9333_TCP_ADDR" ] ; then
- ARGS="$ARGS -peers=$MASTER_PORT_9333_TCP_ADDR:$MASTER_PORT_9333_TCP_PORT"
- fi
+ ARGS="-mdir=/data -volumePreallocate -volumeSizeLimitMB=1024"
exec /usr/bin/weed $@ $ARGS
;;
'volume')
- ARGS="-ip `hostname -i` -dir /data"
- # Is this instance linked with a master? (Docker commandline "--link master1:master")
- if [ -n "$MASTER_PORT_9333_TCP_ADDR" ] ; then
- ARGS="$ARGS -mserver=$MASTER_PORT_9333_TCP_ADDR:$MASTER_PORT_9333_TCP_PORT"
- fi
+ ARGS="-dir=/data -max=0"
+ if [[ $@ == *"-max="* ]]; then
+ ARGS="-dir=/data"
+ fi
exec /usr/bin/weed $@ $ARGS
;;
'server')
- ARGS="-ip `hostname -i` -dir /data"
- if [ -n "$MASTER_PORT_9333_TCP_ADDR" ] ; then
- ARGS="$ARGS -master.peers=$MASTER_PORT_9333_TCP_ADDR:$MASTER_PORT_9333_TCP_PORT"
- fi
+ ARGS="-dir=/data -volume.max=0 -master.volumePreallocate -master.volumeSizeLimitMB=1024"
+ if [[ $@ == *"-volume.max="* ]]; then
+ ARGS="-dir=/data -master.volumePreallocate -master.volumeSizeLimitMB=1024"
+ fi
exec /usr/bin/weed $@ $ARGS
;;
'filer')
- ARGS="-ip `hostname -i` "
- if [ -n "$MASTER_PORT_9333_TCP_ADDR" ] ; then
- ARGS="$ARGS -master=$MASTER_PORT_9333_TCP_ADDR:$MASTER_PORT_9333_TCP_PORT"
- fi
- mkdir -p /data/filerdb
+ ARGS=""
exec /usr/bin/weed $@ $ARGS
;;
's3')
ARGS="-domainName=$S3_DOMAIN_NAME -key.file=$S3_KEY_FILE -cert.file=$S3_CERT_FILE"
- if [ -n "$FILER_PORT_8888_TCP_ADDR" ] ; then
- ARGS="$ARGS -filer=$FILER_PORT_8888_TCP_ADDR:$FILER_PORT_8888_TCP_PORT"
- fi
exec /usr/bin/weed $@ $ARGS
;;
+ 'cronjob')
+ MASTER=${WEED_MASTER-localhost:9333}
+ FIX_REPLICATION_CRON_SCHEDULE=${CRON_SCHEDULE-*/7 * * * * *}
+ echo "$FIX_REPLICATION_CRON_SCHEDULE" 'echo "volume.fix.replication" | weed shell -master='$MASTER > /crontab
+ BALANCING_CRON_SCHEDULE=${CRON_SCHEDULE-25 * * * * *}
+ echo "$BALANCING_CRON_SCHEDULE" 'echo "volume.balance -c ALL -force" | weed shell -master='$MASTER >> /crontab
+ echo "Running Crontab:"
+ cat /crontab
+ exec supercronic /crontab
+ ;;
*)
exec /usr/bin/weed $@
;;
diff --git a/docker/filer.toml b/docker/filer.toml
index 5bf809cd8..a11e5de2b 100644
--- a/docker/filer.toml
+++ b/docker/filer.toml
@@ -1,3 +1,3 @@
-[leveldb]
+[leveldb2]
enabled = true
-dir = "/data/filerdb"
+dir = "/data/filerldb2"
diff --git a/docker/local-cluster-compose.yml b/docker/local-cluster-compose.yml
new file mode 100644
index 000000000..a1ac824e7
--- /dev/null
+++ b/docker/local-cluster-compose.yml
@@ -0,0 +1,53 @@
+version: '2'
+
+services:
+ master0:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 9333:9333
+ - 19333:19333
+ command: "master -ip=master0 -port=9333 -peers=master0:9333,master1:9334,master2:9335"
+ master1:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 9334:9334
+ - 19334:19334
+ command: "master -ip=master1 -port=9334 -peers=master0:9333,master1:9334,master2:9335"
+ master2:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 9335:9335
+ - 19335:19335
+ command: "master -ip=master2 -port=9335 -peers=master0:9333,master1:9334,master2:9335"
+ volume:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 8080:8080
+ - 18080:18080
+ command: 'volume -mserver="master0:9333,master1:9334,master2:9335" -port=8080 -ip=volume'
+ depends_on:
+ - master0
+ - master1
+ - master2
+ filer:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 8888:8888
+ - 18888:18888
+ command: 'filer -master="master0:9333,master1:9334,master2:9335"'
+ depends_on:
+ - master0
+ - master1
+ - master2
+ - volume
+ s3:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 8333:8333
+ command: 's3 -filer="filer:8888"'
+ depends_on:
+ - master0
+ - master1
+ - master2
+ - volume
+ - filer
diff --git a/docker/local-dev-compose.yml b/docker/local-dev-compose.yml
new file mode 100644
index 000000000..f6fd0f4ce
--- /dev/null
+++ b/docker/local-dev-compose.yml
@@ -0,0 +1,35 @@
+version: '2'
+
+services:
+ master:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 9333:9333
+ - 19333:19333
+ command: "master -ip=master"
+ volume:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 8080:8080
+ - 18080:18080
+ command: "volume -mserver=master:9333 -port=8080 -ip=volume"
+ depends_on:
+ - master
+ filer:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 8888:8888
+ - 18888:18888
+ command: 'filer -master="master:9333"'
+ depends_on:
+ - master
+ - volume
+ s3:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 8333:8333
+ command: 's3 -filer="filer:8888"'
+ depends_on:
+ - master
+ - volume
+ - filer
diff --git a/docker/seaweedfs-compose.yml b/docker/seaweedfs-compose.yml
index 05ed0e69e..70d005017 100644
--- a/docker/seaweedfs-compose.yml
+++ b/docker/seaweedfs-compose.yml
@@ -4,34 +4,44 @@ services:
master:
image: chrislusf/seaweedfs # use a remote image
ports:
- - 9333:9333
- - 19333:19333
- command: "master"
+ - 9333:9333
+ - 19333:19333
+ command: "master -ip=master"
volume:
image: chrislusf/seaweedfs # use a remote image
ports:
- - 8080:8080
- - 18080:18080
- command: 'volume -max=15 -mserver="master:9333" -port=8080'
+ - 8080:8080
+ - 18080:18080
+ command: 'volume -mserver="master:9333" -port=8080'
depends_on:
- - master
+ - master
filer:
image: chrislusf/seaweedfs # use a remote image
ports:
- - 8888:8888
- - 18888:18888
+ - 8888:8888
+ - 18888:18888
command: 'filer -master="master:9333"'
tty: true
stdin_open: true
depends_on:
- - master
- - volume
+ - master
+ - volume
+ cronjob:
+ image: chrislusf/seaweedfs # use a remote image
+ command: 'cronjob'
+ environment:
+ # Run re-replication every 2 minutes
+ CRON_SCHEDULE: '*/2 * * * * *' # Default: '*/5 * * * * *'
+ WEED_MASTER: master:9333 # Default: localhost:9333
+ depends_on:
+ - master
+ - volume
s3:
image: chrislusf/seaweedfs # use a remote image
ports:
- - 8333:8333
+ - 8333:8333
command: 's3 -filer="filer:8888"'
depends_on:
- - master
- - volume
- - filer
+ - master
+ - volume
+ - filer
diff --git a/docker/seaweedfs-dev-compose.yml b/docker/seaweedfs-dev-compose.yml
new file mode 100644
index 000000000..75801102e
--- /dev/null
+++ b/docker/seaweedfs-dev-compose.yml
@@ -0,0 +1,35 @@
+version: '2'
+
+services:
+ master:
+ image: chrislusf/seaweedfs:dev # use a remote dev image
+ ports:
+ - 9333:9333
+ - 19333:19333
+ command: "master -ip=master"
+ volume:
+ image: chrislusf/seaweedfs:dev # use a remote dev image
+ ports:
+ - 8080:8080
+ - 18080:18080
+ command: 'volume -mserver="master:9333" -port=8080 -ip=volume'
+ depends_on:
+ - master
+ filer:
+ image: chrislusf/seaweedfs:dev # use a remote dev image
+ ports:
+ - 8888:8888
+ - 18888:18888
+ command: 'filer -master="master:9333"'
+ depends_on:
+ - master
+ - volume
+ s3:
+ image: chrislusf/seaweedfs:dev # use a remote dev image
+ ports:
+ - 8333:8333
+ command: 's3 -filer="filer:8888"'
+ depends_on:
+ - master
+ - volume
+ - filer