本想在这篇文中说一下阿里云主机的采购和选型,又怕大家误会我是广告贴,所以关于阿里云的选购以后我将单独发到我的博客当中。
闲话少说,进入正题。小型企业站快速上云其实是一件很容易的事情,但是每次配置服务器却并不是一件容易的事,每次大家都要找一些需要安装的插件和组件,有的因为版本问题,有的因为翻墙问题最后的安装过程相当麻烦。Docker就成为了我们快速部署的工具。
docker
本文中我将以php7+nginx+mysql+为例在centos6.8以上系统中进行docker环境的搭建,也就是常说的LNMP环境,接下来为大家简单进行网站配置的教程.
开始前我们明确一下所要安装服务的插件及开放的端口
Php7-fpm进程默认开放9000端口,Nginx默认开放80端口,也可以根据需要进行调整,Mysql开放3306端口。
本文中我们采用官方镜像进行docker源的加速。
拉取镜像
PHP
docker pull php:7.2.3
MySQL
docker pull mysql:5.7.21
Nginx(Tengine/openresty)
docker pull nginx:1.13.10
启动容器
启动容器时,需要注意各容器之间的关联关系。
在LNMP架构中,WEB服务器(Nginx)需要将PHP请求转发给php-fpm进行处理,而PHP要进行数据的存取,少不了和数据库(MySQL)进行交互,所以他们之间存在关联,那么启动时需要指定这些关联,这个关联使用networks参数来指定。
建立网络
docker network create my_net
docker run -it -d -p 3306:3306 --network my_net -e MYSQL_ROOT_PASSWORD=123456 -v /mnt/mysql:/var/lib/mysql --name mysql mysql:5.7.21
docker run -d -p 9000:9000 --name php -v --network my_net /mnt/html:/usr/local/openresty/nginx/html php:7.2.3 #PHP
docker run -d -p 80:80 --name nginx -v /mnt/html:/usr/local/openresty/nginx/html --network my_net nginx:1.13.10 #Nginx
启动时我们多使用了一个-v参数,这个参数的意思是挂载,作用是将宿主机的一个目录挂载到容器中指定的目录,这样,即使我们销毁了这个容器,那容器中的数据依然保留在宿主机上,不会丢失。比如数据库存放数据的data目录,WEB服务器存放代码的www目录,每个服务存放配置文件的目录等。
web_server:
image: nginx
ports:
- "80:80"
- "443:443"
volumes:
- /mnt/html:/usr/local/openresty/nginx/html
networks:
- "my_net"
db_server:
image: docker.io/mysql:5.7.21
environment:
MYSQL_ROOT_PASSWORD: 123456
ports:
- "3306:3306"
volumes:
- /mnt/mysql:/var/lib/mysql
networks:
- "my_net"
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
networks:
- "my_net"
networks:
my_net:
driver: bridge
保存为docker-compose.yml,并在该文件处执行启动命令docker-compose up -d
Starting mysql ... done
Starting php ... done
Starting nginx ... done
可以验证一下是否正常启动:
docker ps -a 或 docker-compose ps