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

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

  • 查看所需镜像
    # 这个是我的私有镜像仓库,私有仓库搭建参考 centos7搭建docker本地regsitry

> 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

浏览器访问

docker多容器搭建应用栈(lnmp)_第1张图片
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 

浏览器访问

docker多容器搭建应用栈(lnmp)_第2张图片
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


id
name
";
  while($row = mysql_fetch_array($result))
  {
 echo "";
 echo "" . $row['id'] . "";
 echo "" . $row['title'] . "";
 echo "";
  }
  echo "";
}
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

配置后访问

docker多容器搭建应用栈(lnmp)_第3张图片
php
  • ok,docker搭建lnmp完毕,后期可以考虑增加个zabbix

你可能感兴趣的:(docker多容器搭建应用栈(lnmp))