4.4 KiB
4.4 KiB
制作PHP8.1版的workerman环境镜像
说明
用本文方法制作的镜像不是跨平台的,也就是说在amd64平台制作的镜像只适用于amd64平台,在arm64平台制作的镜像则只适用于arm64平台。
拉基础镜像
docker pull php:8.1-cli-bullseye
启动容器
docker run -itd --net=host --name=workerman php:8.1-cli-bullseye
php:8.1-cli-bullseye是基于debian:bullseye制作的
替换国内源(可选)
保存一个sources.list
文件
tee sources.list <<-'EOF'
deb http://repo.huaweicloud.com/debian/ bullseye main non-free contrib
deb-src http://repo.huaweicloud.com/debian/ bullseye main non-free contrib
deb http://repo.huaweicloud.com/debian/ bullseye-updates main non-free contrib
deb-src http://repo.huaweicloud.com/debian/ bullseye-updates main non-free contrib
deb http://repo.huaweicloud.com/debian/ bullseye-proposed-updates main non-free contrib
deb-src http://repo.huaweicloud.com/debian/ bullseye-proposed-updates main non-free contrib
deb http://repo.huaweicloud.com/debian/ bullseye-backports main non-free contrib
deb-src http://repo.huaweicloud.com/debian/ bullseye-backports main non-free contrib
deb http://repo.huaweicloud.com/debian-security bullseye-security/updates main non-free contrib
deb-src http://repo.huaweicloud.com/debian-security bullseye-security/updates main non-free contrib
EOF
把文件保存到容器中替换原来的源
docker cp sources.list workerman:/etc/apt/
进入容器
docker exec -it workerman bash
制作环境
先安装一些依赖
apt-get update && apt-get install -y \
libfreetype6-dev libjpeg62-turbo-dev libpng-dev libwebp-dev zlib1g-dev \
libzip-dev zip \
libevent-dev \
lsb-release libpq-dev \
libgmp-dev \
libmagickwand-dev
安装扩展
# gd
docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg --with-webp
docker-php-ext-install -j$(nproc) gd
# exif
docker-php-ext-install exif
# opcache
docker-php-ext-install opcache
# pdo_mysql
docker-php-ext-install pdo_mysql
# mysqli
docker-php-ext-install mysqli
# zip
docker-php-ext-install zip
# pcntl
docker-php-ext-install pcntl
# fileinfo
docker-php-ext-install fileinfo
# redis (回答都用默认值)
pecl install redis
docker-php-ext-enable redis
# event (Include libevent OpenSSL support问题回答为no,其他默认)
docker-php-ext-install sockets
pecl install event
docker-php-ext-enable event
cat /usr/local/etc/php/conf.d/docker-php-ext-event.ini >> /usr/local/etc/php/conf.d/docker-php-ext-sockets.ini
mv /usr/local/etc/php/conf.d/docker-php-ext-sockets.ini /usr/local/etc/php/conf.d/docker-php-ext-event.ini
# 上面操作原因:event扩展依赖sockets扩展,所以要先安装sockets扩展,同时保证sockets扩展要在event之前被加载
# pgsql和pdo_pgsql
docker-php-ext-install -j$(nproc) pgsql pdo_pgsql
# mongodb
pecl install mongodb
docker-php-ext-enable mongodb
# gmp(一个开源的数学运算库,一些加密组件需要这个扩展)
docker-php-ext-install -j$(nproc) gmp
# imagick(一个可以读写多种格式图片的扩展)
pecl install imagick
docker-php-ext-enable imagick
安装composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer
创建一个应用目录
mkdir -p /app/service
生成镜像
如果还有容器内,先用exit
命令退出到宿主机。
用docker ps -a
命令可以看到对应的
docker commit workerman workerman:8.1
使用镜像
在宿主机中进行项目代码根目录,执行下面的命令
docker run -it -d --net=host -v ./:/app/service -w /app/service workerman:8.1
执行容器中的composer命令:
docker exec <容器ID> composer install
docker exec <容器ID> composer require xxxx
启动容器中的workerman服务:
docker exec <容器ID> php start.php start
发布镜像
可以把镜像发布到hub.docker.com上,也可以参照阿里云的容器镜像服务中的文档,把本地镜像发布到阿里云上,以便于在其他主机中使用。
推荐
本文作者已将制作好的环境镜像发布到hub.docker.com上,地址https://hub.docker.com/r/wandoubaba517/workerman
docker pull wandoubaba517/workerman:8.1
或者
docker pull wandoubaba517/workerman:8.1-arm64