说明:为了快速搭建一套完整的LLNMP开发环境,这一版将完全使用官方镜像,不使用编译方式安装
大纲
- 宿主机准备工作
- 拉取镜像
- 启动容器
- 使用docker-compose编排容器
- 容器内部配置(PHP扩展安装,Nginx配置,MySQL配置等)
- 其它docker操作
宿主机准备工作
宿主机系统:CentOS 7.2(64)
uname -a
Linux VM_76_23_centos 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
- 升级yum仓库[可选]
yum update
- 安装docker并启动
yum install docker
#安装
systemctl start docker
#启动
- 登录dockerhub
docker login
然后输入用户名密码即可。
- 设置镜像加速[可选]
这里我选择了阿里云的镜像加速服务,步骤如下:
在阿里云控制台,进入`容器镜像服务`,在左侧菜单中进入`镜像加速器`页面,会看到一个专属链接和对应系统中的使用方法,安照说明,配置镜像加速器即可。
拉取镜像
- PHP
docker pull php:7.2.3
- MySQL
docker pull mysql:5.7.21
- Nginx(Tengine/openresty)
docker pull nginx:1.13.10
如果想使用其它web服务器,也可以直接搜索镜像,然后拉取,如使用openresty镜像 docker pull openresty/openresty
启动容器
启动容器时,需要注意各容器之间的关联关系。
在LNMP架构中,WEB服务器(Nginx)需要将PHP请求转发给php-fpm进行处理,而PHP要进行数据的存取,少不了和数据库(MySQL)进行交互,所以他们之间存在关联,那么启动时需要指定这些关联,这个关联使用--link
参数来指定。
既然Nginx需要关联PHP,那么PHP应该先于Nginx启动;PHP需要关联MySQL,那么MySQL应该先于PHP启动。所以三个容器的启动顺序为:
MySQL -> PHP -> Nginx
相应的,关闭容器时也应该按照一定的顺序去关闭:
Nginx -> PHP -> MySQL
接下来依次启动三个容器:
docker run -it -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /mnt/mysql:/var/lib/mysql --name mysql mysql:5.7.21
#MySQL
docker run -d -p 9000:9000 --name php -v /mnt/html:/usr/local/openresty/nginx/html --link mysql:mysql php:7.2.3
#PHP
docker run -d -p 80:80 --name nginx -v /mnt/html:/usr/local/openresty/nginx/html --link php:php nginx:1.13.10
#Nginx
启动时我们多使用了一个-v
参数,这个参数的意思是挂载,作用是将宿主机的一个目录挂载到容器中指定的目录,这样,即使我们销毁了这个容器,那容器中的数据依然保留在宿主机上,不会丢失。比如数据库存放数据的data
目录,WEB服务器存放代码的www
目录,每个服务存放配置文件的目录等。
使用docker-compose编排容器
现在看来,第一次启动一个容器时,我们需要指定很多的参数,并挨个执行;并且还需要注意它们之间的关联和启动顺序,这样是比较繁琐的,这时我们可以使用docker-compose
工具来管理这些容器。
sudo curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-
uname -s-
uname -m-o /usr/local/bin/docker-compose
或使用pip安装
yum -y install epel-release
yum -y install python-pip
pip install --upgrade pip
pip install docker-compose
验证docker-compose
docker-compose --version
docker-compose version 1.20.1, build 5d8c71b
安装完docker-compose后,需要来编写yml文件,示例:
web_server:
image: docker.io/openresty/openresty:1.11.2.2
container_name: nginx
links:
- php:php
ports:
- "80:80"
- "443:443"
volumes:
- /mnt/html:/usr/local/openresty/nginx/html
db_server:
image: docker.io/mysql:5.7.21
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
ports:
- "3306:3306"
volumes:
- /mnt/mysql:/var/lib/mysql
php:
image: docker.io/php:7.2.3
container_name: php
links:
- db_server:mysql
ports:
- "9000:9000"
volumes:
- /mnt/html:/usr/local/openresty/nginx/html
- /mnt/php:/usr/local/etc/php
保存为docker-compose.yml
,并在该文件处执行启动命令docker-compose up -d
Starting mysql ... done
Starting php ... done
Starting nginx ... done
可以验证一下是否正常启动:
docker ps -a
或docker-compose ps
容器内部配置
待完善
其它docker操作
待完善