本人宿主机的系统是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的安装后,然后点击这个:

Docker Desktop 选择 Windows Containers 模式 window使用docker_window

然后会在VirtualBox新建虚拟机,完成后悔出现这个:

Docker Desktop 选择 Windows Containers 模式 window使用docker_boot2docker_02

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命令行应用程序的composerartisan.也许还有更好运行环境的方式(例如浏览器).但是这是一个好的基础整合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中我们有两个目录
wwwlogs.

  • 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使用的版本

Docker Desktop 选择 Windows Containers 模式 window使用docker_virtualbox_03

运行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服务

NginxPHP-FPM是分开的两个进程,因此,我们将分开它们不同容器的原因在这之前解释清楚.

首先,我们先创建PHP-FPM的容器,注意这里我们使用-d选项,说明进程将在后台运行.PHP-FPM不是运行不成功,以为是像composerartisan那样退出了,其实它只是在保持运行.我们要把它当做守护进程那样运行,这样我们就可以做其他的事情,例如加载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

Docker Desktop 选择 Windows Containers 模式 window使用docker_boot2docker_04

通过浏览器访问http://192.168.59.104/就可以看见Laravel的欢迎界面.

Docker Desktop 选择 Windows Containers 模式 window使用docker_virtualbox_05

注:

问:在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