前言:

这里的swoole系列泛指:swoft、hyperf、EasySwoole等框架。

当遇到很多同学在window环境进行swoole框架进行开发时,就卡在环境搭建的问题上。主要涉及在window环境下不能够像Linux、Mac操作系统安装swoole插件一样丝滑。只是对于Phper来说,在集成环境安装php-swoole是比较困难的!

目标:

为swoft框架构建docker镜像。同时也记录一下整个镜像发布过程。

环境:

swoole5.1.5+redis6.1+php8.1

实现过程:

先使用php8.1作为基础镜像,在里面安装有关插件等。

#配置环境变量
export APP_ENV=test
export TIMEZONE=Asia/Shanghai
export PHPREDIS_VERSION=6.1.0
export SWOOLE_VERSION=5.1.5

#安装linux基础工具插件
apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends \
    curl wget git zip unzip less vim procps lsof tcpdump htop openssl net-tools iputils-ping \
    libz-dev \
    libssl-dev \
    libnghttp2-dev \
    libpcre2-dev \
    libjpeg-dev \
    libpng-dev \
    libfreetype6-dev

#安装部署php相关插件
docker-php-ext-install bcmath gd pdo_mysql mbstring sockets zip sysvmsg sysvsem sysvshm

rm -rf /var/lib/apt/lists/*

#安装composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
composer self-update --clean-backups

#安装redis插件
wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tar.tgz
pecl install /tmp/redis.tar.tgz
rm -rf /tmp/redis.tar.tgz
docker-php-ext-enable redis

#安装swoole插件
wget https://github.com/swoole/swoole-src/archive/refs/tags/v${SWOOLE_VERSION}.tar.gz -O swoole.tar.gz
mkdir -p swoole
tar -xf swoole.tar.gz -C swoole --strip-components=1
rm swoole.tar.gz
cd swoole
phpize
./configure --enable-mysqlnd --enable-sockets --enable-openssl --enable-http2
make -j$(nproc)
make install
cd ..
rm -r swoole
docker-php-ext-enable swoole

apt-get clean
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false

#配置时区
cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime
echo "${TIMEZONE}" > /etc/timezone
echo "[Date]\ndate.timezone=${TIMEZONE}" > /usr/local/etc/php/conf.d/timezone.ini

接着提交当前镜像到docker hub成为线上镜像

#登录账户
docker login
#提交为镜像
docker commit 镜像hash 镜像名称(chenht12306/swoole_redis_php:s5.1-r6.1-p8.1)
#发布到docker hub
docker push 镜像名称(chenht12306/swoole_redis_php:s5.1-r6.1-p8.1)

镜像地址:https://hub.docker.com/repository/docker/chenht12306/swoole_redis_php/general

注意这里的镜像地址是事先构建好的!!!

FROM chenht12306/swoole_redis_php:s5.1-r6.1-p8.1

LABEL maintainer="Hunter <1261660791@qq.com>" version="1.0"

# --build-arg timezone=Asia/Shanghai
ARG timezone
# app env: prod pre test dev
ARG app_env=test
# default use www-data user
ARG work_user=www-data

# default APP_ENV = test
ENV APP_ENV=${app_env:-"test"} \
    TIMEZONE=${timezone:-"Asia/Shanghai"}

## Install composer deps
ADD . /var/www/swoft
RUN  cd /var/www/swoft \
    && composer install \
    && composer clearcache

WORKDIR /var/www/swoft
EXPOSE 18306 18307 18308

# ENTRYPOINT ["php", "/var/www/swoft/bin/swoft", "http:start"]
CMD ["php", "/var/www/swoft/bin/swoft", "http:start"]

执行docker命令:

#执行构建
docker build -t swoft/swoft .
#运行容器
docker run -it -d --name mySwoft swoft/swoft
#查看运行情况
docker logs swoft/swoft

结果:

访问http://localhost:18306/,成功访问。虽然官方有对应的Dcokerfile,但是会有版本问题,或者路径安装包路径不存在等等一系列问题。暂时自己构建个运行环境方便自己开发调试吧

更多推荐