本文主要是介绍组织一个多容器项目docker-compose,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1.容器的网络配置情况
- 2.实际操作
- 3.docker-compose教程
- 4.docker-compose镜像整体导出和还原
1.容器的网络配置情况
- 图1
- 在容器2中可以直接访问容器1,因为他们有共同的掩码
- 主机eth0通过路由的方式与docker0网卡进行通信
- 图2
- 外部想要从nginx中获取数据,首先需要到nginx的80端口,若是php文件,接着在php容器中解析,如果是读取数据库的文件,最后要到mysql中获取数据;
总共需要两个link,将php映射到nginx,将mysql映射到php中;docker run -it --name php --link munginx:nginx,docker run -it --name mysql --link php:php
2.实际操作
- 图1的相关操作
下面是nginx的容器的run和link方法
(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.2(2)通过--link参数将另一个容器映射到本容器里面,将alpine连接到munginx上(就是将munginx的映射到alpine)
munginx作为域名,可以被解析到nginx的IP
root@ubuntu:/# docker run -d -p80:80 --name munginx nginx
root@ubuntu:/# docker run -dit --link munginx:munginx alpine ##在alpine镜像上启动nginx容器,等价于:docker run -dit alpine --link munginx:munginx sh
root@ubuntu:docker exec -it 32 sh
/ # apk add curl
/ # curl munginx
/ # cat /etc/hosts
- 图2的相关操作:使用docker-compose,不使用link
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/htmlindex 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,会自动拉起镜像和启动容器
vim docker-compose.yml
version: "3"
service: ##指定服务nginx:images: nginx:alpine 镜像名:版本号ports:##相当于-p参数- 80:80volumes: ##相当于-v参数,目录的映射- /root/html:/usr/share/nginx/html- /root/conf/nginx.conf:/etc/nginx/nginx.confphp:image: devilbox/php-fpm:5.2-work-0.89volume:- /root/html:/var/www/htmlmysql:image: mysql:5.6enviroment:- MYSQL_ROOT_PASSWORD=123456(2)指定docker-compose为后台启动
docker-compose up -d
- 访问逻辑解释:
3.docker-compose教程
-
ref:Docker Compose
-
安装教程见:为Ubuntu系统添加新的普通用户
-
若alpine很慢,见:alpine切换源 安装慢 apk add很慢
docker-compose常用命令
- ref:docker-compose常用命令-详解
docker-compose 命令 --help 获得一个命令的帮助
docker-compose up -d nginx 构建启动nignx容器
docker-compose exec nginx bash 登录到nginx容器中
docker-compose down 此命令将会停止 up 命令所启动的容器,并移除网络
docker-compose ps 列出项目中目前的所有容器
docker-compose restart nginx 重新启动nginx容器
docker-compose build nginx 构建镜像
docker-compose build --no-cache nginx 不带缓存的构建
docker-compose top 查看各个服务容器内运行的进程
docker-compose logs -f nginx 查看nginx的实时日志
docker-compose images 列出 Compose 文件包含的镜像
docker-compose config 验证文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。
docker-compose events --json nginx 以json的形式输出nginx的docker日志
docker-compose pause nginx 暂停nignx容器
docker-compose unpause nginx 恢复ningx容器
docker-compose rm nginx 删除容器(删除前必须关闭容器,执行stop)
docker-compose stop nginx 停止nignx容器
docker-compose start nginx 启动nignx容器
docker-compose restart nginx 重启项目中的nignx容器
docker-compose run --no-deps --rm php-fpm php -v 在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器
docker默认位置:/var/lib/docker/containers/
日志是以-json.log结尾的
4.docker-compose镜像整体导出和还原
当前请使用docker-compose v2版本相关命令:docker compose
导出镜像
- 所有镜像一起打包:
docker compose images| awk 'FNR > 2 {print $2":"$3}'| sort -u|xargs docker save -o images.tar
- 每个镜像分别打包:
docker compose images | awk 'FNR > 2 {print $2":"$3}'| sort -u | sed 's/.*\/\(.*\?\):\(.*\)/\0 -o \1_\2.tar/g' | xargs -L 1 docker save
恢复镜像
docker load -i images.tar
参考:
- 参考
- docker-compose镜像整体导出和还原
这篇关于组织一个多容器项目docker-compose的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!