如何使用github上的etcd构建docker镜像

下载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
相关推荐
金刚猿10 小时前
01_虚拟机中间件部署_root 用户安装 docker 容器,配置非root用户权限
docker·中间件·容器
JH_Kong10 小时前
解决 WSL 中 Docker 权限问题:从踩坑到完整修复
docker·容器
忆~遂愿11 小时前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
70asunflower14 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
春日见15 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设
xuhe215 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
星火s漫天16 小时前
第一篇: 使用Docker部署flask项目(Flask + DB 容器化)
数据库·docker·flask
MonkeyKing_sunyuhua18 小时前
docker compose up -d --build 完全使用新代码打包的方法
docker·容器·eureka
醇氧19 小时前
【docker】mysql 8 的健康检查(Health Check)
mysql·docker·容器
技术路上的探险家19 小时前
Ubuntu下Docker与NVIDIA Container Toolkit完整安装教程(含国内源适配)
linux·ubuntu·docker