组织一个多容器项目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

相关文章

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(