# 制作PHP8.1版的workerman环境镜像 ## 拉基础镜像 ```sh docker pull php:8.1-cli ``` ## 启动容器 ```sh docker run -itd --net=host --name=workerman php:8.1-cli ``` > php:8.1-cli是基于debian:bullseye制作的 ### 替换国内源(可选) 保存一个`sources.list`文件 ```sh 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 ``` 把文件保存到容器中替换原来的源 ```sh docker cp sources.list workerman:/etc/apt/ ``` ## 进入容器 ```sh docker exec -it workerman bash ``` ## 制作环境 先安装一些依赖 ```sh apt-get update && apt-get install -y \ libfreetype6-dev libjpeg62-turbo-dev libpng-dev libwebp-dev zlib1g-dev \ libzip-dev zip \ libevent-dev ``` ### 安装扩展 ```sh # 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 apt install -y lsb-release libpq-dev docker-php-ext-install -j$(nproc) pgsql pdo_pgsql # mongodb pecl install mongodb docker-php-ext-enable mongodb # gmp(一个开源的数学运算库,一些加密组件需要这个扩展) apt-get install libgmp-dev docker-php-ext-install -j$(nproc) gmp ``` ### 安装composer ```sh php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" mv composer.phar /usr/local/bin/composer ``` ### 创建一个应用目录 ```sh mkdir -p /app/service ``` ### 生成镜像 如果还有容器内,先用`exit`命令退出到宿主机。 用`docker ps -a`命令可以看到对应的 ```sh docker commit workerman workerman:8.1 ``` ### 使用镜像 在宿主机中进行项目代码根目录,执行下面的命令 ```sh docker run -it -d --net=host -v ./:/app/service -w /app/service workerman:8.1 ``` 执行容器中的composer命令: ```sh docker exec <容器ID> composer install docker exec <容器ID> composer require xxxx ``` 启动容器中的workerman服务: ```sh docker exec <容器ID> php start.php start ``` ### 发布镜像 可以把镜像发布到hub.docker.com上,也可以参照阿里云的容器镜像服务中的文档,把本地镜像发布到阿里云上,以便于在其他主机中使用。 ## 推荐 本文作者已将制作好的环境镜像发布到hub.docker.com上,地址 ```sh docker pull wandoubaba517/workerman:8.1 ```