缘由

久闻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  
$ docker-compose up -d nginx mysql redis workspace

容器无法启动的坑

laradock/.env中的 MYSQL_VERSIONlatest修改为5.7,然后重新$ docker-compose build mysql,在build之前先删除~/.laradock/data/mysql文件夹

在已经运行的服务器里运行laradock

但是你说如果我现在在服务器上已经有nginxmysqlredis等软件运行起来了,在不影响原来软件运行的条件下使用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查看大概是这样的
这说明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还可以进入其他的容器,比如mysqlnginx等。 如果要做负载均衡可能需要共享session、共享数据库来保持会话。

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"    

认证层的目标是提供多一层的保护。记得开启防火墙的redis端口安全组哟,不然远程可能无法访问。

参考文档:
1、Get Docker CE for CentOS【Docker官方文档】
2、laradock官方文档
3、Redis 密码设置和查看密码
4、Docker镜像加速器
5、Docker Compose 二进制安装


夏之日,冬之夜。百岁之后,归於其居。 冬之夜,夏之日。百岁之后,归於其室。 我们终将化为尘土,留下的都是点滴回忆。