制作PHP8.1版的workerman镜像

This commit is contained in:
wandoubaba 2023-10-13 18:09:14 +08:00
parent 90e4007758
commit 6a95204f66
2 changed files with 145 additions and 0 deletions

View File

@ -53,6 +53,7 @@ module.exports = {
'/php/': [ '/php/': [
'../', '../',
'', '',
'docker81',
'nginx', 'nginx',
'openresty', 'openresty',
'php82' 'php82'
@ -76,6 +77,7 @@ module.exports = {
collapsable: false, // 可选的, 默认值是 true, collapsable: false, // 可选的, 默认值是 true,
sidebarDepth: 1, // 可选的, 默认值是 1 sidebarDepth: 1, // 可选的, 默认值是 1
children: [ children: [
'/php/docker81',
'/php/nginx', '/php/nginx',
'/php/openresty', '/php/openresty',
'/php/php82' '/php/php82'

143
docs/php/docker81.md Normal file
View File

@ -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
```
### 发布镜像
可以参照阿里云的容器镜像服务中的文档,把本地镜像发布到公网上,便于在其他主机中使用。