webman Docker部署方案(php:8.1.28-cli-alpine)
webman Docker容器化部署方案
一. 方案优势
1. 方便 多平台的开发部署
2. 方便 修改 PHP 版本
3. 方便 修改 PHP 扩展
4. 使用 php:8.1.28-cli-alpine,打包体积更小
5. 使用阿里云源,在打包时,下载包更快更稳定
6. 在 Win10 及 CentOS7.9 上完美运行
二. Dockerfile
1. 基于 php:8.1.28-cli-alpine
# Use php:8.1.28-cli-alpine as the base image
FROM php:8.1.28-cli-alpine
# Change apk software source
RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories
# Update the system and install the required software and libraries
RUN apk update \
&& apk add \
curl openssl openssh openntpd \
ca-certificates libressl-dev \
libzip-dev zlib-dev libjpeg-turbo-dev libpng-dev libxml2-dev \
make g++ gcc libc-dev pkgconf file libtool autoconf automake \
libevent-dev
# Add PHP source
RUN apk update \
# pcntl
&& docker-php-ext-install pcntl \
# sockets
&& docker-php-ext-install sockets \
# event
&& printf "\n\n\n\n\nno\n\n" | pecl install event \
&& echo "extension=event.so" >> /usr/local/etc/php/conf.d/event.ini \
# pdo_mysql
&& docker-php-ext-install pdo_mysql \
# mysqli
&& docker-php-ext-install mysqli \
# redis
&& printf "\n\n\n\n\n\n" | pecl install redis \
&& echo "extension=redis.so" >> /usr/local/etc/php/conf.d/redis.ini \
# amqp
&& apk add --no-cache rabbitmq-c-dev \
&& printf "\n" | pecl install amqp \
&& echo "extension=amqp.so" >> /usr/local/etc/php/conf.d/amqp.ini \
# gd
&& docker-php-ext-install gd \
# bcmath
&& docker-php-ext-install bcmath \
# opcache
&& docker-php-ext-install opcache
# Copy the project
COPY ./ /app
WORKDIR /app
RUN chmod -R 777 /app/public /app/runtime
# Delete temp files
RUN rm -rf /var/lib/apt/lists/*
# Clean all
RUN apk cache clean
# Expose ports
EXPOSE 8787
CMD php /app/start.php start
2. 如何修改 PHP 版本:
修改 Dockerfile 中的 "php:8.1.28-cli-alpine" 换成你想要的版本。
3. Dockerfile 安装的扩展:
pcntl, sockets, event, pdo_mysql, mysqli, redis, amqp, gd, bcmath, opcache
4. 镜像打包后的所有 PHP 扩展:
amqp
bcmath
Core
ctype
curl
date
dom
event
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
SimpleXML
sockets
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
Zend OPcache
zlib
5. 注意事项:
(1)按需安装扩展,若教程中的扩展您不需要,请删除
(2)若有不满足项目需求的扩展,可在安装扩展处增加
(3)已按照官方教程安装 pcntl, event 等扩展
三. Docker容器化部署
1. Docker 构建镜像:
1. 将 Dockerfile 放入应用跟目录
2. 运行制作镜像(镜像名称按 开发者/应用:版本):
docker build --rm -t developer/app:1.0 .
2. Docker 运行命令:
1. 使用镜像创建容器:
docker run -d --restart=always --name=app -p 8787:8787 developer/app:1.0
参数说明:
-d:后台方式运行
--restart=always:自启动
--name=app:容器服务名称
-p 8787:8787:映射端口(将外部端口映射到容器内部服务端口)
developer/app:1.0:镜像名称
2. 容器服务操作
(1) 查看容器状态
docker ps -a
(2) 进入容器
docker exec -it app /bin/sh
(3) 重启服务
docker restart app
(4) 关闭服务
docker stop app
(5) 容器状态
docker stats
个评论
藏以尘