构建LaravelS运行环境的Docker镜像
23-02-26 23:54
字数 2808
阅读 1411
已编辑
需求:服务器系统自带Docker,没有包管理,传统的部署方式不太合适,遂选择Docker,此项目只需单机部署
解释:LaravelS是Laravel的加速方案,属于常驻内存应用
实现:
- 编写Dockerfile
FROM php:7.2-cli
LABEL maintainer="Danton" version="1.0" license="MIT"
##
# ---------- env settings ----------
##
# --build-arg timezone=Asia/Shanghai
ARG timezone
ENV TIMEZONE=${timezone:-"Asia/Shanghai"} \
COMPOSER_VERSION=1.8.6 \
APP_ENV=prod
# install extension
RUN apt-get update \
&& docker-php-ext-install pcntl \
&& docker-php-ext-install bcmath \
&& apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-install -j$(nproc) gd \
&& pecl install swoole-4.8.9 \
&& pecl install redis \
&& docker-php-ext-enable swoole redis
# update
RUN set -ex \
# install composer
&& cd /tmp \
&& curl -fsSL https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar -o composer.phar \
&& chmod u+x composer.phar \
&& mv composer.phar /usr/local/bin/composer \
# show php version and extensions
&& php -v \
&& php -m \
# ---------- clear works ----------
&& rm -rf /tmp/* \
&& echo -e "\033[42;37m Build Completed :).\033[0m\n"
# install supervisor
RUN apt-get install -y supervisor
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY . /opt/www
WORKDIR /opt/www
RUN composer install \
&& composer dump-autoload -o
EXPOSE 9501
CMD ["/usr/bin/supervisord"]
- 构建Docker镜像
docker build -t="danton/laravels" .
- 跑一下试试
docker run --name=laravels -p 9501:9501 b5be4f182d32
- 请求一下http://127.0.0.1:9501 ,没问题的话就可以push镜像到远程的镜像仓库了,比如阿里云或Docker Hub等等,服务器那边把镜像pull下来,类似步骤3跑起来就ok,当然run命令参数很多,根据需要自行设置
思考:
- 需要改进的地方
- 创建新的用户组和用户,指定composer,supervisor等用户
- supervisor可以构建单独的容器,放在应用容器内使镜像体积更大,这里贴一下上面的supervisord.conf
# supervisor配置 [supervisord] nodaemon=true [supervisorctl] [inet_http_server] port = 127.0.0.1:9001 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface # LaravelS应用启动 [program:laravel-s] directory=/opt/www command=php bin/laravels start -i numprocs=1 autostart=true autorestart=true startretries=3 redirect_stderr=true stdout_logfile=/var/log/supervisor/%(program_name)s.log # Laravel redis队列启动 [program:laravel-worker] process_name=%(program_name)s_%(process_num)02d directory=/opt/www command=php artisan queue:work sqs --sleep=3 --tries=3 autostart=true autorestart=true numprocs=2 redirect_stderr=true stdout_logfile=/var/log/%(program_name)s.log
- 一些自动化的部署方式,通常包括代码规范校验,CI,CD,举一下在职公司的例子
- PHP使用Jenkins,部署过程基本是执行Shell脚本,因为全面转Java所以未容器化
- Java使用阿里云云效,自定义发布流水线,选择集成代码分支、代码检查、构建镜像、镜像滚动升级,对开发来说只需运行即可
1人点赞>
0 条评论
排序方式
时间
投票
快来抢占一楼吧
请登录后发表评论
相关推荐
文章归档
最新文章
最受欢迎
10-30 12:05
23-09-27 17:00
23-09-03 10:57
23-09-02 17:11
3 评论
3 评论
2 评论