window10下通过docker安装swoole,运行laravel-swoole服务
最近公司压测一个接口,用laravel框架,业务逻辑就是从缓存中取数据,tps总是上不去,于是决定换下swoole来替换php-fpm,来处理php请求,tps比原来高了好几倍。
现在有个问题就是windows下对swoole支持不是很好,打算利用docker镜像来解决环境问题,php代码可以挂载到镜像指定目录下。下面简单介绍下操作步骤
1 安装docker19.03
官方下载地址: https://download.docker.com/win/stable/Docker%20Desktop%20Installer.exe
安装完成后需要修改国内镜像,不然下载docker镜像龟速。修改操作
1.1 右键小鲸鱼图标,选择setting

1.2 选择 Docker Engine , 加入 163镜像地址 ,"registry-mirrors": [ "http://hub-mirror.c.163.com"]

2 docker下 安装 ubuntu镜像 [ windows 下 swoole_set_process_name会报错]
打开powershell,下面命令在上面运行
下载ubuntu镜像 docker pull ubuntu
简单启动 docker run -it -d --name=ls-demo ubuntu /bin/bash
进入容器 docker attach ls-demo
docker 一些基本操作介绍(安装中可能要用到的命令)
复杂点的启动( -i: 交互式操作 -t: 终端 -d 后台启动 --name 命名启动的容器的名称 -p 映射容器端口到本机 -v 挂载本地目录到容器)
docker run -it -d -p 本机端口:容器端口 --name=容器的名称 -v "本机路径":容器路径 镜像名 镜像中命令
查看镜像
docker images

启动镜像(启动镜像后会新建一个容器,可以使用镜像的hash-id 的部分,或者镜像名称启动)
docker run 16a 或者 docker run n_ubuntu
docker run -it 16a /bin/bash 或者 docker run -it n_ubuntu /bin/bash 交互式终端启动
删除镜像(假如镜像有对应的容器启动中需要先关闭对应容器,再删除镜像)
docker image rm 16a 或者 docker rmi n_ubuntu
查看容器名称(-a 显示所有,包括停止的容器)
docker ps -a

查询最新创建的容器
docker ps -l
启动容器(唯一hash容器id和容器名称等价,下面的所有操作用两者皆可)
docker start d1b 或者 docker start ls-demo
关闭容器
docker stop d1b 或者 docker stop ls-demo
删除容器(start中的容器需要stop之后再删除)
docker rm ls-demo
进入容器[上图容器](容器名只要唯一就行, 可以打部分字符串)
docker attach ls-demo
提交容器为本地镜像
docker commit ls-demo 新镜像名字
3 ubuntu镜像中安装php环境
修改源
cp /etc/apt/sources.list /etc/apt/sources.list.bak &&
echo '' > /etc/apt/sources.list &&
echo '
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
' > /etc/apt/sources.list
修改完后更新源
apt-get update
安装必要工具 net-tools 包含netstat iputils-ping 包含ping
apt-get -y vim install net-tools wget curl iputils-ping
添加php源
apt-get -y install software-properties-common && add-apt-repository ppa:ondrej/php && apt-get update
安装过程中会选择地区,城市
6 Asia 70 Shanghai
安装php以及一些常用扩展
apt-get -y install php7.2-dev php7.2-cli php7.2-xml php7.2-mysql php7.2-mbstring php7.2-curl php7.2-bcmath php7.2-zip
4 swoole扩展简单安装
mkdir -p /tmp/php-extension &&
cd /tmp/php-extension &&
wget https://pecl.php.net/get/swoole-4.5.1.tgz &&
tar zxvf swoole-4.5.1.tgz &&
cd swoole-4.5.1 &&
phpize &&
./configure &&
make && make install
扩展写入php.ini
sed -i "924 i extension=swoole.so" /etc/php/7.2/cli/php.ini
查看php扩展
php -m|grep swoole
5 laravel项目启动laravel-swoole
假如本地有laravel项目,可以把本地目录挂载到docker容器下,代码可以git仓库拉推都不影响
ps:假如原来项目中访问的mysql,redis等在本地话,那么挂载后需要把对应的ip,localhost|127.0.0.1 替换成 容器内部访问宿主机的ip
容器中连接宿主机(本地),下面是两种查看宿主ip 的方法
ping host.docker.internal 查看对应ip,C类内网地址
本地windows安装目录查看,比如 C:\ProgramData\DockerDesktop\tmp-d4w\host.docker.internal B类内网地址
退出当前容器
shell命令中 exit
把当前安装了php-swoole扩展的容器提交一个镜像
docker commit ls-demo swoole-php-ubuntu
启动刚生成的带有自己安装php-swoole环境的镜像,挂载本地的laravel项目
docker run -it -d -p 本机端口:容器端口 -v "本机路径":容器路径 swoole-php-ubuntu
下面介绍容器中安装laravel并运行laravel-swoole
下载安装composer并且更换阿里镜像
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" &&
php composer-setup.php &&
php -r "unlink('composer-setup.php');" && mv composer.phar /usr/local/bin/composer &&
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer下载laravel5.8
mkdir -p /data/www && cd /data/www &&
composer create-project --prefer-dist laravel/laravel ls-demo 5.8.*
安装laravel-swoole v2.6.67
cd ls-demo && composer require swooletw/laravel-swoole v2.6.67
添加配置文件config目录下生成3个,swoole开头的,这里只用到了swoole_http.php
php artisan vendor:publish --tag=laravel-swoole
修改对应配置
sed -i "177 i SwooleTW\\\\Http\\\LaravelServiceProvider::class," config/app.php &&
sed -i "44 a SWOOLE_HTTP_DAEMONIZE=true" .env
启动查看端口
php artisan swoole:http start && curl 127.0.0.1:1215
laravel-swoole wiki 地址[关于配置启动可以查看]
https://github.com/swooletw/laravel-swoole/wiki
总结:
上面命令批量汇总
1 下载ubuntu镜像并启动
docker pull ubuntu
docker run -it --name=ls-demo ubuntu /bin/bash
2 批量执行
cp /etc/apt/sources.list /etc/apt/sources.list.bak &&
echo '' > /etc/apt/sources.list &&
echo '
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
' > /etc/apt/sources.list &&
apt-get update &&
apt-get -y install vim net-tools wget curl iputils-ping &&
apt-get -y install software-properties-common && add-apt-repository ppa:ondrej/php && apt-get update &&
apt-get -y install php7.2-dev php7.2-cli php7.2-xml php7.2-mysql php7.2-mbstring php7.2-curl php7.2-bcmath php7.2-zip &&
mkdir -p /tmp/php-extension &&
cd /tmp/php-extension &&
wget https://pecl.php.net/get/swoole-4.5.1.tgz &&
tar zxvf swoole-4.5.1.tgz &&
cd swoole-4.5.1 &&
phpize &&
./configure &&
make && make install &&
sed -i "924 i extension=swoole.so" /etc/php/7.2/cli/php.ini &&
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" &&
php composer-setup.php &&
php -r "unlink('composer-setup.php');" &&
mv composer.phar /usr/local/bin/composer &&
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ &&
mkdir -p /data/www &&
cd /data/www &&
composer create-project --prefer-dist laravel/laravel ls-demo 5.8.* &&
cd ls-demo && composer require swooletw/laravel-swoole v2.6.67 &&
php artisan vendor:publish --tag=laravel-swoole &&
sed -i "177 i SwooleTW\\\\Http\\\LaravelServiceProvider::class," config/app.php &&
sed -i "44 a SWOOLE_HTTP_DAEMONIZE=true" .env &&
php artisan swoole:http start &&
curl 127.0.0.1:1215 &&
ps aux|grep swoole
window10下通过docker安装swoole,运行laravel-swoole服务的更多相关文章
- Docker安装以及运行第一个HelloWorld
Docker安装以及运行第一个HelloWorld
- Windows10下的docker安装与入门 (三) 创建自己的docker镜像并且在容器中运行它
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- windows下使用docker安装tensorflow
一.安装Docker 1.首先先按照docker,从https://get.daocloud.io/toolbox/ 下载exe文件就好 双击安装会多出来三个东西: Oracle VM Virtua ...
- mac环境下使用docker安装nginx
前言 距离上一篇文章已经很长时间,近期实在事情太多了,也没来得及继续更新一些新的内容.现在开发使用的工作实在太多了,小编实在忍受不了windows那样卡机的状态,于是最近换了一个mac电脑,虽然做开发 ...
- 计科菜鸟玩生信(一)——Windows10下用docker安装GATK
1.官网下载GATK. (学校网速实在是太慢了,下载几个小时到自闭) 下载地址:https://software.broadinstitute.org/gatk/download/ 下载完成后文件夹中 ...
- [RabbitMQ]01. 在 Win10 下通过 Docker 安装
目录 win10家庭版 win10专业版和企业版 1. 开启Hyper-v 2. 安装Toolbox工具 3. 运行安装文件 4. 启动docker 5. 安装rabbitmq 6. 网页访问rabb ...
- linux下用docker安装redis
docker安装redis方法: 1.用命令来查看可用版本: docker search redis 2.拉取官方的最新版本的镜像:docker pull redis:latest 3.查看镜像:do ...
- docker安装并运行redis
拉取镜像: [mall@VM_0_7_centos ~]$ sudo docker pull redis:3.2 [sudo] password for mall: 3.2: Pulling from ...
- CentOS系统下使用docker安装pinpoint
准备:安装docker与docker-compose docker安装参考:https://www.cnblogs.com/zhi-leaf/p/10561501.html docker-compos ...
随机推荐
- Crash-fix-2:org.springframework.http.converter.HttpMessageNotReadableException
最近开始对APP上的Crash进行对应,发现有好多常见的问题,同一个问题在多个APP都类似的出现了,这里记录下这些常见的错误. crash Log: org.springframework.http. ...
- Git与GitHub常用操作
--------------------------基本操作--------------------------clone 拷贝远程仓库commit 本地提交push 远程提交pull 更新本地--- ...
- 基于VUE实现的h5网页Web出库单入库单打印设计
经过将近一个月的研发,初步实现了打印单据的自定义设计,样子还有点丑陋,但是功能基本都实现了,实现了以下功能: 1.表头表尾支持动态添加行.添加列.合并单元格(可多行多列合并). 2.表头表尾分别布局, ...
- 【雕爷学编程】Arduino动手做(51)---触摸按键模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...
- ArrayList详解-源码分析
ArrayList详解-源码分析 1. 概述 在平时的开发中,用到最多的集合应该就是ArrayList了,本篇文章将结合源代码来学习ArrayList. ArrayList是基于数组实现的集合列表 支 ...
- python中的基础坑
v = [lambda :x for x in range(10)] print(v) #[lambda :x,lambda :x....]10个匿名函数 print(v[0]) #lambda :x ...
- JavaScript基础技术总结
javascript的作用 HTML网页运行在浏览器端,与用户没有交互功能,用户访问网页的时候只能看,如果网页没有程序员去更新,永远是一成不变的.JavaScript就是可以让程序运行在网页上,提高客 ...
- 201771010128王玉兰《面向对象程序设计(Java)》第十二周学习总结
第一部分:理论知识 1.AWT与Swing简介 (1)Swing用户界面库是非基于对等体的GUI工具箱. Swing具有更丰富并且更方便的用户界面元素集合. Swing对底层平台的依赖很少,因此与 ...
- 最优化之Robust PCA
最近加了一个QQ群,接触了点新的东西,包括稀疏近似,低秩近似和压缩感知等.Robust PCA中既包含了低秩,又包含了稀疏,于是以其为切入点,做了如下笔记.笔记中有的公式有比较详细的推导,希望对读者有 ...
- Java——关键字和保留字
Java关键字50个 abstract assert boolean break byte case catch char class const continue default do double ...