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