Docker($k)搭建一套php开发环境

导语

下面内容将介绍如何把容器当作一个命令来使用以及搭建一套php+nginx的 web 服务,这里需要两个镜像,用两个镜像的主要目的是学习如何让 Docker 容器之间相互通信。阅读完下面的内容就可以搭建自己的 Docker 服务了。

把 php 容器当作命令行使用

镜像下载:
docker pull php:7.0-fpm-alpine php
这里的镜像是基于 alpine 系统的,因为基于alpine系统的镜像文件会比较小,下载速度更快。由于国内下载镜像文件较慢,推荐使用镜像加速器DaoCloud

图一:docker images | grep php

下载镜像是为了搭建一个 web 服务,如果只想简单的使用 php 命令行,怎么办?我们知道从镜像启动的容器中肯定是可以使用命令行,如果每次使用 php 命令行都进入容器,显得特别麻烦,其实 Docker 可以这样用:
docker run -it --rm php:7.0-fpm-alpine php --version

图二:把php容器当作命令行使用

命令比较长,给它设置个别名就好多了。下面介绍下相关参数:
-i:以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--rm:容器退出时自动删除,如果不加这个参数,当你执行完上面的命令,php容器会退出,变为一个暂停状态的容器,通过 docker ps -a 可以查询到;
php --version:在容器名后面的字符会被当作容器的shell命令来处理;
*注:关于参数 -i -t ,这里上面的命令可以不加,因为没有交互操作,在使用node容器的命令行时会有交互,需要加上,两个参数同时使用就好:
docker run -i -t --rm node:alpine node

图三:node容器命令行的使用

想用容器同时执行多个命令,不能直接在后面加 &&,需要使用 sh -c来实现,:
docker run --rm php:7.0-fpm-alpine sh -c ' echo "123" && echo "456" '

启动php服务

执行命令:

docker run \
    -d \
    --name php \
    -v /root/docker/etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini:ro \
    -v /root/docker/html:/var/www/html \
    php:7.0-fpm-alpine

-d:后台运行容器,并且返回容器 ID;
--name:给容器命名,容器名是唯一的,操作容器时可以使用名称代替容器 ID;
:ro:表示挂载的文件或者文件夹为只读模式;
从命令可以知道容器是后台运行,名字是 php,它挂载了主机的一个文件 php.ini 和一个目录 /root/docker/html,并且 php.ini 是只读的,所以在容器内不可以对这个文件做修改。/usr/local/etc/php/conf.d 这个目录是容器中的 php 读取用户自定义配置文件的目录,正常情况下都可以在 Docker Hub 上有说明,如果没有可以自己运行 phpinfo(); 来查看。之前介绍过,只要挂载,那么本地主机目录就会和容器内的目录同步。需要修改容器的 php 配置时,只要在主机本地编辑保存这个 php.ini 文件,然后执行:
docker restart php (php是容器名字)

php 容器和 nginx 容器通信

首先下载nginx镜像:
docker pull nginx:stable-alpine
启动 nginx 服务:

docker run \
    -d \
    --link php \
    --name nginx \
    -v /root/docker/etc/nginx/conf.d/:/etc/nginx/conf.d/ \
    -v /root/docker/html:/var/www/html \
        -v /var/log/nginx:/var/log/nginx \
    -p 8088:80 \
    nginx:stable-alpine

--link:确保 nginx 可以与 php 之间通信,在 nginx 容器中直接 ping php 是可以通的,实际上加上这个参数后,会在 nginx 容器增加 host 解析,如图:

图四:nginx与php之间通信

增加 nginx 虚拟主机配置,放到主机目录 /root/docker/etc/nginx/conf.d 下:

server {
    listen 80;
    root /var/www/html;
    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;

    location ~ \.php$ {
        fastcgi_pass php:9000;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log  debug;
}

fastcgi_pass 后面使用的 php 就是 --link 参数增加的host解析,直接用别名代替ip地址,更加方便。然后重启 nginx 服务:
docker restart nginx
在 主机本地的 /root/docker/html 目录新建 index.php:
echo "<?php\nphpinfo();" | tee /root/docker/html/index.php
现在一个 web 服务搭建好了,如图:

图五:web服务

查看 nginx 日志

容器内 nginx 的日志会写入容器内的 /var/log/nginx 目录下,由于这个目录和主机的 /var/log/nginx 目录是同步的,所以,想看容器内 nginx 的日志,查看主机的文件 /var/log/nginx/access.log 就可以:
tail -f /var/log/nginx/access.log

图六:本地查看nginx容器访问日志

结语

基本的启动配置服务的命令上面都有介绍,自己可以尝试给这个 web 服务增加个 mysql
存储功能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,532评论 15 147
  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 8,748评论 1 21
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,499评论 0 120
  • 0. 前言 docker是什么?docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可...
    sessionboy阅读 3,854评论 2 49
  • 别名:巴戟、巴吉天、戟天、巴戟肉、鸡肠风、猫肠筋、兔儿肠 基源植物:茜草科巴戟天属植物巴戟天的干燥根。 拉丁学名:...
    本草园丁阅读 3,720评论 0 1