From fc07f222538e4488da0b038be1f3534f92d2036e Mon Sep 17 00:00:00 2001 From: augushong Date: Sun, 7 Apr 2024 22:45:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Edocker=E7=94=A8=E6=B3=95?= =?UTF-8?q?=E5=92=8C=E8=AF=B4=E6=98=8E=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 31 ++++++--- README.md | 65 ++++++++++++++++++- docker/run.sh | 26 ++++---- .../base/common/command/admin/VersionBase.php | 6 +- 4 files changed, 104 insertions(+), 24 deletions(-) diff --git a/Dockerfile b/Dockerfile index 53fa7e0..af50f3b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,8 @@ # 基于官方 PHP 8.0 镜像 FROM php:8.0-fpm -# RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list -# RUN sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list +RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list +RUN sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list RUN apt-get update @@ -10,7 +10,7 @@ RUN apt-get update RUN apt-get install -y nginx # 安装ffmpeg -RUN apt-get install -y ffmpeg +# RUN apt-get install -y ffmpeg # 安装redis RUN apt-get install -y redis-server @@ -42,19 +42,29 @@ RUN rm /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default # 设置工作目录 WORKDIR /var/www/html - # 将当前目录下的文件拷贝到工作目录 COPY . /var/www/html # 创建runtime目录 -RUN mkdir /var/www/html/runtime - -# 设置runtime目录权限为777 +RUN mkdir -p /var/www/html/runtime RUN chmod -R 777 /var/www/html/runtime - -# 创建持久化存储目录 VOLUME /var/www/html/runtime +# 创建storage目录 +RUN mkdir -p /var/www/html/public/storage +RUN chmod -R 777 /var/www/html/public/storage +VOLUME /var/www/html/public/storage + +# 创建build目录 +RUN mkdir -p /var/www/html/public/build +RUN chmod -R 777 /var/www/html/public/build +VOLUME /var/www/html/public/build + +# 创建storage(safe)目录 +RUN mkdir -p /var/www/html/storage +RUN chmod -R 777 /var/www/html/storage +VOLUME /var/www/html/storage + # 暴露 Nginx 端口 EXPOSE 80 @@ -62,6 +72,7 @@ EXPOSE 80 RUN chmod +x /var/www/html/docker/run.sh # 启动 Nginx PHP 然后阻塞 -CMD /var/www/html/docker/run.sh +ENTRYPOINT ["/var/www/html/docker/run.sh"] +CMD ["server"] diff --git a/README.md b/README.md index af9914d..6ee2685 100644 --- a/README.md +++ b/README.md @@ -235,4 +235,67 @@ vscode中liveSassCompiler的配置: ``` ### docker -内置了docker打包命令,打包出的镜像支持两种调用方法 \ No newline at end of file + +#### 打包镜像 + +下面给出的命令指定了标签名,可自行替换。 +使用以下命令打包时,相同的名称不会覆盖,名称会被新的镜像占用,因此用第二行以时间为版本名的方式,调试起来更方面。 + +``` +docker build -t ulthon/ulthon_admin:v1 . +docker build -t ulthon/ulthon_admin:202404071454 . +``` + +#### 运行镜像 + + +下面的命令中为容器指定了名字,可自行替换。 +相同名称不能重复运行,所以指定名字是个好习惯,否则docker会自动起名。 + + +``` +docker run -d \ +-p 88:80 \ +-v /data/ulthon_admin/runtime:/var/www/html/runtime \ +-v /data/ulthon_admin/storage:/var/www/html/public/storage \ +-v /data/ulthon_admin/build:/var/www/html/public/build \ +-v /data/ulthon_admin/safe_storage:/var/www/html/storage \ +--name ulthon_admin ulthon/ulthon_admin:202404071454 \ +server +``` + +- 端口:需要暴露80端口,冒号左侧可自定义,修改为本机可用的一个端口。 +- runtime:需要映射runtime目录,冒号左侧可自定义,修改为指定的目录,推荐设置,因为缓存、日志等文件都保存在这个目录下,不指定的话,重启丢失。 +- public/storage:框架默认的上传文件存储在public/storage下,因此必须映射该目录,如果系统不需要上传,则可以不设置。 +- public/build:框架默认的生成文件(比如海报、二维码)存储在public/build下,推荐映射,否则重启后丢失。 +- storage:框架设计了一个安全存储的位置,相对于storage在public下,storage在项目根目录下,因此无法直接请求到,相对安全,此时只能通过相关支持认证的控制器访问,因此更安全,可以用于存储身份证等敏感信息,但此机制大多数项目用不到,如果用到了必须要设置。 +- 后端运行,`-d`参数可以让docker在后端运行。 + +如果有其他指定的目录,可在Dockerfile中自行添加,在命令中映射。 + +> 如果不映射目录,镜像不会出错,但重启后丢失。 + + +#### 基本用法 + +内置了docker打包命令,打包出的镜像支持两种调用方法: + +- server或空 +- think + +有两个基本的用法,运行镜像后,如果在最后增加任何参数或者增加server,会启用镜像中的php-fpm和nginx,使用`-d`后自动运行到后台,相当于框架一键运行。 + +如果以think开始传参,则是调用think命令,比如`docker run xxxxx think admin:version`,是调用内置命令。 + +> 实际上可以不以think开始,也可以是其他路径的php文件,但这里不过多讨论 + +#### 其他常用命令 + +```bash +# 一键删除停止的容器 +docker rm $(sudo docker ps -a -q) +# 导出镜像 +docker save e950efa97445 > ulthon_admin.tar +# 导入镜像 +docker load < ulthon_admin.tar +``` \ No newline at end of file diff --git a/docker/run.sh b/docker/run.sh index bad314d..5a250ba 100644 --- a/docker/run.sh +++ b/docker/run.sh @@ -1,21 +1,25 @@ -# 将代码中的nginx复制到nginx配置文件中 -cp /var/www/html/docker/nginx.conf /etc/nginx/sites-available/default -ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default +#!/bin/bash -# 将代码中的php配置文件复制到php配置文件中 -cp /var/www/html/docker/phprun.ini /usr/local/etc/php/conf.d +# # 将代码中的nginx复制到nginx配置文件中 +# cp /var/www/html/docker/nginx.conf /etc/nginx/sites-available/default +# ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default -# 运行redis -nohup redis-server --requirepass "" & -# 运行定时任务 -nohup php /var/www/html/think timer --local & +# # 将代码中的php配置文件复制到php配置文件中 +# cp /var/www/html/docker/phprun.ini /usr/local/etc/php/conf.d + +# # 运行redis +# nohup redis-server --requirepass "" & +# # 运行定时任务 +# nohup php /var/www/html/think timer --local & + +# 输出参数 +echo "参数为:$@" -# 如果第一个参数是server,或者没有参数,则运行server if [ "$1" = "server" ] || [ "$1" = "" ]; then # 运行nginx service nginx start # 运行php-fpm php-fpm else -php "/var/www/html/""$@" + php "/var/www/html/""$@" fi diff --git a/extend/base/common/command/admin/VersionBase.php b/extend/base/common/command/admin/VersionBase.php index d710d51..f547545 100644 --- a/extend/base/common/command/admin/VersionBase.php +++ b/extend/base/common/command/admin/VersionBase.php @@ -12,12 +12,14 @@ use think\console\Output; class VersionBase extends Command { - public const VERSION = 'v2.0.93'; + public const VERSION = 'v2.0.94'; public const LAYUI_VERSION = '2.8.17'; public const COMMENT = [ - '修复事件异常错误', + '新增docker用法和说明', + '优化timer指定本地地址', + '修复重置密码命令错误', '发布新版本', ];