菜单

Docker使用 – PHP分离式容器搭建

2018年5月5日 - 环境搭建

Docker作为当前普遍使用的开发、运行容器软件,具有开源、便捷、可移植性强、社区资源丰富等诸多优势。

作为一名开发者,应当学会使用Docker容器快速、灵活地搭建自己所需的开发环境。

作为一名熟练的PHP开发者,我之前一直在windows平台上IIS+mysql+php环境或在linux平台上搭建LAMP环境。然而在widnows平台上运行的环境普遍存在搭建繁琐、运行效率低下的问题。在ubuntu系统上使用apt软件源可以通过命令快速组装出LAMP环境,但是仍然存在可移植性差、每次使用配置繁琐等弊端。为此,我这次尝试了在ubuntu系统上配置docker容器环境。经过了两天地摸索与尝试,我终于成功在docker中搭建除了LNMP(Linux+Nginx+MySQL+PHP)环境,并可以灵活地切换php版本以支持更多应用。

以下,我将在这篇博文中记录我最终的搭建经验。

1.Docker环境的安装

在ubuntu系统中可以通过apt源十分方便地安装docker,

使用  sudo apt install docker-ce  命令可以快速从软件源安装docker的社区版安装软件。

2.从Docker镜像库拉取所需的镜像

在这次的环境搭建中,我们将把Nginx、MySQL、PHP三者分别作为独立的容器运行,以增强灵活性与便捷性。

使用

  docker pull mysql  

  docker pull nginx  

  docker pull php:5.6-fpm

命令来拉取所需的镜像。

之后可以使用   docker images   命令查看拉取的镜像。

注:从国内拉取官方服务器镜像较慢,可以考虑使用阿里云或网易的容器镜像加速服务。具体方法请自行搜索。

3.运行一个MySQL容器

使用

docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql

命令即可快速使用docker镜像建立一个mysql容器。


命令说明:


4.运行一个PHP-fpm容器

使用
docker run -p 9000:9000 –name dream-php -d -v ~/Workspace/tmp/www:/var/www/html:ro php:5.6-fpm

命令即可快速式哟噶docker镜像建立一个PHP-fpm容器。

注:挂载地址中地~/Workspace/tmp/www  是php文件存放地web目录,此目录需与后面nginx中配置的web目录一致。

5.运行一个Nginx容器

使用
docker run –name dream-nginx -p 80:80 -d -v ~/Workspace/tmp/www:/usr/share/nginx/html:ro -v ~/Workspace/tmp/docker/nginx/conf.d:/etc/nginx/conf.d:ro  nginx
命令即可快速创建一个Nginx容器。

注:挂载地址中地~/Workspace/tmp/www  是php文件存放地web目录,此目录需与前面PHP-fpm中配置的web目录一致。

 6.配置文件

Nginx的配置文件需要在创建容器之前编写好,才能成功挂载到容器中。Nginx的配置文件有/etc/Nginx/Nginx.conf和/etc/Nginx/conf.d/default.conf两个,前者是http协议和web服务器的总配置文件,而后者是web服务器的虚拟主机和模块配置文件。这里不需改动nginx.conf文件,因此仅贴出default.conf文件内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
server {
listen 80;
server_name localhost;

#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;

location / {
root /usr/share/nginx/html;
#root /www;
index index.html index.htm index.php;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 172.17.0.2:9000;  #此处需修改为对应php-fpm容器的IP地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;  #此处前半段需修改为网站路径
include fastcgi_params;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

 

7.参考资料

https://segmentfault.com/a/1190000007056245

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

38 − = 37
Powered by MathCaptcha