虽然这篇叫Docker环境搭建,但是是用了一个别人写好的配置文件,为什么要用别人写好的呢?因为第一节省了我们学习的成本,类似一键安装环境的东西。二节省了我们的构造docker和测试docker的时间。三也省略了我们在去写额外的服务器配置。
这里我选用LaraDock,因为它的容器多,不仅仅用来作web服务器。LaraDock官网
以下,所说的文件夹和目录是同一个意思,只不过不同的操作系统叫法不一样而已。
1. 安装前的准备工作
- GIT
- Docker
这两个各自的官网上都有,这就不多介绍了。安装也比较方便,没什么难点
2. Docker镜像源更改
这里我们要更改下Docker源,不然会一直提示连接不了服务器,即便连接上也会下载巨慢。
这里我选择DaoCloud
- 首先注册DaoCloud号,只有注册以后,才能用它的加速服务,免费的。所以我们要感谢DaoCloud的免费。
- 访问网址http://www.daocloud.io/mirror#accelerator-doc,上面有根据系统如何更改镜像源,不复杂,很简单就完成了(PS:这个网址必须在登录的情况下才能访问到,免费的服务,为了以后大家都用着舒心就支持下,注册下)
(PS:如果你碰到提示 ERROR: Service ‘mysql’ failed to build: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.65.1:53: too many redirects 这个错误提示就是没有连接上镜像的服务器,多试几次就好了)
3. 安装LaraDock
这里以新项目为例,如果是在已有的项目的情况下,请参考LaraDock官方文档
git clone https://github.com/Laradock/laradock.git
这里会下载一些docker配置文件,git下来后有个laradock目录,里面有很多容器,到时候需要什么容器就加载什么容器就可以了,非常方便。
4. 修改docker镜像配置文件
- 进入刚刚git下来的laradock目录
- 拷贝配置文件,并命名为.env
cp env-example .env
5. 修改配置文件
修改刚刚复制的配置文件,最上面有行Application的配置,是指你项目的位置所在,这里指的是你的项目要放在哪个文件夹下,把APPLICATION=../
改为APPLICATION=../project-z/
,当然这个后期也是可以更改的
虽然我把项目放在了project-z目录下,其实nginx真正访问到的位置为 project-z/public/
### Application Path
# Point to your application code, will be available at `/var/www`.
APPLICATION=../project-z/
这个目录的意思是project-z文件夹的父目录,是和project-z文件夹在同一级的project-z目录 如果目录不存在的话一般生成容器的时候会自动创建,如果生成的时候没创建或者生成容器的时候提示找不到目录的话,就新建好这个文件夹,因为linxu里会有权限的问题。
6. 生成容器并启动服务器
以后如果启动服务器的话,就执行这条命令就行了。注意,第一次执行这个命令会先从网上服务器里下载docker镜像,然后在用镜像生成容器,有了容器以后,下次启动就直接启动容器了。 第一次执行因为要下载镜像,随便一个镜像都很大,所以,如果不更改Docker源的话,基本上就无望了。好多人也都是在这步放弃的,即便你更改了Docker源有时候也会下载失败,多执行几次这条命令就,直到执行成功。
docker-compose up -d nginx mysql
(-d,表示后台启动。workspace 和 php-fpm 将运行在大部分实例中, 所以不需要在 up 命令中加上它们。) 安装完成,并且启动以后的效果,应该类似这样的
Starting laradock_mysql_1 ...
Starting laradock_mysql_1
Recreating laradock_applications_1 ...
Recreating laradock_applications_1 ... done
Recreating laradock_workspace_1 ...
Recreating laradock_workspace_1 ... done
Recreating laradock_php-fpm_1 ...
Recreating laradock_php-fpm_1 ... done
Recreating laradock_nginx_1 ...
Recreating laradock_nginx_1 ... done
会发现启动的时候有些显示的是done的,这些不用管,我琢磨着应该是重复启动相同的容器,然后端口被占用所造成的失败。
7. 查看启动效果
在本地的浏览器上输入http://localhost/
,会发现提示404,这是因为我们虽然创建了project-z,但是并没有在里面新建文件,在里面放入一个新建的index.php文件。
放入index.php文件后重新访问,发现还是提示404,其实,这是因为ngixn默认配置是在public目录下的。在project-z文件夹里面新建一个public目录,然后再在里面放入index.php发现就能访问到了。
8. 完成
到这里其实已经完成了,因为已经能访问到项目了,以后再次启动服务器的时候只需要运行docker-compose up -d nginx mysql
就能直接启动服务了
9. 安装laravel项目
- 首先进入到项目容器里面
docker-compose exec --user=laradock workspace bash
执行完这条命令后,会发现你的用户已经变更了,说明你已经进入到容器里面了
- 安装laravel项目
composer create-project laravel/laravel coolapp
(PS:为什么要在容器里安装,而不直接在本地直接安装呢?这个我琢磨着应该是权限的问题,因为linxu和mac会有用户权限和文件夹权限这一说法)
- 按照安装laravel的要求,给一些目录设置写权限
8. 更改项目为laravel目录
- 输入
exit
,退出容器 - 输入
docker-compose stop
关闭所有容器。 - 然后更改
.env
文件。由原来的../project-z/
目录改为../project-z/coolapp/
。(PS:注意,这里默认就是进入的publi目录,所以不需要额外的在指定public目录了) - 启动服务
docker-compose up -d nginx mysql
- 在浏览器地址栏上输入
http://localhost/
,查看效果
9. 更改laravel的数据库连接
进入laravel项目目录下,更改coolapp目录里的.env
的laravel配置文件为DB_HOST=mysql
那么问题来了,mysql的用户名密码以及数据库的名字是什么?这个可以查看laradock目录下的
.env
配置文件,然后在文件里搜索mysql关键字,你就会看到mysql的一些配置,数据库,密码,用户名等等。
其它问题
- 下载镜像的时候有的提示需要key之类的,意思是你需要登录你的docker,去到Docker官网上注册个号,然后在你本机的Docker服务上登录上你的号就可以了。
- 以上步骤是单项目下的服务器配置。即,只针对一个域名下的配置,多域名的请参考Laradock官方文档的多项目配置。
- 启动服务正常,访问一直是’404 Not Found’,进入nginx容器里,查看nginx配置,发现里面多了一个public目录,所以需要在指定的项目目录下在新建一个public目录。
- 执行
docker-compose up -d nginx mysql
,会提示经常提示服务器错误,因为即便更换了Docker源,但是因为不稳定,所以还是经常下载失败。多执行几次这条命令 - 生成镜像的时候,有可能生成镜像的时候失败过,然后再次执行
docker-compose up -d nginx mysql
无法构建当前镜像。查看镜像发现有生成为none的镜像,删除掉即可 - 镜像有时候删除不掉,是因为还有依赖它生成的容器没有关闭,所以先停止所有容器,然后在删除镜像。
注意事项
- 各个端口一定不能被占用,不然服务会启动失败
- 切换Docker源,不然下载镜像的时候会非常慢
- 项目默认位置是在你设置目录的public目录下面的
- 服务器的配置都能在.env里找到,如果找不到,进入你的服务器容器里,然后直接查看配置
- 其它容器组合直接可以看laradock目录下有啥文件夹,就有啥服务。
- docker默认是挂载的方式(即类似于共享目录的方式),把你本地的目录挂载到容器里的,所以docker里有配置挂载目录的选项,如果找不到目录,可以到docker服务器里查看有没有把项目的目录挂载上去。
基本docker命令
- 关闭所有容器(停止所有服务)
docker-compose stop
- 删除所有容器
docker-compose down
- 删除所有镜像
docker rmi $(docker images -q)
- 后台启动容器(以后台的方式启动服务)
docker-compose up -d {容器名称}
- 查看所有容器
docker ps
- 查看所有镜像
docer images
- 查看容器IP
需要先使用命令
docker ps
查看出容器的IPdocker inspect [容器ID]
- 远程连接mysql并执行mysql命令行模式
mysql的用户名和密码可以在.env里找
docker-compose exec mysql mysql -u [用户名] -p[密码]
- 远程连接redis并进入redis命令行模式
这条命令是默认端口为6379,如果你更改了端口请在后面加上
-p [端口号]
docker-compose exec redis redis-cli -h redis
原文链接:Dennis`s blog
参考链接:
基于 LaraDock 在 Docker 中快速构建 Laravel 应用系列教程 —— 搭建开发环境
laradock文档
开始使用Docker for Mac