From 6a95204f66a05d744f310bf9b76b6389f3eea3b5 Mon Sep 17 00:00:00 2001 From: wandoubaba Date: Fri, 13 Oct 2023 18:09:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=B6=E4=BD=9CPHP8.1=E7=89=88=E7=9A=84worke?= =?UTF-8?q?rman=E9=95=9C=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vuepress/config.js | 2 + docs/php/docker81.md | 143 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 docs/php/docker81.md diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index e740160..83aaca7 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -53,6 +53,7 @@ module.exports = { '/php/': [ '../', '', + 'docker81', 'nginx', 'openresty', 'php82' @@ -76,6 +77,7 @@ module.exports = { collapsable: false, // 可选的, 默认值是 true, sidebarDepth: 1, // 可选的, 默认值是 1 children: [ + '/php/docker81', '/php/nginx', '/php/openresty', '/php/php82' diff --git a/docs/php/docker81.md b/docs/php/docker81.md new file mode 100644 index 0000000..ee25cac --- /dev/null +++ b/docs/php/docker81.md @@ -0,0 +1,143 @@ +# 制作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 + 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 +``` + +### 安装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');" +sudo 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 +``` + +### 发布镜像 + +可以参照阿里云的容器镜像服务中的文档,把本地镜像发布到公网上,便于在其他主机中使用。