本人宿主机的系统是win7系统
在2018年的今天,windows的的docker使用方式被官网推荐为docker toolbox的一键安装的方式,但是他们这个安装的这堆组合软件的版本都比较高,而对于本人使用的win7会出现一堆莫名其妙的bug(主要集中VirtualBox方面的),所以还是自己安装一个适合自己的VirtualBox和docker环境
1、安装VirtualBox
据说版本为4.3.4的VirtualBox在win7下是最稳定的,所以就使用这个版本的VirtualBox
2、参考文档https://www.widuu.com/chinese_docker/installation/windows.html安装boot2docker,安装过程不用安装它附带的VirtualBox,可使用下面的地址;
完成boot2docker的安装后,然后点击这个:
然后会在VirtualBox新建虚拟机,完成后悔出现这个:
ps:打开虚拟机提示kernel 没有找到,你可以尝试到VirtualBox安装目录下的vboxdrv文件夹
如D:\Program Files\Oracle\VirtualBox\drivers\vboxdrv,
右击VBoxDrv.inf,选安装,然后重启。
完成上述步骤后就能登录boot2docker
常用命令:
boot2docker ssh 登录
boot2docker ip 虚拟机ip地址
boot2docker restart重启
boot2docker status状态
boot2docker info 信息
boot2docker version版本号
3、开始安装镜像
参考简书的文档:https://www.jianshu.com/p/2ad17b1df2c0
使用boot2docker ssh登录后,就能进入docker环境,由于使用简书的的镜像有点问题,所以自己进行一些改动:
这次的目的就是获取和启动运行Lavavel应用程序,我们不仅仅需要一个可以运行PHP的web服务器,我们也需要能够运行PHP命令行应用程序的composer和artisan.也许还有更好运行环境的方式(例如浏览器).但是这是一个好的基础整合Dokcer和Laravel.每个进程都有一个自己的容器.
使用镜像:
- [dylanlindgren/docker-laravel-data](https://github.com/dylanlindgren/doc ker-laravel-data) - 这个镜像是用来创建我们的数据容器的.这个容器将提供我们的应
用程序文件给其他容器访问. - dylanlindgren/docker-laravel-composer - 这个镜像将创建一个允许我们使用
composer
命令行的
容器.(使用这个会在boot2docker退出后出现问题,所以也弃用) - wiwatsrt/docker-laravel-composer
composer
命令行的
容器 - flaxandteal/docker-laravel-phpfpm 这个版本用php7,标签为fpm-7.1.6
- dylanlindgren/docker-laravel-artisan - 这个镜像将创建一个允许我们使用artisan命令行的容器.(使用这个会在boot2docker退出后出现问题,所以也弃用)
- efynox/docker-laravel-artisan 使用这个artisan
- dylanlindgren/docker-laravel-phpfpm - PHP-FPM处理PHP文件.(只有php5版本,因为composer安装的laravel版本是到了5.7,要去使用php7版本,所以弃用这个镜像)
- dylanlindgren/docker-laravel-nginx - 一个Nginx服务器.这个容器将链接到我们的PHP-FPM容器上.
- dylanlindgren/docker-laravel-bower - 浏览器.(可有可不有)
拉取代码:
$ docker pull dylanlindgren/docker-laravel-data && \
docker pull dylanlindgren/docker-laravel-composer && \
docker pull dylanlindgren/docker-laravel-artisan && \
docker pull dylanlindgren/docker-laravel-phpfpm && \
docker pull dylanlindgren/docker-laravel-nginx && \
docker pull wiwatsrt/docker-laravel-composer && \
docker pull flaxandteal/docker-laravel-phpfpm && \
docker pull efynox/docker-laravel-artisan && \
docker pull dylanlindgren/docker-laravel-bower
根据博客的图:
你可以看到这些容器都将他们的/data
定位到了docker-laravel-data
容器.又可以
看到是从主目录的~/myapp
目录定向到了/data
.在~/myapp
中我们有两个目录www
和logs
.
-
www
- 包含我们的应用程序文件(例如:public/index.php
) -
logs
- 存放Nginx的错误日志文件.
创建数据容器
创建两个目录在你的系统中~/myapp/www
和~/myapp/logs
.这个~/myapp/
目录映射
到数据容器中,提供给其他容器访问应用程序文件.
如果你已经有了一Laravel app,将它的所有文件放入~/myapp/www
目录中.否则我们将
创建一个.
让我们来创建我们的数据容器,并且将~/myapp/
映射到这个容器的/data
目录上
$ docker run --name myapp-data -v /home/docker/myapp:/data:rw dylanlindgren/docker-laravel-data
运行composer命令行
通过如下的命令执行composer
命令行:
$ docker run --privileged=true --volumes-from myapp-data --rm wiwatsrt/docker-laravel-composer
*your composer commands here*
哇!这真是一个好长的命令.谁想输入这么长的命令只是为了简单的运行composer dump-autoload
?可以灵活的使用Bash的aliases使命令简短.在.bashrc
文件中添加下面的代码.
alias myapp-composer="docker run --privileged=true --volumes-from myapp-data --rm wiwatsrt/docker-laravel-composer"
重新启动终端的会话.你就可以通过myapp-composer
命令行来运行composer
了.
如果你想要创建一个新的Laravel app,执行下面的命令,使用composer
下载Laravel和它的依赖:
myapp-composer create-project laravel/laravel /data/www --prefer-dist
不要忘记适当的给app/storage
目录权限,不然你可能会看到运行错误.
查看/home/docker/myapp/www/composer.json使用的版本
运行artisan命令行
artisan
命令行的运行方式和运行composer
命令行的方法相似:
$ docker run --privileged=true --volumes-from myapp-data --rm efynox/docker-laravel-artisan
*your artisan commands here*
同样的,让我们增加另一条配置到.bashrc
中:
alias myapp-artisan="docker run --privileged=true --volumes-from myapp-data --rm dylanlindgren/docker-laravel-artisan"
重启终端,你就可以通过myapp-artisan
来运行artisan
了.
Laravel服务
Nginx
和PHP-FPM
是分开的两个进程,因此,我们将分开它们不同容器的原因在这之前解释清楚.
首先,我们先创建PHP-FPM
的容器,注意这里我们使用-d
选项,说明进程将在后台运行.PHP-FPM
不是运行不成功,以为是像composer
和artisan
那样退出了,其实它只是在保持运行.我们要把它当做守护进程那样运行,这样我们就可以做其他的事情,例如加载Nginx的容器.
如下运行PHP-FPM:
$ docker run --privileged=true --name myapp-php --volumes-from myapp-data -d flaxandteal/docker-laravel-phpfpm:fpm-7.1.6
我们使用--link
选项,当我们创建Nginx容器的时候,链接到这个PHP-FPM容器,通过它们的ip来沟通数据.(准确来说是9000端口)
让我们运行Nginx:
$ docker run --privileged=true --name myapp-web --volumes-from myapp-data -p 80:80 --link myapp-php:fpm -d dylanlindgren/docker-laravel-nginx
最后在宿主机命令boot2docker ip获取虚拟机ip
通过浏览器访问http://192.168.59.104/就可以看见Laravel的欢迎界面.
注:
问:在boot2docker中出现:Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
答:可能是 Docker守护进程挂了,重启一下,重启命令:
/usr/local/bin/docker -d -D -g /var/lib/docker -H unix:// -H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/var/lib/boot2docker/tls/ca.pem --tlscert=/var/lib/boot2docker/tls/server.pem --tlskey=/var/lib/boot2docker/tls/serverkey.pem
参考:
http://www.runoob.com/docker/docker-exec-command.html
https://www.widuu.com/chinese_docker/installation/windows.html
https://www.docker-cn.com/registry-mirror
https://docs.docker.com/docker-for-windows/install/#about-windows-containers
https://hub.docker.com/r/flaxandteal/docker-laravel-phpfpm/tags/
https://www.jianshu.com/p/7dc7aeb9e173
https://zhuanlan.zhihu.com/p/35493900