knowledge/docs/php/docker81.md

158 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 制作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上地址<https://hub.docker.com/r/wandoubaba517/workerman>
```sh
docker pull wandoubaba517/workerman:8.1
```