利用 Dokcer 部署 PHP 开发环境

利用 Docker 手动配置 PHP + Njinx + MySQL 开发环境。

手动配置的方法为:先拉取一个 ubuntu 镜像并创建相应的容器,在容器内部进行 PHP 相关环境部署。关于 docker 的说明以及具体的安装的方法请参考官方文档。

更新:一次 docker-compose 的实践:Ezdock

1. 安装 docker

如果是在服务器端(以 ubuntu 为例),安装 docker 的基础操作有:

1
2
3
sudo apt-get install -y docker.io       #安装docker
service docker start #启动docker
service docker stop #关闭docker

简单说一下 image 与 container 的区别。前者为镜像,后者为容器,容器基于镜像,而我们平时用的 docker run 命令是从已有镜像中开启一个新的容器。

2. 拉取镜像

docker 成功运行以后:

1
2
sudo docker pull ubuntu 
#不指定版本,直接拉取一个 ubuntu 最新的 image ,如需指定版本可以用 ubuntu:16.04 的方式。

3. 创建测试容器

现在我们已经有了一个 ubuntu 的镜像,接下来创建测试容器:

1
2
3
4
5
6
7
sudo docker images  #查看所有镜像
sudo docker run -i -t --name="my_ubuntu" image_id /bin/bash
# 创建一个新的容器并运行,如果需要映射端口可以加上 -p 参数(如 -p 8083:80 ,前者为主机端口,后者为容器端口)。
# -i: 以交互模式运行容器,通常与 -t 同时使用;
# -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
# --name="my_ubuntu": 为容器指定一个名称;
sudo docker ps #查看正在运行的容器

另外,当我们 exit 一个容器时,因为没有加 -d 参数,所以容器也会 stop ,如果需要再次进入可以先启动容器:

1
docker start container_id

然后有两种方法重新进入交互状态,docker attach 与 docker exec -it 。用前者进入 container 时如果退出了容器,它依然会 stop ,而用后面的方式进入容器即使退出了交互界面 container 仍然会在后台运行。完整命令如下:

1
docker exec -it container_id /bin/bash

4. 环境搭建

现在我们已经进入了一个容器中,下面安装 PHP + Nginx + MySQL 的环境:

1
2
3
4
apt-get update
apt-get install nginx
apt-get install mysql-server
apt-get install php

为了方便测试可以自行 apt-get install net-tools, vim, curl, unzip 等工具。

5. 传输写好的代码

如果想要传输写好的代码到服务器上或者到 docker 中,有几条命令:

传输到服务器上(最好先打包为 zip ):

1
scp local_file remote_username@remote_ip:remote_path

传入 docker 容器中:

1
2
3
4
5
6
7
8
将主机 /www/runoob 目录拷贝到容器 96f7f14e99ab 的 /www 目录下:
docker cp /www/runoob 96f7f14e99ab:/www/

将主机 /www/runoob 目录拷贝到容器 96f7f14e99ab 中,目录重命名为 www :
docker cp /www/runoob 96f7f14e99ab:/www

将容器 96f7f14e99ab 的 /www 目录拷贝到主机的 /tmp 目录中:
docker cp 96f7f14e99ab:/www /tmp/

我们将代码解压至容器中 /var/www/html/ 目录下,但此时访问 php 会直接弹出下载而非解析,需要修改下 nginx 的配置文件,进入 /etc/nginx/sites-enabled/default ,修改 php 部分为:

1
2
3
4
5
6
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}

重启下 nginx 就可以解析 php 了,其他的配置网上已经有很多的教程,这里就不多说了。

6. 几条服务重启命令

1
2
3
/etc/init.d/mysql restart
/etc/init.d/nginx restart
/etc/init.d/php7.0-fpm restart

参考文章:

从零学习Docker部署环境

  1. 1. 1. 安装 docker
  2. 2. 2. 拉取镜像
  3. 3. 3. 创建测试容器
  4. 4. 4. 环境搭建
  5. 5. 5. 传输写好的代码
  6. 6. 6. 几条服务重启命令