centos下安装laradock与lumen-api-demo
缘由
久闻docker技术很久了,最近我比较闲,时间充裕让我折腾起docker了。最开始用原生docker折腾了一段时间,发现还是比较繁琐的,就在想有没有更简单的方式,果然在群友的推荐下用起了laradock,新手的福音哈哈,docker牛逼(破音)。 寻思着自己刚好有台centos的腾讯云服务器,那么就在这台服务器上来干活吧。 首先说下os要求,因为我们这次用docker-ce来安装laradock,而docker-ce要求os的版本必须在centos7以上,所以os要求:centos7及以上。
依赖环境
首先更新下系统的软件包,生产环境可忽略
$ yum update
git下载,因为laradock是一个软件包
$ yum install git
docker-ce安装,并启动docker,为docker-compose铺垫
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce
$ systemctl start docker
docker加速
对于使用 systemd 的系统,请在 /etc/docker/daemon.json
中写入如下内容(如果文件不存在请新建该文件)
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
之后重新启动服务。
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
docker-compose安装,为laradock铺垫
$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
laradock安装,并运行
$ git clone https://github.com/Laradock/laradock.git
进入laradock项目
$ cp env-example .env
laradock/.env`中的 `MYSQL_VERSION` 将`latest`修改为`5.7`
$ docker-compose up -d nginx mysql redis workspace
容器无法启动的坑
laradock/.env
中的 MYSQL_VERSION
将latest
修改为5.7
,然后重新$ docker-compose build mysql
,在build之前先删除~/.laradock/data/mysql
文件夹
在已经运行的服务器里运行laradock
但是你说如果我现在在服务器上已经有nginx
、mysql
、redis
等软件运行起来了,在不影响原来软件运行的条件下使用laradock
行不行呢?答案是当然行的,而且也很简单,另外开端口来运行这些软件的容器就行了。在laradock
里只用改几个配置文件就行了,其实就是改的docker运行时的端口映射。在.env
文件里配置以下几个参数的值
NGINX_HOST_HTTP_PORT
NGINX_HOST_HTTPS_PORT
MYSQL_PORT REDIS_PORT
然后重启修改的容器即可 $ docker-compose restart nginx mysql redis
启动docker容器后,用$ docker ps
查看大概是这样的
[图片上传失败...(image-819d9b-1542873546587)]这说明laradock已经运行成功了。
利用laradock部署项目
安装好laradock
,默认的应用程序位于laradock
文件夹的父目录中,在.env
文件里可以看到 APP_CODE_PATH_HOST=../
这说明docker的目录映射关系是../:/var/www
,说明laradock
的父目录相当于docker
里的/var/www
目录。 这个时候打开我们的网站,比如现在我用的nginx
的30080端口做的映射,那么访问http://localhost:30080,发现出现404错误,说明nginx
已经启动,只是找不到文件,现在我们只需要放置一个php
文件来实现hello world
的功能。查看nginx
的默认配置文件nginx/sites/default.conf
发现root参数值是/var/www/public
,然后参考目录映射关系,所以只需要在父目录下创建一个public
文件夹,在public
创建一个index.php
,输入一些诸如echo 'hello world'
或者phpinfo()
等命令,再访问页面,就可以看到对应的信息了!那么简单的配置就成功了。
一些常见问题
Q: 如何在laradock里使用git、composer等命令
A: 在laradock目录下输入 $ docker-compose exec workspace bash
就可以进入工作台,工作台包含了诸多含了丰富且实用的工具集:PHP CLI – Composer – Git – Linuxbrew – Node – V8JS – Gulp – SQLite – xDebug – Envoy – Deployer – Vim – Yarn – SOAP – Drush 等。当然使用$ docker-compose exec xxx bash
还可以进入其他的容器,比如mysql
、nginx
等。 如果要做负载均衡可能需要共享session、共享数据库来保持会话。
下载lumen-api-demon mysql配置需要修改
mysql在docker环境下开启远程访问
$ docker-compose exec mysql bash
$ set password for root@localhost = password('xxx');
$ use mysql; $ grant all privileges on \*.\* to root@"%" identified by "xxx" with grant option;
$ flush privileges;
如果mysql远程连接报2003等错误,记得开启防火墙的mysql端口安全组哟,不然远程可能无法访问。
redis在docker环境下开启远程访问
$ docker-compose exec redis bash
$ redis-cli
$ config set requirepass mima123
查询密码:
$ config get requirepass
(error) ERR operation not permitted
密码验证:
$ redis 127.0.0.1:6379> auth test123
OK
再次查询:
$ config get requirepass
1) "requirepass"
2) "mima123"
docker ps
docker exec -it $console_container_name bash
认证层的目标是提供多一层的保护。记得开启防火墙的redis端口安全组哟,不然远程可能无法访问。