Docker--Docker Compose(容器编排)

什么是 Docker Compose

Docker Compose是Docker官方的开源项目,是一个用于定义和运行多容器Docker应用程序的工具。

  • 服务(Service):在Docker Compose中,一个服务实际上可以包括若干运行相同镜像的容器实例,代表一个应用的容器。例如,一个Web应用、数据库等都可以被视为一个服务。
  • 项目(Project):由一组关联的应用容器组成的一个完整业务单元。在docker-compose.yml文件中定义,整个docker-compose.yml文件定义一个项目。Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷的生命周期管理。

核心功能

  • 定义和运行多容器应用:通过docker-compose.yml文件,用户可以定义多个容器的配置信息,包括容器之间的依赖关系、网络配置、数据卷管理等。然后,只需一个命令(如docker-compose up),就可以创建并启动所有定义的容器。
  • 容器编排:Docker Compose支持容器的编排,可以根据容器的依赖关系自动启动和停止容器,确保应用在运行时具有正确的环境。
  • 网络配置:Docker Compose支持自定义网络配置,使得容器之间的通信更加灵活和可靠。服务之间可以通过网络通信,Compose会自动创建网络。
  • 数据卷管理:Docker Compose支持数据卷的挂载和管理,可以轻松地共享和持久化容器数据。

docker-compose.yml文件

docker-compose.yml 文件是 Docker Compose 的核心配置文件,用于定义和运行多容器 Docker 应用程序。
这个文件遵循 YAML格式,包含了一系列关于服务、网络、卷等配置的信息。

以下是一个基本的 docker-compose.yml 文件示例,以及一些关键字段的解释:

version: '3.8'  # 指定 Compose 文件的格式版本services:  # 定义服务(容器)的列表web:image: nginx:latest  # 指定容器使用的镜像ports:- "80:80"  # 将主机的80端口映射到容器的80端口volumes:- ./html:/usr/share/nginx/html  # 将主机的./html目录挂载到容器的/usr/share/nginx/html目录networks:- mynetwork  # 指定容器使用的网络db:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: example  # 设置环境变量volumes:- db_data:/var/lib/mysql  # 使用命名卷存储数据库数据networks:- mynetworknetworks:  # 定义自定义网络mynetwork:driver: bridge  # 使用桥接网络模式volumes:  # 定义命名卷db_data:

在这个示例中:

  • version 字段指定了 Compose 文件的版本。不同版本的 Compose 文件支持不同的配置选项。(最新版本使用的是name,version已经被舍弃)
  • services 字段下定义了一个或多个服务(容器)。在这个例子中,定义了两个服务:web 和 db。
  • image 字段指定了容器使用的 Docker 镜像。
  • ports 字段定义了端口映射。
  • volumes 字段用于数据持久化或数据共享,可以挂载主机目录到容器目录,或使用命名卷。
  • environment 字段用于设置环境变量。
  • networks 字段指定了容器使用的网络。
  • networks 字段定义了一个或多个自定义网络。在这个例子中,定义了一个名为 mynetwork 的桥接网络。
  • volumes 字段定义了一个或多个命名卷。在这个例子中,定义了一个名为 db_data 的卷,用于存储 MySQL 数据库的数据。

注意,YAML 文件对缩进非常敏感,因此请确保每个字段都正确缩进
此外,根据实际需求,您可以添加更多配置选项或自定义服务、网络和卷。

详细参考官方文档:https://docs.docker.com/reference/compose-file/version-and-name/

docker compose 常用命令

  • docker-compose up:创建并启动容器。
  • docker-compose down:停止并删除容器、网络和卷(如果使用–volumes选项)。
  • docker-compose start:启动服务。
  • docker-compose stop:停止服务。
  • docker-compose restart:重启服务。
  • docker-compose logs:查看容器日志。
  • docker-compose ps:列出所有容器。
  • docker-compose config:检查docker-compose.yml文件的配置。

详细参考官方文档:https://docs.docker.com/reference/cli/docker/compose/

Docker Compose 基本操作

创建一个目录并进入到该目录下:

mkdir -p /data/ahri/compose/base
cd /data/ahri/compose/base

创建一个yml文件

vi docker-compose.yml

编写配置文件,注意,格式一定要正确

name:test_compose
services:web:image: nginx:1.24.0environment:TEST: 1ports:- 8979:80networks:- mytestnetvolumes:- ./mynginxhome:/usr/share/nginx/htmldepends_on:mysql:condition: service_healthy redis:condition: service_healthymysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: "bit@123"networks:- mytestnetvolumes:- /data/maxhou/mysqldata/varlib/:/var/lib/mysqlhealthcheck:test: mysql --user=root --password='bit@123' -e "SELECT 1;"interval: 10stimeout: 5sretries: 10redis:image: redis:7networks:- mytestnethealthcheck:test: redis-cli pinginterval: 10stimeout: 5sretries: 10networks:mytestnet:

通过该命令查看配置文件是否出现错误:

docker compose config

创建首页目录,编辑首页内容:

mkdir -p ./mynginxhome
cd ./mynginxhome
echo "Test Docker Compose" > index.html

启动服务:

docker compose up -d

在这里插入图片描述
查看运行的容器:
在这里插入图片描述
通过浏览器测试访问:
在这里插入图片描述
进入nginx容器查看环境变量TEST:

docker exec  -it test_compose-web-1 bash

在这里插入图片描述
停止服务:

docker compose stop

在这里插入图片描述
启动服务:

docker compose start

在这里插入图片描述
删除服务:

docker compose down

在这里插入图片描述

配置文件解析

当前项目的命名:
在这里插入图片描述
在这里插入图片描述
设置镜像为nginx:1.23.4 ,环境变量为TEST,端口映射为8080,连接网络为mytestnet,映射卷为mynginxhome;
依赖关系分别是mysql和redis;condition可以设置满足依赖项条件;
mysql和redis启动前都会进行健康检查,只有健康了才满足该条件;
在这里插入图片描述
镜像为mysql:5.7 ,并设置密码;连接网络mytestnet;映射卷为varlib;
healthcheck就是健康检查:通过test进行测试,规定时间为10s;错误超时不过5s,重试次数为10 ;

redis也是跟mysql配置服务相同;
在这里插入图片描述
通过networks来创建一个docker network.

Docker部署WordPress

WordPress

WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。
WordPress 是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP 语言和 MySQL 数据库开发的,用户可以在支持 PHP 和 MySQL 数据库的服务器上使用自己的博客。

利用docker compose进行部署

1.编写yml配置文件
对项目进行命名:
在这里插入图片描述
在这里插入图片描述
服务db:创建镜像mysql 存储卷为db_data,设置环境变量,最后进行健康检查;
restart定义平台在容器终止时应用的策略。
always:该策略始终重新启动容器,直到将其删除。

在这里插入图片描述

name: docker_WordPressservices:db:image: mysql:5.7volumes:- ./db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: mywordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresshealthcheck:test: mysql --user=root --password='mywordpress' -e "SELECT 1;"interval: 10stimeout: 5sretries: 10wordpress:depends_on:db:condition: service_healthyimage: wordpress:latestports:- "8081:80"restart: alwaysvolumes: - ./wordpress:/var/www/htmlenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpress

通过该命令对配置文件进行自动检查,直到没有报错:

docker compose config

在这里插入图片描述
可以看到,如果我们网络没有创建一个docker network,那么会自动配置一个默认的网络

通过浏览器访问ip:
在这里插入图片描述
配置参数,点击安装.

进入容器,查看我们数据库存储的数据:

docker exec -it docker_wordpress-db-1 bash
mysql -u wordpress -p

在这里插入图片描述

use wordpress;

在这里插入图片描述
在这里插入图片描述
查看使用者:

select user_login from wp_users;

可以看到我们数据是放到我们的数据库中了.

退出,并释放空间:

docker compose down

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建docker私有化仓库Harbor

Docker私有仓库概述 Docker私有仓库介绍 Docker私有仓库是个人、组织或企业内部用于存储和管理Docker镜像的存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部…

本地视频进度加入笔记+根据进度快速锁定视频位置

本地视频进度记录快速回溯 引言 在学习的过程中, 如果我们想快速记录当前看视频的位置, 后续回溯查找就会非常方便了。 实现效果 进度记录 通过按下快捷键ctrlaltu, 快速记录当前视频的进度信息,然后复制到typora软件内 快速回溯 在typora软件内, 选中视频索引…

网络传输层TCP协议

传输层TCP协议 1. TCP协议介绍 TCP(Transmission Control Protocol,传输控制协议)是一个要对数据的传输进行详细控制的传输层协议。 TCP 与 UDP 的不同,在于TCP是有连接、可靠、面向字节流的。具体来说,TCP设置了一大…

《自动驾驶与机器人中的SLAM技术》ch7:基于 ESKF 的松耦合 LIO 系统

目录 基于 ESKF 的松耦合 LIO 系统 1 坐标系说明 2 松耦合 LIO 系统的运动和观测方程 3 松耦合 LIO 系统的数据准备 3.1 CloudConvert 类 3.2 MessageSync 类 4 松耦合 LIO 系统的主要流程 4.1 IMU 静止初始化 4.2 ESKF 之 运动过程——使用 IMU 预测 4.3 使用 IMU 预测位姿进…

LeetCode 每日一题 2025/1/6-2025/1/12

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 1/6 2274. 不含特殊楼层的最大连续楼层数1/7 3019. 按键变更的次数1/8 2264. 字符串中最大的 3 位相同数字1/9 3297. 统计重新排列后包含另一个字符串的子字符串数目 I1/10…

《解锁鸿蒙Next系统人工智能语音助手开发的关键步骤》

在当今数字化时代,鸿蒙Next系统与人工智能的融合为开发者带来了前所未有的机遇,开发一款人工智能语音助手应用更是备受关注。以下是在鸿蒙Next系统上开发人工智能语音助手应用的关键步骤: 环境搭建与权限申请 安装开发工具:首先需…

基于大语言模型的组合优化

摘要:组合优化(Combinatorial Optimization, CO)对于提高工程应用的效率和性能至关重要。随着问题规模的增大和依赖关系的复杂化,找到最优解变得极具挑战性。在处理现实世界的工程问题时,基于纯数学推理的算法存在局限…

Redis 代理( Twemproxy 或 Redis Proxy)

文章目录 TwemproxyTwemproxy 的主要特性Twemproxy 的部署架构Twemproxy 的配置示例安装 Twemproxy配置文件(YAML 示例)启动 Twemproxy Twemproxy 的优缺优点缺点 Redis ProxyRedis Proxy 的主要特性Redis Proxy 的部署架构Redis Proxy 的配置和使用Twem…

【数据库】Unity 使用 Sqlite 数据库

1.找到需要三个 DLL Mono.Data.Sqlite.dllSystem.Data.dllsqlite3.dll 上面两个dll可在本地unity安装目录找到: C:\Program Files\Unity\Hub\Editor\2022.3.xxf1c1\Editor\Data\MonoBleedingEdge\lib\mono\unityjit-win32 下面dll可在sqlite官网下载到&#xff…

冒泡排序基础与实现

目录 1. 原理图 ​编辑 2. 什么是冒泡排序 3. 工作原理 3.1 具体步骤 3.2 时间复杂度 3.3 空间复杂度 4. 代码实现 5. 总结 1. 原理图 2. 什么是冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地遍历要排序的列表&am…

忘记了PDF文件的密码,怎么办?

PDF文件可以加密,大家都不陌生,并且大家应该也都知道PDF文件有两种密码,一个打开密码、一个限制编辑密码,因为PDF文件设置了密码,那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密? PDF和offi…

SpringBoot监听器的使用方法

监听器(Listener)就是监听对象的创建、销毁等状态的变化以及定义一些事件发生后接下来要进行的动作。主要监听的三个域对象为:ServletRequest域、HttpSession域 和ServletContext域。本文通过几个简单的例子介绍一下监听器的用法。 监听 Ser…

【论文笔记】Sign Language Video Retrieval with Free-Form Textual Queries

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Sign Language Video Retr…

FastGRPC 使用简介

简介 FastGRPC 是一个基于 Python 3.9 的轻量级 gRPC 框架,旨在简单快速高效的构建 gRPC 服务。 安装 使用 pip 安装 FastGRPC: pip install python-fast-grpc快速开始 创建简单的 gRPC 服务 以下是一个快速实现的示例: from pydantic …

openEuler22.03系统使用Kolla-ansible搭建OpenStack

Kolla-ansible 是一个利用 Ansible 自动化工具来搭建 OpenStack 云平台的开源项目,它通过容器化的方式部署 OpenStack 服务,能够简化安装过程、提高部署效率并增强系统的可维护性。 前置环境准备: 系统:openEuler-22.03-LTS-SP4 配置&…

记录一下vue2项目优化,虚拟列表vue-virtual-scroll-list处理10万条数据

文章目录 封装BrandPickerVirtual.vue组件页面使用组件属性 select下拉接口一次性返回10万条数据,页面卡死,如何优化??这里使用 分页 虚拟列表(vue-virtual-scroll-list),去模拟一个下拉的内容…

【vue】vue的基础语法--上

目录 一、Vue的模板语法 1. 学会使用VsCode 2. 文本插值 3. 使用JavaScript表达式 4. 无效 5. 原始html 二、 属性绑定 1. 属性绑定 2.简写方案 3.布尔型Attribute 4. 动态邦定多个值 三、条件渲染 1. v-if 2. v-else 3. v-else-if 4. v-show 5. v-if VS v-sho…

【ANGULAR网站开发】初始环境搭建(SpringBoot)

1. 初始化SpringBoot 1.1 创建SpringBoot项目 清理spring-boot-starter-test,有需要的可以留着 1.2 application.properties 将application.properties改为yaml,个人习惯问题,顺便设置端口8888,和前端设置的一样 server:por…

C++编码实践,邪恶的非常量全局变量

在编程过程中,避免使用全局变量是一个良好的编程实践建议。当然,这里的全局变量主要是指 非常量全局变量; 尽管在小型项目中,这一点似乎看起来人畜无害,但是在大型项目中往往会出现很多问题。 新手程序员往往比较喜欢使用大量的全局变量,因为这样使用起来方便直接,特别是当设…

OpenCV的对比度受限的自适应直方图均衡化算法

OpenCV的对比度受限的自适应直方图均衡化(CLAHE)算法是一种图像增强技术,旨在改善图像的局部对比度,同时避免噪声的过度放大。以下是CLAHE算法的原理、步骤以及示例代码。 1 原理 CLAHE是自适应直方图均衡化(AHE&…