├── .env.example ├── .github └── workflows │ ├── build.sh │ ├── build73-dev.yml │ ├── build73-swoole.yml │ ├── build73-swow.yml │ ├── build74-dev.yml │ ├── build74-swoole.yml │ ├── build74-swow.yml │ └── push.sh ├── .gitignore ├── 7.4 └── alpine │ ├── base │ └── Dockerfile │ ├── dev │ └── Dockerfile │ ├── swoole │ └── Dockerfile │ └── swow │ └── Dockerfile ├── Dockerfile ├── README.md ├── build.sh ├── docker-compose.yml └── push.sh /.env.example: -------------------------------------------------------------------------------- 1 | SWOOLE_MAX_XV=4 2 | SWOOLE_MAX_YV=4 3 | SWOOLE_MAX_ZY=12 -------------------------------------------------------------------------------- /.github/workflows/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | docker-compose build alpine-$ENGINE 4 | 5 | # Login 6 | docker login docker.pkg.github.com -u hyperf -p $GITHUB_TOKEN 7 | docker login --username limingxinleo -p $DOCKERHUB_TOKEN 8 | 9 | # Push to Github 10 | docker tag hyperf/hyperf:$PHP_VERSION-alpine-v$ALPINE_VERSION-$ENGINE-$SW_VERSION docker.pkg.github.com/hyperf/hyperf-docker/hyperf:$PHP_VERSION-alpine-v$ALPINE_VERSION-$ENGINE-$SW_VERSION 11 | docker push docker.pkg.github.com/hyperf/hyperf-docker/hyperf:$PHP_VERSION-alpine-v$ALPINE_VERSION-$ENGINE-$SW_VERSION 12 | -------------------------------------------------------------------------------- /.github/workflows/build73-dev.yml: -------------------------------------------------------------------------------- 1 | name: Build Develop Image 2 | 3 | on: [push] 4 | env: 5 | COMPOSER_VERSION: "2.0.8" 6 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 7 | PHP_VERSION: '7.3' 8 | jobs: 9 | build: 10 | name: Build Alpine ${{ matrix.alpine-version }} 11 | runs-on: "${{ matrix.os }}" 12 | env: 13 | ALPINE_VERSION: "${{ matrix.alpine-version }}" 14 | strategy: 15 | matrix: 16 | # os: [ubuntu-latest, macos-latest, windows-latest] 17 | os: [ubuntu-latest] 18 | alpine-version: ['3.9', '3.10', '3.11'] 19 | max-parallel: 6 20 | steps: 21 | - name: Checkout code 22 | uses: actions/checkout@v2 23 | - name: Build 24 | run: docker-compose build alpine-dev 25 | - name: Login 26 | run: docker login --username limingxinleo -p ${{ secrets.DOCKERHUB_ACCESSTOKEN }} 27 | - name: Push 28 | run: docker push hyperf/hyperf:${PHP_VERSION}-alpine-v${{ matrix.alpine-version }}-dev 29 | 30 | -------------------------------------------------------------------------------- /.github/workflows/build73-swoole.yml: -------------------------------------------------------------------------------- 1 | name: Build Swoole for PHP73 2 | 3 | on: [push] 4 | env: 5 | ENGINE: 'swoole' 6 | SW_VERSION: 'v4.6.0' 7 | COMPOSER_VERSION: '2.0.8' 8 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 9 | DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_ACCESSTOKEN }} 10 | PHP_VERSION: '7.3' 11 | jobs: 12 | build: 13 | name: Build Alpine ${{ matrix.alpine-version }} 14 | runs-on: '${{ matrix.os }}' 15 | env: 16 | ALPINE_VERSION: '${{ matrix.alpine-version }}' 17 | strategy: 18 | matrix: 19 | # os: [ubuntu-latest, macos-latest, windows-latest] 20 | os: [ubuntu-latest] 21 | alpine-version: ['3.9', '3.10', '3.11'] 22 | max-parallel: 6 23 | steps: 24 | - name: Checkout code 25 | uses: actions/checkout@v2 26 | - name: Build 27 | run: ./.github/workflows/build.sh 28 | - name: Push Images to Docker Hub 29 | if: ${{ github.ref == 'refs/heads/build'}} 30 | run: ./.github/workflows/push.sh 31 | -------------------------------------------------------------------------------- /.github/workflows/build73-swow.yml: -------------------------------------------------------------------------------- 1 | name: Build Swow for PHP73 2 | 3 | on: [push] 4 | env: 5 | ENGINE: 'swow' 6 | SW_VERSION: 'develop' 7 | COMPOSER_VERSION: '2.0.8' 8 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 9 | DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_ACCESSTOKEN }} 10 | PHP_VERSION: '7.3' 11 | jobs: 12 | build: 13 | name: Build Alpine ${{ matrix.alpine-version }} 14 | runs-on: '${{ matrix.os }}' 15 | env: 16 | ALPINE_VERSION: '${{ matrix.alpine-version }}' 17 | strategy: 18 | matrix: 19 | # os: [ubuntu-latest, macos-latest, windows-latest] 20 | os: [ubuntu-latest] 21 | alpine-version: ['3.9', '3.10', '3.11'] 22 | max-parallel: 6 23 | steps: 24 | - name: Checkout code 25 | uses: actions/checkout@v2 26 | - name: Build 27 | run: ./.github/workflows/build.sh 28 | - name: Push Images to Docker Hub 29 | if: ${{ github.ref == 'refs/heads/build'}} 30 | run: ./.github/workflows/push.sh 31 | -------------------------------------------------------------------------------- /.github/workflows/build74-dev.yml: -------------------------------------------------------------------------------- 1 | name: Build Develop Image 2 | 3 | on: [push] 4 | env: 5 | COMPOSER_VERSION: "2.0.8" 6 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 7 | PHP_VERSION: '7.4' 8 | jobs: 9 | build: 10 | name: Build Alpine ${{ matrix.alpine-version }} 11 | runs-on: "${{ matrix.os }}" 12 | env: 13 | ALPINE_VERSION: "${{ matrix.alpine-version }}" 14 | strategy: 15 | matrix: 16 | # os: [ubuntu-latest, macos-latest, windows-latest] 17 | os: [ubuntu-latest] 18 | alpine-version: ['3.9', '3.10', '3.11', '3.12'] 19 | max-parallel: 6 20 | steps: 21 | - name: Checkout code 22 | uses: actions/checkout@v2 23 | - name: Build 24 | run: docker-compose build alpine-dev 25 | - name: Login 26 | run: docker login --username limingxinleo -p ${{ secrets.DOCKERHUB_ACCESSTOKEN }} 27 | - name: Push 28 | run: docker push hyperf/hyperf:${PHP_VERSION}-alpine-v${{ matrix.alpine-version }}-dev 29 | 30 | -------------------------------------------------------------------------------- /.github/workflows/build74-swoole.yml: -------------------------------------------------------------------------------- 1 | name: Build Swoole for PHP74 2 | 3 | on: [push] 4 | env: 5 | ENGINE: 'swoole' 6 | SW_VERSION: 'v4.6.0' 7 | COMPOSER_VERSION: '2.0.8' 8 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 9 | DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_ACCESSTOKEN }} 10 | PHP_VERSION: '7.4' 11 | jobs: 12 | build: 13 | name: Build Alpine ${{ matrix.alpine-version }} 14 | runs-on: '${{ matrix.os }}' 15 | env: 16 | ALPINE_VERSION: '${{ matrix.alpine-version }}' 17 | strategy: 18 | matrix: 19 | # os: [ubuntu-latest, macos-latest, windows-latest] 20 | os: [ubuntu-latest] 21 | alpine-version: ['3.9', '3.10', '3.11', '3.12'] 22 | max-parallel: 6 23 | steps: 24 | - name: Checkout code 25 | uses: actions/checkout@v2 26 | - name: Build 27 | run: ./.github/workflows/build.sh 28 | - name: Push Images to Docker Hub 29 | if: ${{ github.ref == 'refs/heads/build'}} 30 | run: ./.github/workflows/push.sh 31 | -------------------------------------------------------------------------------- /.github/workflows/build74-swow.yml: -------------------------------------------------------------------------------- 1 | name: Build Swow for PHP74 2 | 3 | on: [push] 4 | env: 5 | ENGINE: 'swow' 6 | SW_VERSION: 'develop' 7 | COMPOSER_VERSION: '2.0.8' 8 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 9 | DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_ACCESSTOKEN }} 10 | PHP_VERSION: '7.4' 11 | jobs: 12 | build: 13 | name: Build Alpine ${{ matrix.alpine-version }} 14 | runs-on: '${{ matrix.os }}' 15 | env: 16 | ALPINE_VERSION: '${{ matrix.alpine-version }}' 17 | strategy: 18 | matrix: 19 | # os: [ubuntu-latest, macos-latest, windows-latest] 20 | os: [ubuntu-latest] 21 | alpine-version: ['3.9', '3.10', '3.11', '3.12'] 22 | max-parallel: 6 23 | steps: 24 | - name: Checkout code 25 | uses: actions/checkout@v2 26 | - name: Build 27 | run: ./.github/workflows/build.sh 28 | - name: Push Images to Docker Hub 29 | if: ${{ github.ref == 'refs/heads/build'}} 30 | run: ./.github/workflows/push.sh 31 | -------------------------------------------------------------------------------- /.github/workflows/push.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Push to DockerHub 4 | docker tag hyperf/hyperf:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-${ENGINE}-${SW_VERSION} hyperf/hyperf:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-${ENGINE}-${SW_VERSION%\.*} 5 | docker tag hyperf/hyperf:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-${ENGINE}-${SW_VERSION} hyperf/hyperf:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-${ENGINE}-${SW_VERSION%%\.*} 6 | docker tag hyperf/hyperf:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-${ENGINE}-${SW_VERSION} hyperf/hyperf:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-${ENGINE} 7 | docker push hyperf/hyperf:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-${ENGINE}-${SW_VERSION} 8 | docker push hyperf/hyperf:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-${ENGINE}-${SW_VERSION%\.*} 9 | docker push hyperf/hyperf:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-${ENGINE}-${SW_VERSION%%\.*} 10 | docker push hyperf/hyperf:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-${ENGINE} 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | -------------------------------------------------------------------------------- /7.4/alpine/base/Dockerfile: -------------------------------------------------------------------------------- 1 | # hyperf/hyperf:7.4 2 | # 3 | # @link https://www.hyperf.io 4 | # @document https://doc.hyperf.io 5 | # @contact group@hyperf.io 6 | # @license https://github.com/hyperf/hyperf/blob/master/LICENSE 7 | 8 | ARG ALPINE_VERSION 9 | 10 | FROM alpine:$ALPINE_VERSION 11 | 12 | LABEL maintainer="Hyperf Developers " version="1.0" license="MIT" 13 | 14 | ARG ALPINE_VERSION 15 | 16 | # trust this project public key to trust the packages. 17 | ADD https://dl.bintray.com/php-alpine/key/php-alpine.rsa.pub /etc/apk/keys/php-alpine.rsa.pub 18 | 19 | ## 20 | # ---------- building ---------- 21 | ## 22 | RUN set -ex \ 23 | # change apk source repo 24 | && echo "https://dl.bintray.com/php-alpine/v$ALPINE_VERSION/php-7.4" >> /etc/apk/repositories \ 25 | && echo "@php https://dl.bintray.com/php-alpine/v$ALPINE_VERSION/php-7.4" >> /etc/apk/repositories \ 26 | && apk update \ 27 | && apk add --no-cache \ 28 | # Install base packages ('ca-certificates' will install 'nghttp2-libs') 29 | ca-certificates \ 30 | curl \ 31 | wget \ 32 | tar \ 33 | xz \ 34 | libressl \ 35 | tzdata \ 36 | pcre \ 37 | php7 \ 38 | php7-bcmath \ 39 | php7-curl \ 40 | php7-ctype \ 41 | php7-dom \ 42 | php7-gd \ 43 | php7-iconv \ 44 | php7-json \ 45 | php7-mbstring \ 46 | php7-mysqlnd \ 47 | php7-openssl \ 48 | php7-pdo \ 49 | php7-pdo_mysql \ 50 | php7-pdo_sqlite \ 51 | php7-phar \ 52 | php7-posix \ 53 | php7-redis \ 54 | php7-sockets \ 55 | php7-sodium \ 56 | php7-sysvshm \ 57 | php7-sysvmsg \ 58 | php7-sysvsem \ 59 | php7-zip \ 60 | php7-zlib \ 61 | php7-xml \ 62 | php7-xmlreader \ 63 | php7-pcntl \ 64 | php7-opcache \ 65 | && ln -sf /usr/bin/php7 /usr/bin/php \ 66 | && apk del --purge *-dev \ 67 | && rm -rf /var/cache/apk/* /tmp/* /usr/share/man /usr/share/php7 \ 68 | && php -v \ 69 | && php -m \ 70 | && echo -e "\033[42;37m Build Completed :).\033[0m\n" 71 | -------------------------------------------------------------------------------- /7.4/alpine/dev/Dockerfile: -------------------------------------------------------------------------------- 1 | # hyperf/hyperf:7.4 2 | # 3 | # @link https://www.hyperf.io 4 | # @document https://doc.hyperf.io 5 | # @contact group@hyperf.io 6 | # @license https://github.com/hyperf/hyperf/blob/master/LICENSE 7 | 8 | ARG ALPINE_VERSION 9 | 10 | FROM mochat/mochat:7.4-alpine-v${ALPINE_VERSION}-base 11 | 12 | LABEL maintainer="Hyperf Developers " version="1.0" license="MIT" 13 | 14 | ARG COMPOSER_VERSION 15 | 16 | ENV COMPOSER_VERSION=${COMPOSER_VERSION:-"2.0.2"} 17 | 18 | ## 19 | # ---------- env settings ---------- 20 | ## 21 | ENV PHPIZE_DEPS="autoconf dpkg-dev dpkg file g++ gcc libc-dev make php7-dev php7-pear pkgconf re2c pcre-dev pcre2-dev zlib-dev libtool automake" 22 | 23 | # update 24 | RUN set -ex \ 25 | && apk update \ 26 | && apk add --no-cache libstdc++ openssl git bash \ 27 | && apk add --no-cache $PHPIZE_DEPS libaio-dev openssl-dev \ 28 | && ln -s /usr/bin/phpize7 /usr/local/bin/phpize \ 29 | && ln -s /usr/bin/php-config7 /usr/local/bin/php-config \ 30 | # install composer 31 | && wget -nv -O /usr/local/bin/composer https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar \ 32 | && chmod u+x /usr/local/bin/composer \ 33 | # php info 34 | && php -v \ 35 | && php -m \ 36 | # ---------- clear works ---------- 37 | && rm -rf /var/cache/apk/* /tmp/* /usr/share/man \ 38 | && echo -e "\033[42;37m Build Completed :).\033[0m\n" 39 | -------------------------------------------------------------------------------- /7.4/alpine/swoole/Dockerfile: -------------------------------------------------------------------------------- 1 | # hyperf/hyperf:7.4 2 | # 3 | # @link https://www.hyperf.io 4 | # @document https://doc.hyperf.io 5 | # @contact group@hyperf.io 6 | # @license https://github.com/hyperf/hyperf/blob/master/LICENSE 7 | 8 | ARG ALPINE_VERSION 9 | 10 | FROM mochat/mochat:7.4-alpine-v${ALPINE_VERSION}-base 11 | 12 | LABEL maintainer="Hyperf Developers " version="1.0" license="MIT" 13 | 14 | ARG SW_VERSION 15 | ARG COMPOSER_VERSION 16 | 17 | ## 18 | # ---------- env settings ---------- 19 | ## 20 | ENV SW_VERSION=${SW_VERSION:-"v4.5.11"} \ 21 | COMPOSER_VERSION=${COMPOSER_VERSION:-"2.0.2"} \ 22 | # install and remove building packages 23 | PHPIZE_DEPS="autoconf dpkg-dev dpkg file g++ gcc libc-dev make php7-dev php7-pear pkgconf re2c pcre-dev pcre2-dev zlib-dev libtool automake" 24 | 25 | # update 26 | RUN set -ex \ 27 | && apk update \ 28 | # for swoole extension libaio linux-headers 29 | && apk add --no-cache libstdc++ openssl git bash \ 30 | && apk add --no-cache --virtual .build-deps $PHPIZE_DEPS libaio-dev openssl-dev curl-dev \ 31 | # download 32 | && cd /tmp \ 33 | && curl -SL "https://github.com/swoole/swoole-src/archive/${SW_VERSION}.tar.gz" -o swoole.tar.gz \ 34 | && ls -alh \ 35 | # php extension:swoole 36 | && cd /tmp \ 37 | && mkdir -p swoole \ 38 | && tar -xf swoole.tar.gz -C swoole --strip-components=1 \ 39 | && ln -s /usr/bin/phpize7 /usr/local/bin/phpize \ 40 | && ln -s /usr/bin/php-config7 /usr/local/bin/php-config \ 41 | && ( \ 42 | cd swoole \ 43 | && phpize \ 44 | && ./configure --enable-openssl --enable-http2 --enable-swoole-curl --enable-swoole-json \ 45 | && make -s -j$(nproc) && make install \ 46 | ) \ 47 | && echo "memory_limit=1G" > /etc/php7/conf.d/00_default.ini \ 48 | && echo "opcache.enable_cli = 'On'" >> /etc/php7/conf.d/00_opcache.ini \ 49 | && echo "extension=swoole.so" > /etc/php7/conf.d/50_swoole.ini \ 50 | && echo "swoole.use_shortname = 'Off'" >> /etc/php7/conf.d/50_swoole.ini \ 51 | # install composer 52 | && wget -nv -O /usr/local/bin/composer https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar \ 53 | && chmod u+x /usr/local/bin/composer \ 54 | # php info 55 | && php -v \ 56 | && php -m \ 57 | && php --ri swoole \ 58 | && composer \ 59 | # ---------- clear works ---------- 60 | && apk del .build-deps \ 61 | && rm -rf /var/cache/apk/* /tmp/* /usr/share/man /usr/local/bin/php* \ 62 | && echo -e "\033[42;37m Build Completed :).\033[0m\n" 63 | -------------------------------------------------------------------------------- /7.4/alpine/swow/Dockerfile: -------------------------------------------------------------------------------- 1 | # hyperf/hyperf:7.4 2 | # 3 | # @link https://www.hyperf.io 4 | # @document https://doc.hyperf.io 5 | # @contact group@hyperf.io 6 | # @license https://github.com/hyperf/hyperf/blob/master/LICENSE 7 | 8 | ARG ALPINE_VERSION 9 | 10 | FROM mochat/mochat:7.4-alpine-v${ALPINE_VERSION}-base 11 | 12 | LABEL maintainer="Hyperf Developers " version="1.0" license="MIT" 13 | 14 | ARG SW_VERSION 15 | ARG COMPOSER_VERSION 16 | 17 | ## 18 | # ---------- env settings ---------- 19 | ## 20 | ENV SW_VERSION=${SW_VERSION:-"develop"} \ 21 | COMPOSER_VERSION=${COMPOSER_VERSION:-"2.0.2"} \ 22 | # install and remove building packages 23 | PHPIZE_DEPS="autoconf automake gcc g++ make php7-dev php7-pear file re2c" 24 | 25 | # update 26 | RUN set -ex \ 27 | && apk update \ 28 | # for swow extension libaio linux-headers 29 | && apk add --no-cache openssl git bash \ 30 | && apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \ 31 | # download 32 | && cd /tmp \ 33 | && curl -SL "https://github.com/swow/swow/archive/${SW_VERSION}.tar.gz" -o swow.tar.gz \ 34 | && ls -alh \ 35 | # php extension:swow 36 | && cd /tmp \ 37 | && mkdir -p swow \ 38 | && tar -xf swow.tar.gz -C swow --strip-components=1 \ 39 | && ln -s /usr/bin/phpize7 /usr/local/bin/phpize \ 40 | && ln -s /usr/bin/php-config7 /usr/local/bin/php-config \ 41 | && ( \ 42 | cd swow/ext \ 43 | && phpize \ 44 | && ./configure \ 45 | && make -s -j$(nproc) && make install \ 46 | ) \ 47 | && echo "memory_limit=1G" > /etc/php7/conf.d/00_default.ini \ 48 | && echo "opcache.enable_cli = 'On'" >> /etc/php7/conf.d/00_opcache.ini \ 49 | && echo "extension=swow.so" > /etc/php7/conf.d/50_swow.ini \ 50 | # install composer 51 | && wget -nv -O /usr/local/bin/composer https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar \ 52 | && chmod u+x /usr/local/bin/composer \ 53 | # php info 54 | && php -v \ 55 | && php -m \ 56 | && php --ri swow \ 57 | && composer \ 58 | # ---------- clear works ---------- 59 | && apk del .build-deps \ 60 | && rm -rf /var/cache/apk/* /tmp/* /usr/share/man /usr/local/bin/php* \ 61 | && echo -e "\033[42;37m Build Completed :).\033[0m\n" 62 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Default Dockerfile 2 | # 3 | # @link https://www.hyperf.io 4 | # @document https://doc.hyperf.io 5 | # @contact group@hyperf.io 6 | # @license https://github.com/hyperf-cloud/hyperf/blob/master/LICENSE 7 | 8 | FROM mochat/mochat:7.4-alpine-v3.11-swoole 9 | LABEL maintainer="Hyperf Developers " version="1.0" license="MIT" 10 | 11 | ## 12 | # ---------- env settings ---------- 13 | ## 14 | # --build-arg timezone=Asia/Shanghai 15 | ARG timezone 16 | 17 | ENV TIMEZONE=${timezone:-"Asia/Shanghai"} \ 18 | COMPOSER_VERSION=1.8.6 \ 19 | APP_ENV=prod 20 | 21 | # update 22 | RUN set -ex \ 23 | && apk update \ 24 | # install composer 25 | && wget -nv -O /usr/local/bin/composer https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar \ 26 | && chmod u+x /usr/local/bin/composer \ 27 | # show php version and extensions 28 | && php -v \ 29 | && php -m \ 30 | # ---------- some config ---------- 31 | && cd /etc/php7 \ 32 | # - config PHP 33 | && { \ 34 | echo "upload_max_filesize=100M"; \ 35 | echo "post_max_size=108M"; \ 36 | echo "memory_limit=1024M"; \ 37 | echo "date.timezone=${TIMEZONE}"; \ 38 | } | tee conf.d/99-overrides.ini \ 39 | # - config timezone 40 | && ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \ 41 | && echo "${TIMEZONE}" > /etc/timezone \ 42 | # ---------- clear works ---------- 43 | && rm -rf /var/cache/apk/* /tmp/* /usr/share/man \ 44 | && echo -e "\033[42;37m Build Completed :).\033[0m\n" 45 | 46 | COPY . /opt/www 47 | 48 | WORKDIR /opt/www 49 | 50 | RUN composer install --no-dev -o 51 | 52 | EXPOSE 9501 53 | 54 | ENTRYPOINT ["php", "/opt/www/bin/hyperf.php", "start"] 55 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 支持的 tags 以及相应的 Dockerfile 地址 2 | 3 | tag 格式: 4 | 5 | - 7.4: php 版本, 目前仅支持 7.4 6 | - alpine: base 镜像, 支持 alpine 7 | - v3.11: alpine 版本, 支持 3.9 and 3.10 and 3.11 and 3.12 8 | - swoole: 支持 base/dev/swoole/swow 9 | - v4.5.11: swoole/swow 版本 10 | 11 | support: 12 | 13 | - [`7.4-alpine-v3.9-swoole-*`, `7.4-alpine-v3.9-swoole`](https://github.com/mochat-cloud/mochat-docker/blob/master/7.4/alpine/swoole/Dockerfile) 14 | - [`7.4-alpine-v3.9-swow-*`, `7.4-alpine-v3.9-swow`](https://github.com/mochat-cloud/mochat-docker/blob/master/7.4/alpine/swow/Dockerfile) 15 | - [`7.4-alpine-v3.9-base`](https://github.com/mochat-cloud/mochat-docker/blob/master/7.4/alpine/base/Dockerfile) 16 | 17 | # 参考文档 18 | 19 | - [hyperf](https://github.com/hyperf) 20 | - [hyperf doc](https://doc.hyperf.io) 21 | 22 | # 如何使用此镜像 23 | 24 | 将 [Dockerfile](https://github.com/mochat-cloud/mochat-docker/blob/master/Dockerfile) 放到你的项目中. 25 | 26 | # 如何build以及推送镜像 27 | 28 | ```bash 29 | # Build base image 30 | ./build.sh build 31 | 32 | # Check images 33 | ./build.sh publish --check 34 | 35 | # Push images 36 | ./build.sh publish 37 | ``` 38 | 39 | # 更多演示 40 | 41 | - kafka 42 | 43 | ```dockerfile 44 | RUN apk add --no-cache librdkafka-dev \ 45 | && pecl install rdkafka \ 46 | && echo "extension=rdkafka.so" > /etc/php7/conf.d/rdkafka.ini 47 | ``` 48 | 49 | - mongodb 50 | 51 | ```dockerfile 52 | RUN apk add --no-cache openssl-dev \ 53 | && pecl install mongodb \ 54 | && echo "extension=mongodb.so" > /etc/php7/conf.d/mongodb.ini 55 | ``` 56 | 57 | - wxwork_finance_sdk 58 | 59 | ```dockerfile 60 | ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2 \ 61 | && cd /tmp \ 62 | && curl -SL "https://github.com/oh-stone/wework-chatdata-sdk/archive/v0.1.0.tar.gz" -o wxwork_finance_sdk.tar.gz \ 63 | && mkdir -p wxwork_finance_sdk \ 64 | && tar -xf wxwork_finance_sdk.tar.gz -C wxwork_finance_sdk --strip-components=1 \ 65 | && ( \ 66 | cd wxwork_finance_sdk/php7-wxwork-finance-sdk \ 67 | && phpize \ 68 | && ./configure --with-wxwork-finance-sdk=/tmp/wxwork_finance_sdk/C_sdk \ 69 | && make && make install \ 70 | ) \ 71 | && cp /tmp/wxwork_finance_sdk/C_sdk/libWeWorkFinanceSdk_C.so /usr/local/lib/libWeWorkFinanceSdk_C.so \ 72 | && echo "extension=wxwork_finance_sdk.so" > /etc/php7/conf.d/50_wxwork_finance_sdk.ini \ 73 | && php --ri wxwork_finance_sdk 74 | ``` 75 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | # source environment variables for the time being. 6 | source ./.env 7 | 8 | # determine swoole version to build. 9 | TASK=${1} 10 | CHECK=${!#} 11 | 12 | function check_or_push() { 13 | TAG=${1} 14 | if [[ ${CHECK} == "--check" ]]; then 15 | echo "Checking $TAG ..." 16 | version=`docker run mochat/mochat:$TAG php -v` 17 | echo $version | grep -Eo "PHP \d+\.\d+\.\d+" 18 | swoole=`docker run mochat/mochat:$TAG php --ri swoole` && echo $swoole | grep -Eo "Version => \d+\.\d+\.\d+" || echo "No Swoole." 19 | fi 20 | 21 | if [[ ${CHECK} != "--check" ]]; then 22 | echo "Publishing "$TAG" ..." 23 | # Push origin image 24 | docker push mochat/mochat:${TAG} 25 | fi 26 | 27 | echo -e "\n" 28 | } 29 | 30 | # build base image 31 | if [[ ${TASK} == "build" ]]; then 32 | export PHP_VERSION=7.4 && export ALPINE_VERSION=3.9 && docker-compose build alpine-base 33 | export PHP_VERSION=7.4 && export ALPINE_VERSION=3.10 && docker-compose build alpine-base 34 | export PHP_VERSION=7.4 && export ALPINE_VERSION=3.11 && docker-compose build alpine-base 35 | export PHP_VERSION=7.4 && export ALPINE_VERSION=3.12 && docker-compose build alpine-base 36 | fi 37 | 38 | if [[ ${TASK} == "publish" ]]; then 39 | # Push base image 40 | TAGS="7.4-alpine-v3.9-base 7.4-alpine-v3.10-base 7.4-alpine-v3.11-base 7.4-alpine-v3.12-base" 41 | for TAG in ${TAGS}; do 42 | check_or_push $TAG 43 | done 44 | fi 45 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | # syntax version. 2 | version: "3.7" 3 | 4 | # services list. 5 | services: 6 | # base image 7 | alpine-base: 8 | image: "mochat/mochat:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-base" 9 | build: 10 | context: "${PHP_VERSION}/alpine/base" 11 | args: 12 | ALPINE_VERSION: ${ALPINE_VERSION} 13 | 14 | # swoole image 15 | alpine-swoole: 16 | image: "mochat/mochat:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-swoole-${SW_VERSION}" 17 | build: 18 | context: "${PHP_VERSION}/alpine/swoole" 19 | args: 20 | ALPINE_VERSION: ${ALPINE_VERSION} 21 | SW_VERSION: ${SW_VERSION} 22 | COMPOSER_VERSION: ${COMPOSER_VERSION} 23 | 24 | # swow image 25 | alpine-swow: 26 | image: "mochat/mochat:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-swow-${SW_VERSION}" 27 | build: 28 | context: "${PHP_VERSION}/alpine/swow" 29 | args: 30 | ALPINE_VERSION: ${ALPINE_VERSION} 31 | SW_VERSION: ${SW_VERSION} 32 | COMPOSER_VERSION: ${COMPOSER_VERSION} 33 | 34 | # dev image 35 | alpine-dev: 36 | image: "mochat/mochat:${PHP_VERSION}-alpine-v${ALPINE_VERSION}-dev" 37 | build: 38 | context: "${PHP_VERSION}/alpine/dev" 39 | args: 40 | ALPINE_VERSION: ${ALPINE_VERSION} 41 | COMPOSER_VERSION: ${COMPOSER_VERSION} 42 | -------------------------------------------------------------------------------- /push.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | export ENGINE=${1} 6 | export VERSION=${2} 7 | export CHECK=${!#} 8 | export TAGS="7.4-alpine-v3.9 7.4-alpine-v3.10 7.4-alpine-v3.11 7.4-alpine-v3.12" 9 | 10 | function pull() { 11 | for TAG in ${TAGS}; do 12 | docker pull docker.pkg.github.com/hyperf/mochat-cloud/mochat-docker/hyperf:"${TAG}-${ENGINE}-${VERSION}" 13 | docker tag docker.pkg.github.com/hyperf/mochat-cloud/mochat-docker/hyperf:"${TAG}-${ENGINE}-${VERSION}" hyperf/hyperf:"${TAG}-${ENGINE}-${VERSION}" 14 | done 15 | } 16 | 17 | function push() { 18 | for TAG in ${TAGS}; do 19 | PV=${VERSION%\.*} 20 | PPV=${VERSION%%\.*} 21 | 22 | docker tag mochat/mochat:"${TAG}-${ENGINE}-${VERSION}" mochat/mochat:"${TAG}-${ENGINE}-${PV}" 23 | docker tag mochat/mochat:"${TAG}-${ENGINE}-${VERSION}" mochat/mochat:"${TAG}-${ENGINE}-${PPV}" 24 | docker tag mochat/mochat:"${TAG}-${ENGINE}-${VERSION}" mochat/mochat:"${TAG}-${ENGINE}" 25 | if [[ ${CHECK} != "--check" ]]; then 26 | echo "Publishing "${TAG}-${ENGINE}" ..." 27 | docker push mochat/mochat:"${TAG}-${ENGINE}" 28 | docker push mochat/mochat:"${TAG}-${ENGINE}-${PV}" 29 | docker push mochat/mochat:"${TAG}-${ENGINE}-${PPV}" 30 | docker push mochat/mochat:"${TAG}-${ENGINE}-${VERSION}" 31 | br 32 | fi 33 | done 34 | } 35 | 36 | function check() { 37 | if [[ ${CHECK} == "--check" ]]; then 38 | for TAG in ${TAGS}; do 39 | REALTAG=${TAG}-${ENGINE}-${VERSION} 40 | echo "Checking ${REALTAG}" 41 | version=`docker run mochat/mochat:$REALTAG php -v` 42 | echo $version | grep -Eo "PHP \d+\.\d+\.\d+" 43 | echo "Swoole: " 44 | swoole=`docker run mochat/mochat:$REALTAG php --ri swoole` && echo $swoole | grep -Eo "Version => \d+\.\d+\.\d+" || echo "No Swoole." 45 | echo "Swow: " 46 | swow=`docker run mochat/mochat:$REALTAG php --ri swow` && echo $swow | grep -Eo "Version => \d+\.\d+\.\d+" || echo "No Swow." 47 | br 48 | done 49 | fi 50 | } 51 | 52 | function br() { 53 | echo -e "\n" 54 | } 55 | 56 | if [[ ${ENGINE} != "" && ${VERSION} != "" ]]; then 57 | pull 58 | br 59 | check 60 | br 61 | push 62 | fi 63 | 64 | --------------------------------------------------------------------------------