win10 子系统(wsl2)运行 laradock
发表于|更新于|码不能停
|总字数:138|阅读时长:1分钟|浏览量:
没忍住,把家里的电脑更新到了预览版,然后体验了一下 wls2,相对于 wsl1,使用 docker 简直不要太简单。

更新 wsl2
开个命令行:
1 | wsl --set-version Ubuntu 2 |
下载docker
配置
下载完成后,先勾选 wsl2。
然后直接重启 docker。
重启完成后,勾选你的发行版子系统。
然后再次重启 docker。
测试
1 | bash |

重装好像把我之前的镜像都给弄没了,切到 laradock 重新下载。

正常访问,打完收工。
文章作者: m-finder
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 M-finder!
相关推荐

2019-08-18
在 docker 容器中安装 zend guard
在 docker 容器中安装 zend guard。 进入容器1docker-compose exec php-fpm bash 更新环境12apt-get updateapt-get install wget -y 下载文件1wget http://downloads.zend.com/guard/7.0.0/zend-loader-php5.6-linux-x86_64_update1.tar.gz 解压1tar -xzvf zend-loader-php5.6-linux-x86_64_update1.tar.gz 查看扩展路径在 php-info 中搜索路径: 1extension_dir 移动扩展包并使之生效12cp *.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226docker-php-ext-enable ZendGuardLoader 安装成功重启环境。

2019-07-31
docker 容器访问宿主机端口
运行在 docker 容器中的一个项目需要访问宿主机的某个端口,比如容器 A 中的项目访问宿主机 B,在 A 的项目中以下边的地址来访问即可: 1host.docker.internal 之前是可以运行的,但是今天不知道什么情况突然 500 了,重启电脑后,在容器中 ping 这个地址: 1234567PING host.docker.internal (192.168.65.2) 56(84) bytes of data.64 bytes from 192.168.65.2: icmp_seq=1 ttl=37 time=2.09 ms64 bytes from 192.168.65.2: icmp_seq=2 ttl=37 time=1.05 ms64 bytes from 192.168.65.2: icmp_seq=3 ttl=37 time=1.05 ms64 bytes from 192.168.65.2: icmp_seq=4 ttl=37 time=1.16 ms64 bytes from 192.168.65.2: icmp_seq=5 ttl=37 time=1.03 ms 可以看到实际访问的是 192.168.65.2 这个地址,那么在宿主机的 host 加上一行: 1192.168.65.2 host.docker.internal 再次访问,ok!做个记录,防止下次再忘。 安装ping不指定用户进入容器,然后执行: 12apt-get updateapt-get install iputils-ping

2019-03-21
laradock 中 php5.6 连接 mysql 报错解决
laradock 中 php 5.6 连接 mysql 报错的解决方法。 之前弄的是默认版本的 php 7.2 和 mysql 8,配置好以后一直都能正常使用。 最近因为需要切换 php 版本,突然发现切换后连接 mysql 时无法识别 host。 emmmm……,最开始还以为是 php 的锅,各种重新 build,无果,最后在 github 上找到别人发出来的解决办法: rm -rf ~/.laradock/data/mysql删除老版本的数据 docker-compose build mysql重新构建 mysql 进入 mysql 容器mysql -uroot -prootALTER USER root IDENTIFIED WITH mysql_native_password BY ‘root’;exit; 到这里也就可以了。 有这个问题是因为 8 和 5.7 的配置不一样,不清掉老数据的话会引起报错,一有请求去连接 mysql 马上就宕机。

2019-08-23
在 laradock 环境中使用 laravel-swoole 加速你的 laravel 应用
在 laradock 环境中使用 laravel-swoole 加速你的 laravel 应用。 安装laravel-swoole12composer require swooletw/laravel-swoolephp artisan vendor:publish --tag=laravel-swoole 开放 workspace 端口在 laradock/workspace/Dockerfile 最后添加一行: 1EXPOSE 1215 然后重新 build workspace 容器。 修改 nginx 配置123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657upstream swoole-http { server workspace:1215;}map $http_upgrade $connection_upgrade { default upgrade; '' close;}server { listen 80; listen [::]:80; # For https # listen 443 ssl; # listen [::]:443 ssl ipv6only=on; # ssl_certificate /etc/nginx/ssl/default.crt; # ssl_certificate_key /etc/nginx/ssl/default.key; server_name study.test; root /var/www/laravel-learn/public; index index.php index.html index.htm; location = /index.php { # Ensure that there is no such file named "not_exists" # in your "public" directory. try_files /not_exists @swoole; } location / { try_files $uri $uri/ @swoole; } location @swoole { set $suffix ""; if ($uri = /index.php) { set $suffix "/"; } proxy_set_header Host $http_host; proxy_set_header Scheme $scheme; proxy_set_header SERVER_PORT $server_port; proxy_set_header REMOTE_ADDR $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; # IF https # proxy_set_header HTTPS "on"; charset utf-8; proxy_pass http://swoole-http$suffix; }} 然后重启 nginx 修改 laravel env123SWOOLE_HTTP_HOST=workspaceSWOOLE_HTTP_DAEMONIZE=trueSWOOLE_HOT_RELOAD_ENABLE=true 启动 swoole1php artisan swoole:http start | stop | restart | resload 开发环境热更新调整 swoole_http 中 max_request = 1

2018-04-10
Docker使用教程-以Dockerfile定制镜像
我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。 而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu 16.04 最小系统的 root 文件系统。 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。 理解镜像构成镜像是容器的基础,每次执行 docker run 的时候都会指定以哪个镜像作为容器运行的基础。 镜像是多层存储,每一层是在前一层的基础上进行的修改;而容器同样也是多层存储,是在以镜像为基础层,在其基础上加一层作为容器运行时的存储层。 现在让我们以定制一个 Web 服务器为例子,来讲解镜像是如何构建的。 1docker run --name webserver -d -p 80:80 nginx 这条命令会用 nginx 镜像启动一个容器,该容器命名为 webserver,并且映射了宿主机的 80 端口,这样我们就可以在宿主机用浏览器去访问这个 nginx 服务器。docker的启动画面中有当前容器的 ip,例如:192.168.99.100,打开浏览器直接访问该 ip 就能看到默认的 Nginx 欢迎页面。 现在,我们来做点尝试,修改下nginx的欢迎页面。 1234$ docker exec -it webserver bashroot@bcd5b7c85e68:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.htmlroot@bcd5b7c85e68:/# exitexit 我们以交互式终端方式进入 webserver 容器,并执行了 bash 命令,也就是获得一个可操作的 Shell。 然后,我们用 Hello, Docker! 覆盖了 /usr/share/nginx/html/index.html 的内容。 现在我们再刷新浏览器的话,会发现内容被改变了。 我们修改了容器的文件,也就是改动了容器的存储层。要保存这些修改,可以使用 docker 提供的 docker commit 命令将存储层保存下来成为新的镜像。也就是说,是在原有镜像的基础上,再叠加上改动了的存储层并构成新的镜像。 这意味着每一次修改都会让存储层叠加,而且你所删除的上一层的东西并不会丢失,会一直如影随形的跟着这个镜像,即使根本无法访问到。 想想就是件很恐怖的事情。😰 不过,存在即是真理,commit 虽然恐怖,但还是很有用武之地的,比如被入侵后保存现场和一些特殊场合。 使用 Dockerfile 定制镜像如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建和定制镜像,那么之前提及透明性和体积臃肿的问题就都会解决。 这个脚本就是 Dockerfile。 Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。 还是以上边的 nginx 为例。 创建一个文件夹,然后在文件夹内创建一个文本文件。 123mkdir /c/dockercd /c/dockertouch Dockerfile 其内容为: 12FROM nginxRUN echo '<h1>Hello, M-finder!</h1>' > /usr/share/nginx/html/index.html FROM 指定基础镜像所谓定制镜像,就是以一个镜像为基础,在其上进行定制。就像我们先运行了一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指定的。 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。 RUN 执行命令RUN 指令是用来执行命令行命令的。由于命令行的强大能力,RUN 指令在定制镜像时是最常用的指令之一。其格式有两种: shell 格式:RUN <命令>,就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的 RUN 指令就是这种格式。 1RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html run 命令应尽可能的压缩为一行,因为每一个 run 命令就是一层存储层,而且,命令应该遵循良好的代码格式,比如换行、缩进、注释等,会让维护、排障更为容易,最后也应该添加清理工作的命令。 构建镜像在 Dockerfile 文件所在目录执行: 1234567891011$ docker build -t nginx:v3 .Sending build context to Docker daemon 2.56kBStep 1/2 : FROM nginx ---> c5c4e8fa2cf7Step 2/2 : RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html ---> Running in 4e2f0f98fbfeRemoving intermediate container 4e2f0f98fbfe ---> 8b70819a7261Successfully built 8b70819a7261Successfully tagged nginx:v3SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories. 从命令的输出结果中,我们可以清晰的看到镜像的构建过程。在 Step 2 中,如同我们之前所说的那样,RUN 指令启动了一个容器 4e2f0f98fbfe,执行了所要求的命令,并最后提交了这一层 c5c4e8fa2cf7,随后删除了所用到的这个容器 4e2f0f98fbfe。 这里我们使用了 docker build 命令进行镜像构建。其格式为: docker build [选项] <上下文路径/URL/->在这里我们指定了最终镜像的名称 -t nginx:v3,构建成功后,我们可以像之前运行 nginx 那样来运行这个镜像。

2019-10-12
在 laradock 环境中使用 laravel-swoole 的 websocket
之前写了一篇 在 laradock 环境中使用 laravel-swoole 加速你的 laravel 应用 的博客,算是敲开了 laravel-swoole 的大门,今天就继续研究下期中的 websocket 功能。 安装 laravel-swoole这里就不写了,参考上篇。 配置 socket编辑 laravel env 文件,写入如下一行: 1SWOOLE_HTTP_WEBSOCKET=true 然后执行 php artisan swoole:http infos 查看状态 1234567891011121314151617+-----------------+-----------------------------------------------------+| Name | Value |+-----------------+-----------------------------------------------------+| PHP Version | 7.2.21-1+ubuntu16.04.1+deb.sury.org+1 || Swoole Version | 4.4.4 || Laravel Version | 5.8.33 || Listen IP | workspace || Listen Port | 1215 || Server Status | Online || Reactor Num | 2 || Worker Num | 2 || Task Worker Num | 2 || Websocket Mode | On || Master PID | 326 || Manager PID | 327 || Log Path | /var/www/laravel-learn/storage/logs/swoole_http.log |+-----------------+-----------------------------------------------------+ 可以看到 Websocket Mode 一项已经打开了。 编辑 socket 路由在 routes/websocket.php 中: 1234567891011121314Websocket::on('connect', function ($websocket, Request $request) { // called while socket on connect $websocket->emit('message', 'welcome');});Websocket::on('disconnect', function ($websocket) { // called while socket on disconnect $websocket->emit('message', 'server is gone, bye~');});Websocket::on('example', function ($websocket, $data) { $websocket->emit('message', $data);}); 此文件修改后需要重启 swoole:http。 前端连接 socket因为 laravel-swoole 使用的是 Socket.io,所以这里也采用这个。 12345678910111213141516<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js"></script><script type="text/javascript"> var socket = io('http://study.test:8080/', {transports: ['websocket'], reconnection: true}); socket.on('connect', function () { socket.emit('example', 'hi'); socket.on('disconnect', function () { console.log('disconnect'); }); socket.on('message', function (msg) { console.log(msg) }); });</script> 配置 nginx如果你用的 swoole 版本为 4.4.4,那么还需要对上篇文章中的 nginx 配置做个小修改,即添加一行: 1proxy_http_version 1.1; 完整配置就不贴了,把这一行加在 proxy_pass http://swoole-http$suffix; 这一行前后都行。 如果没有这一行的话,而且怎么也没反应的话,记得去 log 中找具体报错。 emmm,文档没写,在 issue 里扒出来的……