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

2024-06-08 06:48

本文主要是介绍组织一个多容器项目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.22)通过--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=1234562)指定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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041454

相关文章

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文