组织一个多容器项目docker-compose

1.容器的网络配置情况

  • 图1
  • 在容器2中可以直接访问容器1,因为他们有共同的掩码
  • 主机eth0通过路由的方式与docker0网卡进行通信
    在这里插入图片描述
  • 图2
  • 外部想要从nginx中获取数据,首先需要到nginx的80端口,若是php文件,接着在php容器中解析,如果是读取数据库的文件,最后要到mysql中获取数据;
    创建容器的顺序必须是:先创建mysql,再创建php,最后创建nginx;
    总共需要两个link,在php中连接mysql,在nginx中连接php;
    将php映射到nginx,将mysql映射到php中;
    在这里插入图片描述

2.实际操作

  • 图1的相关操作
1)
root@ubuntu:/# docker run -d -p80:80 --name munginx nginx
root@ubuntu:/# docker exec -it munginx bash
root@b03e4fe98393:/# cat /etc/hosts
。。。。
172.17.0.2	b03e4fe98393

在容器alpine中,通过curl访问nginx容器,alpine是最小的linux系统
root@ubuntu:/# docker run -dit alpine
root@ubuntu:/# docker exec -it 47db684c3721 sh
/ # apk add curl
/ # curl 172.17.0.22)通过--link参数将另一个容器映射到本容器里面
munginx作为域名,可以被解析到nginx的IP
root@ubuntu:/# docker run -d -p80:80 --name munginx nginx
root@ubuntu:/# docker run -dit --link munginx:munginx alpine
root@ubuntu:docker exec -it 32 sh
/ # apk add curl
/ # curl munginx 
/ # cat /etc/hosts
  • 图2的相关操作
root@ubuntu:/home/jiwangreal/dockertest# mkdir conf
root@ubuntu:/home/jiwangreal/dockertest# mkdir html
root@ubuntu:/home/jiwangreal/dockertest# cd html/
root@ubuntu:/home/jiwangreal/dockertest/html# vim index.html

监测php是否运行成功
root@ubuntu:/home/jiwangreal/dockertest/html# vim test.php  

mysql的数据库访问
root@ubuntu:/home/jiwangreal/dockertest/html# vim mysql.php

========上述三个文件的设置结果=======
root@ubuntu:/home/jiwangreal/dockertest/html# cat index.html 
index.html
root@ubuntu:/home/jiwangreal/dockertest/html# cat mysql.php 
<?php
$dbhost = "mysql";
$dbuser = "root";
$dbpass = "123456";
 
// 创建连接
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
 
// 检测连接
if (!$conn) {
    die("mysql not connect " . mysqli_error());
} 
echo "mysql connected";
mysqli_close($conn);
?>
root@ubuntu:/home/jiwangreal/dockertest/html# cat test.php 
<?php
phpinfo();
========上述三个文件的设置结果=======


root@ubuntu:/home/jiwangreal/dockertest/conf# vim nginx.conf
。。。
location /		##监听/目录,若没有匹配的话,将该目录/usr/share/nginx/html的文件映射出来
{
	root /usr/share/nginx/html
	index index.html index.htm;
}
。。。
。。。
location ~ \.php$     ##表示以php结尾的文件
{
	fastcgi_pass php:9000; ##php是个域名
	fastcgi_index index.php;
	##在php容器下寻找/var/www/html/目录下的$fastcgi_script_name php的脚本文件
	fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
	include fastcgi_params;
}

  • 下面的/root目录用/home/jiwangreal/dockertest/代替

在这里插入图片描述

1)在根目录下面写docker compose

version: "3"
service:
	nginx:
		images: nginx:alpine             镜像名:版本号
		ports:##相当于-p参数
		- 80:80
		volumes:  ##相当于-v参数,目录的映射
		- /root/html:/usr/share/nginx/html
		- /root/conf/nginx.conf:/etc/nginx/nginx.conf
	php:
		image: devilbox/php-fpm:5.2-work-0.89
		volume:
		- /root/html:/var/www/html
	mysql:
		image: mysql:5.6
		enviroment:
		- MYSQL_ROOT_PASSWORD=1234562)指定docker-compose为后台启动
docker-compose up -d		
  • 访问逻辑解释:
    在这里插入图片描述

参考:

https://www.bilibili.com/video/av61131351
发布了582 篇原创文章 · 获赞 143 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/u011436427/article/details/104324230