下载etcd
shell
git clone https://github.com/etcd-io/etcd.git etcd
cd etcd
开始安装
shell
$ bash ./scripts/build-docker.sh
此时会遇到错误, 需要指定版本号
shell
Usage: ./scripts/build-docker.sh VERSION
从github release上找一个对应的版本, 以下以v3.5.24为例
shell
$ bash ./scripts/build-docker.sh v3.5.24
会先去github release下载对应的bin文件压缩包
shell
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 19.4M 100 19.4M 0 0 7714k 0 0:00:02 0:00:02 --:--:-- 12.3M
x etcd-v3.5.24-linux-arm64/
x etcd-v3.5.24-linux-arm64/Documentation/
x etcd-v3.5.24-linux-arm64/Documentation/dev-guide/
x etcd-v3.5.24-linux-arm64/Documentation/dev-guide/apispec/
x etcd-v3.5.24-linux-arm64/Documentation/dev-guide/apispec/swagger/
x etcd-v3.5.24-linux-arm64/Documentation/dev-guide/apispec/swagger/v3lock.swagger.json
x etcd-v3.5.24-linux-arm64/Documentation/dev-guide/apispec/swagger/v3election.swagger.json
x etcd-v3.5.24-linux-arm64/Documentation/dev-guide/apispec/swagger/rpc.swagger.json
x etcd-v3.5.24-linux-arm64/Documentation/README.md
x etcd-v3.5.24-linux-arm64/README-etcdutl.md
x etcd-v3.5.24-linux-arm64/READMEv2-etcdctl.md
x etcd-v3.5.24-linux-arm64/README-etcdctl.md
x etcd-v3.5.24-linux-arm64/README.md
x etcd-v3.5.24-linux-arm64/etcdutl
x etcd-v3.5.24-linux-arm64/etcdctl
x etcd-v3.5.24-linux-arm64/etcd
[+] Building 1.2s (11/11) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 425B 0.0s
=> [internal] load metadata for gcr.io/distroless/static-debian12@sha256:87bce11be0af225e4ca761c40babb06d6d559f5767fbf7dc3c47f0f1a466b92c 0.5s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> CACHED [1/6] FROM gcr.io/distroless/static-debian12@sha256:87bce11be0af225e4ca761c40babb06d6d559f5767fbf7dc3c47f0f1a466b92c 0.0s
=> [internal] load build context 0.4s
=> => transferring context: 59.32MB 0.4s
=> [2/6] ADD etcd /usr/local/bin/ 0.1s
=> [3/6] ADD etcdctl /usr/local/bin/ 0.0s
=> [4/6] ADD etcdutl /usr/local/bin/ 0.0s
=> [5/6] WORKDIR /var/etcd/ 0.0s
=> [6/6] WORKDIR /var/lib/etcd/ 0.0s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:7bafb479d9c0cd1c4ac3427a8923964586914112f82562e287559e0acbc2d193 0.0s
=> => naming to gcr.io/etcd-development/etcd:v3.5.24-arm64 0.0s
View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/hg3fj6nnndb8h7f6v4mi4tldu
[+] Building 0.0s (11/11) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 425B 0.0s
=> [internal] load metadata for gcr.io/distroless/static-debian12@sha256:87bce11be0af225e4ca761c40babb06d6d559f5767fbf7dc3c47f0f1a466b92c 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/6] FROM gcr.io/distroless/static-debian12@sha256:87bce11be0af225e4ca761c40babb06d6d559f5767fbf7dc3c47f0f1a466b92c 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 197B 0.0s
=> CACHED [2/6] ADD etcd /usr/local/bin/ 0.0s
=> CACHED [3/6] ADD etcdctl /usr/local/bin/ 0.0s
=> CACHED [4/6] ADD etcdutl /usr/local/bin/ 0.0s
=> CACHED [5/6] WORKDIR /var/etcd/ 0.0s
=> CACHED [6/6] WORKDIR /var/lib/etcd/ 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:7bafb479d9c0cd1c4ac3427a8923964586914112f82562e287559e0acbc2d193 0.0s
=> => naming to quay.io/coreos/etcd:v3.5.24-arm64
构建镜像成功后启动容器
shell
$ docker run -d --name etcd-local -p 2379:2379 quay.io/coreos/etcd:v3.5.24-arm64
2649c3fd931a70109b0e16bb79469b7509e53c54a5f3e31779109f99fe202edf
如果是在mac平台会遇到以下错误
shell
$ docker logs 2649c3fd931a70109b0e16bb79469b7509e53c54a5f3e31779109f99fe202edf
exec /usr/local/bin/etcd: exec format error
原因是etcd在shell中是以当前平台为准构建的, 因此在shell中需要强制改为linux

修改后重新构建镜像
shell
$ bash ./scripts/build-docker.sh v3.5.24
$ docker rm -f etcd-local
$ docker run -d --name etcd-local -p 2379:2379 quay.io/coreos/etcd:v3.5.24-arm64
2649c3fd931a70109b0e16bb79469b7509e53c54a5f3e31779109f99fe202edf
安装etcdctl后
shell
$ etcdctl put foo bar
OK
$ etcdctl get foo
foo
bar