使用Docker安装MySQL+PHP+Nginx

安装Docker社区版

curl -fsSL https://get.docker.com/ | sh

创建Docker内部网络

docker network create --subnet=172.18.0.0/16 mynetwork

下载MySQL镜像

docker pull mysql:5.6

配置MySQL容器启动脚本


#!/bin/bash
docker rm -f mysql
docker run -d --name mysql \
 --net mynetwork --ip 172.18.0.20 \
 -p 3333:3306 \
 -v /etc/localtime:/etc/localtime:ro \
 -v /mydata/mysql:/var/lib/mysql \
 -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:5.6
docker ps

解释:
设置容器的IP为172.18.0.20, 宿主机映射端口3333, 容器时区根据宿主机走, MySQL数据映射出来, 最后可设置root密码
具体可参考https://hub.docker.com/r/library/mysql/

下载Nginx+PHP镜像

docker pull 1and1internet/ubuntu-16-nginx-php-7.0

这个镜像基于Ubuntu, 集成并优化了php和nginx, 从dockerfile可以看到它的nginx配置在容器的/etc/nginx下面, 查看nginx.conf可以看到只有http节点, server节点是从另一个目录引用进来的/etc/nginx/sites-enabled/site.conf
dockerfile:https://hub.docker.com/r/1and1internet/ubuntu-16-nginx-php-7.0/~/dockerfile/
可以自己新建一个server配置映射进去

新建一个Web用户

useradd -u 65530 webuser

配置Nginx+PHP容器启动脚本


#!/bin/bash
USERID=65530
PORT=80
WEB_ROOT="/mydata/web/1.0/"

sudo docker rm -f nginx-php-7.0
sudo docker run -d --name nginx-php-7.0 \
 --net mynetwork --ip 172.18.0.30 \
 -v /etc/localtime:/etc/localtime:ro \
 -u ${USERID}:0 \
 -p ${PORT}:8081 \
 -v ${WEB_ROOT}:/var/www/ \
 -v /mydata/nginx/config/mysite.conf:/etc/nginx/sites-enabled/mysite.conf \
 -v /mydata/nginx/logs/:/var/log/nginx/ \
 1and1internet/ubuntu-16-nginx-php-7.0:latest
sleep 15
sudo docker ps

解释:
${WEB_ROOT}是自己网站在宿主机上的目录, /var/www是nginx server配置里的网站目录, 把自己新建的server配置mysite.conf映射到/etc/nginx/sites-enabled/目录下, log映射出来
具体可参考https://hub.docker.com/r/1and1internet/ubuntu-16-nginx-php-7.0/

PHP与MySQL链接

连接的地址可以使用Docker内部网络, 172.18.0.30:3306, 把刚才外网映射出来的3333加到防火墙, 比较安全.

欢迎加入技术交流群: 84436262

点赞

发表评论