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

相关文章

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

如何将Tomcat容器替换为Jetty容器

《如何将Tomcat容器替换为Jetty容器》:本文主要介绍如何将Tomcat容器替换为Jetty容器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat容器替换为Jetty容器修改Maven依赖配置文件调整(可选)重新构建和运行总结Tomcat容器替

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa