webman Docker部署方案(php:8.1.28-cli-alpine)

Caesar-Tang

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
322 1 8
1个评论

wocall

藏以尘

  • 暂无评论

Caesar-Tang

750
积分
0
获赞数
0
粉丝数
2022-03-28 加入
×
🔝