docker多容器搭建应用栈(lnmp)

问题:多容器有什么好处?具体代码放哪?
每个服务都放在独立的容器中,这样可以自由的变更版本。例如php是一个容器,可以很轻松的更换版本;
代码是放在主机中的,然后通过docker run的-v参数(数据卷)共享给每个需要的容器,编码的时候,只需要在主机本地修改代码就可以了,容器中会同步的。


> curl -X GET http://1.1.1.100:5000/v2/_catalog
{"repositories":["centos","memcached","mysql","nginx","php","redis"]}

一、部署容器

1. nginx

  • 启动nginx容器
docker run --name lnmp-nginx -d -p 82:80 -v /data/docker/www:/usr/share/nginx/html -v /data/docker/contains/conf/nginx:/etc/nginx 1.1.1.100:5000/nginx

参数说明:

--name lnmp-nginx:容器名
-p 82:80:宿主机的82端口转到容器内80端口
-v /data/docker/www:/usr/share/ngnx/html:把代码目录挂载到容器内的nginx目录
-v /data/docker/contains/conf/nginx:/etc/nginx:挂载nginx的配置文件
关于Docker的目录挂载

  • 进容器查看挂载目录
> docker exec -it lnmp-nginx bash
root@96e5599affa9:/# ls /etc/nginx/           
conf.d     fastcgi.conf      fastcgi_params      hostname  koi-utf  mime.types      nginx       nginx.conf.default  scgi_params      uwsgi_params      win-utf
default.d  fastcgi.conf.default  fastcgi_params.default  hosts     koi-win  mime.types.default  nginx.conf  resolv.conf     scgi_params.default  uwsgi_params.default

root@96e5599affa9:/# ls /usr/share/nginx/html/
index.html
root@96e5599affa9:/# cat /usr/share/nginx/html/index.html 
123

浏览器访问

nginxx
  • 在nginx中加入php配置
location ~ \.php$ {
    root           /usr/share/nginx/html;
    fastcgi_pass   1.1.1.100:9002;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
    include        fastcgi_params;
}

/var/www/html/其实是另外一个容器php-fpm里的workdir

2. php

  • 启动php容器
docker run --name lnmp-php -d -p 9002:9000 -v /data/docker/www:/var/www/html 1.1.1.100:5000/php

测试

> cat /data/docker/www/index.php 
<?php
phpinfo();
?>

浏览器访问

php

成功

3. mysql

说明下,mysql我用的mariadb的image;

  • 启动mysql容器
docker run --name lnmp-mysql -e MYSQL_ROOT_PASSWORD=123456 -d -p 3366:3306 1.1.1.100:5000/mysql

进入容器访问mysql

> docker exec -it lnmp-mysql bash
root@359cb35a3dc5:/# mysql -uroot -p123456
MariaDB [(none)]> create database test;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use test
Database changed

MariaDB [test]> CREATE TABLE xx (id int, title char(20)) ENGINE = INNODB;    
Query OK, 0 rows affected (0.01 sec)

MariaDB [test]> INSERT INTO xx VALUES('1','www.baidu.com'),('2','www.taobao.com'),('3','www.tencent.co>
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

MariaDB [test]> select * from xx;                                   
+------+-----------------+
| id   | title           |
+------+-----------------+
|    1 | www.baidu.com   |
|    2 | www.taobao.com  |
|    3 | www.tencent.com |
+------+-----------------+
3 rows in set (0.00 sec)
  • 编写php测试页面访问mysql
<?php
$con = mysql_connect("1.1.1.100:3366","root","123456");
if (!$con)
  {
  die('数据库连接失败: ' . mysql_error());
  }
  else
  {
  mysql_query("SET NAMES UTF8");
  mysql_query("set character_set_client=utf8"); 
  mysql_query("set character_set_results=utf8");
  mysql_select_db("demosql", $con);
  $result = mysql_query("SELECT * FROM xx");
  //在表格中输出显示结果
  echo "<table border='1'>
<tr>
<th>id</th>
<th>name</th>
</tr>";
  while($row = mysql_fetch_array($result))
  {
 echo "<tr>";
 echo "<td>" . $row['id'] . "</td>";
 echo "<td>" . $row['title'] . "</td>";
 echo "</tr>";
  }
  echo "</table>";
}
mysql_close($con);
?>

这个页面是百度撸的

  • 浏览器访问
    报错:
**Fatal error**: Call to undefined function mysql_connect() in **/var/www/html/test.php** on line **3**

汗,好尴尬,官方的php编译的模块极少,没有mysql模块
于是赶紧换个php镜像

docker pull kvaps/php-mysql

配置后访问

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

推荐阅读更多精彩内容

  • 系统环境 所需软件官方下载地址: 一、 安装开发包环境: 二、 关闭iptables和Selinux(生产...
    莫名其妙的一生阅读 1,289评论 0 4
  • 使用单一进程容器,即一个容器只运行一种服务,而不是把所有服务放在一个容器的设计,让PHP项目需要的Nginx、PH...
    dodos阅读 21,251评论 22 42
  • 由于当前多数服务器都是Linux的原因,本文只讲ubuntu下的安装! 第一步:安装docker 安装教程:htt...
    cfygaoyang阅读 2,772评论 1 4
  • 前言:本篇文章不介绍docker的安装,如未安装,请自行下载安装 1.镜像的下载: 2.编写创建容器的脚本 编写生...
    Steven_coder阅读 938评论 1 21
  • 在开发中,有时候必须使用真机进行调试,但是直接运行xcode安装到测试设备(俗称刷包),那你的安装的应用的证书环境...
    healthbird阅读 410评论 0 1