Docker安装PHP、NGNIX、MYSQL,并LINK

centos环境下,先确认是否安装docker,如未安装,使用 yum install docker 或者yum -y install docker-io进行安装

一、安装PHP


查看镜像

docker images

在镜像列表里可以确认 镜像名版本,如果需要

查看container

docker ps

可以用来查看当前已经运行的docker容器

查找

docker search php

下载

docker pull php:7.2-fpm

* 注意:不要直接docker pull php,官方php镜像里没有安装fpm相关

运行PHP镜像

docker run --restart=always -p 9000:9000 --name php -v /data/www:/www -idt php:7.2-fpm

注解:

  • run --restart=always : 保证docker重启的时候container会跟随自动运行
  • -p 9000:9000 : 宿主端口9000映射容器端口9000
  • --name php : 容器命名php
  • -v /data/www:/www : 目录映射,宿主目录/data/www映射到容器目录/www
  • -i : 以交互模式运行容器,通常与 -t 同时使用
  • -t : 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • -d : 后台运行容器,并返回容器ID;

进入PHP容器

docker exec -it php /bin/bash

容器内查看PHP信息

php --ini

得到类似如下信息:

Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File:         /usr/local/etc/php/php.ini
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed:      /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini

这样就能看到关键文件php.ini的位置
也可以直接使用:

php -i|grep php.ini

得到类似如下信息:

Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini

常规配置文件结构如下:

/usr/local/etc  
|-- log
|   `-- php-fpm
|       `-- xdebug.log
|-- pear.conf
|-- php
|   |-- conf.d
|   |   |-- docker-php-ext-gd.ini
|   |   |-- docker-php-ext-mysqli.ini
|   |   |-- docker-php-ext-opcache.ini
|   |   |-- docker-php-ext-pdo_mysql.ini
|   |   |-- docker-php-ext-redis.ini
|   |   |-- docker-php-ext-sodium.ini
|   |   |-- docker-php-ext-xdebug.ini
|   |   |-- docker-php-ext-yaf.ini
|   |   `-- docker-php-ext-zip.ini
|   `-- php.ini
|-- php-fpm.conf
|-- php-fpm.conf.default
`-- php-fpm.d
    |-- docker.conf
    |-- www.conf
    |-- www.conf.default
    `-- zz-docker.conf

二、安装MYSQL


查找

docker search mysql

下载

docker pull mysql

* 注意:

运行MYSQL镜像

docker run --restart=always --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

注解:

  • -e MYSQL_ROOT_PASSWORD : 配置信息,此处配置mysqlroot用户的登陆密码

三、安装NGNIX


查找

docker search ngnix

下载

docker pull ngnix

运行NGNIX镜像并Link

docker run --restart=always --name lnmp -p 8080:80 \
--link mysql:mysql --link php:php \
-v /www:/www -v /etc/nginx:/etc/nginx:ro \
--volumes-from php \
-idt nginx

注解:

  • --link mysql:mysql : --link <name or id>:alias原容器名或者ID映射到自定义别名
  • -v /www:/www : 将宿主的/www目录映射到容器的www目录
    注意:php的文件目录和nginx必须保持一致,避免一些意外情况
  • -v /etc/nginx:/etc/nginx:ro : 将宿主的/etc/nginx配置文件目录映射到容器的/etc/nginx配置文件目录,且ro : 只读
  • --volumes-from php : 将php容器挂载的卷也挂载到了nginx容器上

Docker提供了多个容器直接访问的方法,最简单的方式是直接使用端口映射-p参数指定映射的端口或者-P映射所有端口,多个容器直接通过网络端口进行访问。
但网络端口映射方式并不是Docker中连接多个容器的唯一方式,还可以使用Docker的连接系统(--link)连接多个容器,当容器连接到一起时,接受者容器就可以看到源容器的信息。

default.conf配置信息:

server {
    listen       80;
    server_name  localhost #域名或者IP;

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

    location / {
        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   php:9000; #因为用了link,所以直接用link后的容器别名
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www$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;
    #}
}

到这里,就基本配置完成了。

四、其它


环境变量

docker在连接容器的时候,会根据--link提供的参数自动的在接收者容器中创建一些环境变量,包括源容器的Dockerfile中使用ENV命令设置的环境变量和源容器启动时(docker run),使用-e或者--env--env-file参数指定的环境变量。

我们使用以下方式:

docker exec lnmp env

得到类似如下信息:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=313b081ac042
MYSQL_PORT=tcp://172.17.0.4:3306
MYSQL_PORT_3306_TCP=tcp://172.17.0.4:3306
MYSQL_PORT_3306_TCP_ADDR=172.17.0.4
MYSQL_PORT_3306_TCP_PORT=3306
MYSQL_PORT_3306_TCP_PROTO=tcp
MYSQL_NAME=/lnmp/mysql
MYSQL_ENV_MYSQL_ROOT_PASSWORD=123456
MYSQL_ENV_GOSU_VERSION=1.7
MYSQL_ENV_MYSQL_MAJOR=8.0
MYSQL_ENV_MYSQL_VERSION=8.0.11-1debian9
PHP_PORT=tcp://172.17.0.3:9000
PHP_PORT_9000_TCP=tcp://172.17.0.3:9000
PHP_PORT_9000_TCP_ADDR=172.17.0.3
PHP_PORT_9000_TCP_PORT=9000
PHP_PORT_9000_TCP_PROTO=tcp
PHP_NAME=/lnmp/php
PHP_ENV_PHPIZE_DEPS=autoconf            dpkg-dev                file            g++             gcc             libc-dev                make            pkg-config              re2c
PHP_ENV_PHP_INI_DIR=/usr/local/etc/php
PHP_ENV_PHP_EXTRA_CONFIGURE_ARGS=--enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi
PHP_ENV_PHP_CFLAGS=-fstack-protector-strong -fpic -fpie -O2
PHP_ENV_PHP_CPPFLAGS=-fstack-protector-strong -fpic -fpie -O2
PHP_ENV_PHP_LDFLAGS=-Wl,-O1 -Wl,--hash-style=both -pie
PHP_ENV_GPG_KEYS=1729F83938DA44E27BA0F4D3DBDB397470D12172 B1B44D8F021E4E2D6021E995DC9FF8D3EE5AF27F
PHP_ENV_PHP_VERSION=7.2.11
PHP_ENV_PHP_URL=https://secure.php.net/get/php-7.2.11.tar.xz/from/this/mirror
PHP_ENV_PHP_ASC_URL=https://secure.php.net/get/php-7.2.11.tar.xz.asc/from/this/mirror
PHP_ENV_PHP_SHA256=da1a705c0bc46410e330fc6baa967666c8cd2985378fb9707c01a8e33b01d985
PHP_ENV_PHP_MD5=
NGINX_VERSION=1.13.12-1~stretch
NJS_VERSION=1.13.12.0.2.0-1~stretch
HOME=/root

上述例子中,指定了容器的别名,因此所有环境变量都是以别名开头。

注意的是,如果源容器重启,接收容器中的环境变量信息并不会自动更新,因此,如果要使用源容器的IP地址,请使用/etc/hosts中配置的主机信息。

/etc/hosts文件

除了环境变量之外,docker也在接收容器的/etc/hosts文件中更新了hosts信息。

docker exec -it lnmp cat /etc/hosts

可以看到类似如下信息:

127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.4      mysql da857bbf0bc2
172.17.0.3      php f56712241b85
172.17.0.5      313b081ac042

从上可以看出,在接收容器的hosts文件中增加了额外的信息,本机IP和别名以及源容器的IP和别名。

与环境变量不同的是,如果源容器重启了,接收容器中/etc/hosts中的信息会自动更新。


参考:

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

推荐阅读更多精彩内容

  • 最近研究了几天docker的快速部署,感觉很有新意,非常轻量级和方便,打算在公司推广一下,解放运维,省得每次部署一...
    Helen_Cat阅读 1,314评论 0 4
  • 1. 学习步骤 Docker简介Docker中的基本概念Docker安装设置DockerDocker的应用操作Do...
    红尘一落君莫笑阅读 4,539评论 0 101
  • 本来想着孕期好好记录下,多写些东西,多拍一些照片,结果忙的什么都没做,孕照也没拍,离预产期还有4天,还顾着把单子填...
    张粤丹阅读 103评论 0 0
  • 开一朵花 递一份暖 曹晨希 正值春天,阳光融融的暖,点点阳光在被风吹动的叶片上,不断的跳跃,闪动着,那么的绚丽,仿...
    简约语文阅读 778评论 0 1
  • 槐花路18号的花园洋房里住着一个寡妇,年轻漂亮。 小镇的人不是很喜欢这个新搬来的女人,尤其还是个年级不大的寡妇。张...
    程璟阅读 617评论 0 11