knowledge/docs/php/docker81.md

4.3 KiB
Raw Blame History

制作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

安装扩展

# 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

安装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