问题:多容器有什么好处?具体代码放哪?
每个服务都放在独立的容器中,这样可以自由的变更版本。例如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
浏览器访问
- 在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();
?>
浏览器访问
成功
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
配置后访问
- ok,docker搭建lnmp完毕,后期可以考虑增加个zabbix