Hyperf 官方镜像
hypref 默认提供的 Dockerfile 没有 ARM 架构的镜像,在服务器跑的过程中出现了错误。折腾了半天记录一下如何修改及编译适用于自己的 Hyperf 项目的镜像。
https://github.com/hyperf/hyperf-docker
直接把 hyperf-docker 的镜像构建源码拿到,比如用到 php7.4,只需要将其中的 /7.4/alpine/swoole/
目录下的 Dockerfile 拿出来编译就行。当然这个镜像依赖于 base 镜像,base 镜像也需要 arm 架构的。
你也得连 base 镜像一起编译,位置位于 /7.4/alpine/base/
。
那么还需要简单做一下修改,将 /7.4/alpine/swoole/Dockerfile
其中的 FROM 源修改为自己 dockerhub 的。不修改也是可以的,但不好将包导出移植,只能本机用。
修改 Dockerfile
将其中的:FROM hyperf/hyperf:7.4-alpine-v${ALPINE_VERSION}-base
修改为:FROM ellermister/hyperf:7.4-alpine-v${ALPINE_VERSION}-base
buildx 编译
使用 dockerx 编译并推送的 docker hub,不需要推送就移除 --push
参数就行
export PHP_VERSION=7.4 && export ALPINE_VERSION=3.11 && export SW_VERSION=v4.8.12
docker buildx build \
-t ellermister/hyperf:$PHP_VERSION-alpine-v$ALPINE_VERSION-base \
--platform=linux/arm64,linux/amd64 \
--build-arg PHP_VERSION=$PHP_VERSION \
--build-arg ALPINE_VERSION=$ALPINE_VERSION \
--build-arg SW_VERSION=$SW_VERSION \
-f ./7.4/alpine/base/Dockerfile . --push
docker buildx build \
-t ellermister/hyperf:$PHP_VERSION-alpine-v$ALPINE_VERSION-swoole-$SW_VERSION \
--platform=linux/arm64,linux/amd64 \
--build-arg PHP_VERSION=$PHP_VERSION \
--build-arg ALPINE_VERSION=$ALPINE_VERSION \
--build-arg SW_VERSION=$SW_VERSION \
-f ./7.4/alpine/swoole/Dockerfile . --push
编译报错
=> ERROR [3/3] RUN set -ex && echo "https://alpine-apk-repository.knowyourself.cc/v3.11/php-7.4" >> /etc/apk/repositories && echo "@php https://alpine-apk-reposi 5.0s
------
> [3/3] RUN set -ex && echo "https://alpine-apk-repository.knowyourself.cc/v3.11/php-7.4" >> /etc/apk/repositories && echo "@php https://alpine-apk-repository.knowyourself.cc/v3.11/php-7.4" >> /etc/apk/repositories && apk update && apk add --no-cache ca-certificates curl wget tar xz libressl tzdata pcre php7 php7-bcmath php7-curl php7-ctype php7-dom php7-gd php7-iconv php7-json php7-mbstring php7-mysqlnd php7-openssl php7-pdo php7-pdo_mysql php7-pdo_sqlite php7-phar php7-posix php7-redis php7-sockets php7-sodium php7-sysvshm php7-sysvmsg php7-sysvsem php7-zip php7-zlib php7-xml php7-xmlreader php7-pcntl php7-opcache && ln -sf /usr/bin/php7 /usr/bin/php && apk del --purge *-dev && rm -rf /var/cache/apk/* /tmp/* /usr/share/man /usr/share/php7 && php -v && php -m && echo -e "\033[42;37m Build Completed :).\033[0m\n":
#0 0.197 + echo https://alpine-apk-repository.knowyourself.cc/v3.11/php-7.4
#0 0.198 + echo '@php https://alpine-apk-repository.knowyourself.cc/v3.11/php-7.4'
#0 0.198 + apk update
#0 0.232 fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/aarch64/APKINDEX.tar.gz
#0 1.455 fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/aarch64/APKINDEX.tar.gz
#0 2.016 fetch https://alpine-apk-repository.knowyourself.cc/v3.11/php-7.4/aarch64/APKINDEX.tar.gz
#0 4.896 ERROR: https://alpine-apk-repository.knowyourself.cc/v3.11/php-7.4: No such file or directory
#0 4.897 WARNING: Ignoring https://alpine-apk-repository.knowyourself.cc/v3.11/php-7.4: No such file or directory
#0 4.965 v3.11.13-12-g2cfa91a2b4 [http://dl-cdn.alpinelinux.org/alpine/v3.11/main]
#0 4.965 v3.11.11-124-gf2729ece5a [http://dl-cdn.alpinelinux.org/alpine/v3.11/community]
#0 4.965 1 errors; 11165 distinct packages available
如果你编译遇到了如上错误,是因为默认提供的 alpine 的镜像源找不到了,你可以将其更换为 php.hernandev.com
。
对应参考 github 的项目 https://github.com/codecasts/php-alpine
/7.4/alpine/base/Dockerfile
替换如下:
ADD https://php.hernandev.com/key/php-alpine.rsa.pub /etc/apk/keys/php-alpine.rsa.pub
##
# ---------- building ----------
##
RUN set -ex \
# change apk source repo
&& echo "https://php.hernandev.com/v$ALPINE_VERSION/php-7.4" >> /etc/apk/repositories \
&& echo "@php https://php.hernandev.com/v$ALPINE_VERSION/php-7.4" >> /etc/apk/repositories \
...
Swoole 官方镜像
还是一种方案,就是直接使用 Swoole 官方提供的镜像,稍微改改就行了。
https://hub.docker.com/r/phpswoole/swoole/tags
swoole 提供了大量的不同架构不同版本的镜像,我也是折腾完才想起来 swoole 还有镜像。
Comments