docker的hyperf框架docker-compose一键安装
收藏一个hyperf框架的docker安装
几个重要的docker-compose文件,下载的 hyperf 文件(hyperf-skeleton-master.zip):https://github.com/hyperf/hyperf-skeleton


1. mysql文件夹:有数据库的初始数据init.sql
-- 创建数据库和用户 CREATE DATABASE IF NOT EXISTS hyperf CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建用户表示例 USE hyperf; CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(100) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_username (username), INDEX idx_email (email) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
2.变量配置文件
# 数据库配置 DB_DRIVER=mysql DB_HOST=hyperf-mysql DB_PORT=3306 DB_DATABASE=hyperf DB_USERNAME=hyperf DB_PASSWORD=123456 # Redis 配置 REDIS_HOST=hyperf-redis REDIS_PORT=6379 REDIS_AUTH= REDIS_DB=0 # Hyperf 应用配置 APP_NAME=Hyperf APP_ENV=dev APP_KEY=
3.Dockerfile文件(hyperf镜像文件,可以使用 docker build -t hyperf-app . 验证创建镜像,它会自动用当前目录的Dockerfile创建镜像)
# Default Dockerfile # # @link https://www.hyperf.io # @document https://hyperf.wiki # @contact group@hyperf.io # @license https://github.com/hyperf/hyperf/blob/master/LICENSE FROM hyperf/hyperf:8.3-alpine-v3.19-swoole LABEL maintainer="Hyperf Developers <group@hyperf.io>" version="1.0" license="MIT" app.name="Hyperf" ## # ---------- env settings ---------- ## # --build-arg timezone=Asia/Shanghai ARG timezone # 修复 SCAN_CACHEABLE 变量格式,移除多余括号 ENV TIMEZONE=${timezone:-"Asia/Shanghai"} \ APP_ENV=prod \ SCAN_CACHEABLE=true # update RUN set -ex \ # show php version and extensions && php -v \ && php -m \ && php --ri swoole \ # ---------- some config ---------- && cd /etc/php* \ # - config PHP && { \ echo "upload_max_filesize=128M"; \ echo "post_max_size=128M"; \ echo "memory_limit=1G"; \ echo "date.timezone=${TIMEZONE}"; \ } | tee conf.d/99_overrides.ini \ # - config timezone && ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \ && echo "${TIMEZONE}" > /etc/timezone \ # ---------- clear works ---------- && rm -rf /var/cache/apk/* /tmp/* /usr/share/man \ && echo -e "\033[42;37m Build Completed :).\033[0m\n" WORKDIR /opt/www # 安装 unzip(Alpine 镜像默认无 unzip 命令,无法解压 zip 包) RUN apk add --no-cache unzip # Composer Cache # COPY ./composer.* /opt/www/ # RUN composer install --no-dev --no-scripts COPY ./hyperf-skeleton-master.zip /opt/www # 关键优化:1. 解压 2. 校验目录 3. 切换目录 4. 安装依赖 合并到同一个 RUN RUN unzip hyperf-skeleton-master.zip \ # 校验目录是否存在,不存在则终止构建并输出错误信息 && if [ ! -d "hyperf-skeleton-master" ]; then \ echo "Error: hyperf-skeleton-master directory not found after unzip!" && exit 1; \ fi \ # 切换到项目目录并执行 composer 安装依赖(同一 RUN 内目录切换有效) && cd hyperf-skeleton-master/ \ && composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \ && composer install --no-dev --no-interaction -o \ # 清理 composer 缓存,减小镜像体积 && composer clear-cache # 暴露 Hyperf 默认端口 EXPOSE 9501 # 容器运行时启动 Hyperf 应用 ENTRYPOINT ["php", "/opt/www/hyperf-skeleton-master/bin/hyperf.php", "start"]
4.docker-compose.yml文件, (多个镜像文件,使用 docker compose up -d --build 创建并运行容器)
version: '3.8' services: mysql: image: mysql:5.7.43 container_name: hyperf-mysql restart: always environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: hyperf MYSQL_USER: hyperf MYSQL_PASSWORD: 123456 ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql networks: - hyperf-network command: --default-authentication-plugin=mysql_native_password redis: image: redis:6.2-alpine container_name: hyperf-redis restart: always ports: - "6379:6379" volumes: - redis_data:/data networks: - hyperf-network command: redis-server --appendonly yes hyperf: build: context: . dockerfile: Dockerfile args: PHP_VERSION: "8.1" ALPINE_VERSION: "3.18" SPEC: "swoole" SW_VERSION: "v5.1.2" container_name: hyperf-app restart: always working_dir: /opt/www # volumes: # - ./hyperf/:/opt/www # - ./runtime:/opt/www/runtime ports: - "9501:9501" depends_on: - mysql - redis networks: - hyperf-network environment: DB_HOST: mysql DB_PORT: 3306 DB_DATABASE: hyperf DB_USERNAME: hyperf DB_PASSWORD: 123456 REDIS_HOST: redis REDIS_PORT: 6379 REDIS_DB: 0 # command: php bin/hyperf-skeleton-master/hyperf.php start networks: hyperf-network: driver: bridge volumes: mysql_data: redis_data:
上面docker-compose作为部署文件,那就不用 把容器目录映射出来,如果是开发环境,那把代码目录映射到容器的/opt/www也行.
# volumes:
# - ./hyperf/:/opt/www
# - ./runtime:/opt/www/runtime
注意,1.如果是部署发布,目录的zip文件应是全部源代码,复制后解压,运行。
2.如果要搭建开发环境,可以不用zip文件,容器启动时的命令也不设置,主要把/opt/www文件挂载到本地,/opt/www是空目录,把代码复制到本地文件夹,这样容器相应文件也有代码了,再容器运行执行命令即可。
开发环境 : https://www.cnblogs.com/fps2tao/p/19498963

浙公网安备 33010602011771号