Docker:认识Docker Compose

文章目录

  • 什么是docker compose?
  • 为什么要使用docker compose?
  • docker compose的功能
    • 使用步骤
    • 核心功能
  • docker compose使用场景
  • Docker Compose命令清单
  • Docker Compose 命令格式
  • 操作演示
    • 创建一个Compose目录
    • 创建一个docker-compose.yml文件
    • 创建首页目录,编辑内容
    • 启动服务
    • 停止服务
    • 删除服务

什么是docker compose?

对于这个内容来说,这是一个docker官方提供的一个开源的项目,内部是使用python进行编写的,实际上是调用了docker服务内部的API对于容器进行管理和编排

简单来说,就是可以运行多个docker容器的应用

在docker-compose中有两个比较重要的概念

  1. 服务:一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
  2. 项目:由一组关联的应用容器组成的一个完整业务单元,它会被组织为compose.yml,在整个compose.yml中会定义一个项目
    compose默认管理对象是项目,通过子命令对于项目中的一组容器进行便捷的生命周期的管理

具体的含义可以理解为下图所示:

在这里插入图片描述

为什么要使用docker compose?

docker是一个轻量化的应用程序,在docker官方推荐每一个docker容器中只运行一个进程

d按时事实上,如果一个应用需要牵扯到mysql,nginx的环境,那么就需要给应用,数据库和nginx分别创建独立的docker容器,分别进行存储,启动容器

那么带来的问题是,如果docker中这些容器都是分散的,那么会导致的是不方便对于镜像进行管理,因此就需要有一个统一的内容来对于docker进行管理,因此就有了docker-compose

docker compose的功能

使用步骤

  1. 使用docker-compose.yml定义构成应用程序的服务,这样就可以在隔离的环境下进行运行
  2. 指定docker compose up命令,启动整个应用程序

核心功能

对于compose来说,它的功能之一是进行管理应用程序的生命周期,下面展示出对于一些管理证明周期的命令

  1. 启动,停止,重建服务
  2. 查看正在运行的状态
  3. 流式传输运行服务的日志输出
  4. 在服务上运行一次性命令

docker compose使用场景

它的使用场景还是比较广泛的,比如在单主机部署上,可以快速搭建出一个单节点开发或者测试环境,方便进行使用,也可以使用在环境隔离的场景下,通过指定出project来运行不同的环境,实现出一个隔离的目的

Docker Compose命令清单

  1. docker compose bulid:构建服务
  2. docker compose config:规范的格式来显示服务配置
  3. docker compose cp:在本地系统和服务容器直接拷贝文件
  4. docker compose create:创建服务的容器
  5. docker compose down:停止所有容器,并删除容器
  6. docker compose events:从服务器获取实时事件
  7. docker compose exe:在容器中执行命令
  8. docker compose images:列出所有容器使用的镜像
  9. docker compose kill:强制停止服务的容器
  10. docker compose logs:显示日志
  11. docker compose ls:显示所有项目
  12. docker compose pause:暂停服务
  13. docker compose port:列出所有端口映射
  14. docker compose ps:该命令可以列出当前使用的所有容器
  15. docker compose pull:拉取服务镜像
  16. docker compose push:推送服务镜像
  17. docker compose restart:重启或者重启某个服务
  18. docker compose rm:删除服务停止的容器
  19. docker compose run:在指定服务容器上执行相关的命令
  20. docker compose start:启动当前停止的某个容器
  21. docker compose stop:停止当前运行的某个容器
  22. docker compose top:显示运行的进程
  23. docker compose unpause:恢复服务
  24. docker compose up:up命令可以构建,创建,启动,链接一个服务相关的容器,默认情况下会认为这个容器是存在的,并且会尝试停止并尝试重新构建,使用之前挂载的卷,而其中选项–no-recreate参数可以让容器不被停止或者重新创建,-d表示后台运行
  25. docker compose version:查看版本

Docker Compose 命令格式

对于Compose来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器,如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令的影响

在Docker-Compose命令的基本格式是:

docker compose [options] command [args...]

常见选项:

  1. -f,–file指定使用的Compose模板文件,默认是docker-compose.yml,可以多次指定
  2. -p,–project-name,指定项目名称,默认将使用所在目录作为项目名

操作演示

下面基于上述的这些命令,完成一些案例演示

创建一个Compose目录

root@VM-24-7-ubuntu:~# mkdir -p /data/myworkdir/compose/base
root@VM-24-7-ubuntu:~# cd /data/myworkdir/compose/base/

创建一个docker-compose.yml文件

version: '3.8'
services:
  web:
    image: nginx:1.24.0
    environment:
      TEST: 1
    ports:
      - 8979:80
    networks:
      - mytestnet
    volumes:
      - ./mynginxhome:/usr/share/nginx/html
    depends_on:
      - mysql
      - redis

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    networks:
      - mytestnet
    volumes:
      - /data/zbh/mysqldata/varlib/:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 10

  redis:
    image: redis:7
    networks:
      - mytestnet
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 10

networks:
  mytestnet:

下面针对于上面的配置信息进行解释:

版本声明

version: '3.8'

指定了Compose文件的版本,这里是3.8版。不同版本支持的功能有所不同,选择合适的版本以匹配您的Docker环境和需求。

服务定义

Web服务

services:
  web:
    image: nginx:1.24.0
    environment:
      TEST: 1
    ports:
      - 8979:80
    networks:
      - mytestnet
    volumes:
      - ./mynginxhome:/usr/share/nginx/html
    depends_on:
      - mysql
      - redis
  • image: 使用nginx镜像,版本1.24.0作为Web服务器。
  • environment: 设置环境变量TEST值为1。
  • ports: 映射容器端口80到宿主机的8979端口,以便外部访问。
  • networks: 加入名为mytestnet的网络。
  • volumes: 挂载本地目录./mynginxhome到容器内的/usr/share/nginx/html,用于存放Nginx服务的网页文件。
  • depends_on: 表明该服务依赖于mysqlredis服务,这两个服务需要先启动。

MySQL服务

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: "bit@123"
    networks:
      - mytestnet
    volumes:
      - /data/maxhou/mysqldata/varlib/:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 10
  • image: 使用MySQL 5.7镜像。
  • environment: 设置MySQL的root用户密码。
  • networks: 同样加入mytestnet网络,便于服务间通信。
  • volumes: 将宿主机上的数据目录挂载到容器的MySQL数据目录,以持久化数据库数据。
  • healthcheck: 健康检查配置,每隔10秒执行一次mysqladmin ping命令检查服务健康状态,如果在5秒内没有响应则认为失败,总共尝试10次。

Redis服务

  redis:
    image: redis:7
    networks:
      - mytestnet
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 10
  • image: 使用Redis 7镜像。
  • networks: 加入mytestnet网络。
  • healthcheck: 类似MySQL,通过执行redis-cli ping来检查Redis服务的健康状况。

网络定义

networks:
  mytestnet:

定义了一个名为mytestnet的自定义网络,所有服务都将连接到此网络,以实现服务间的相互通信而无需暴露不必要的端口到公网

创建首页目录,编辑内容

root@VM-24-7-ubuntu:/data/myworkdir/compose/base# mkdir -p ./mynginxhome
root@VM-24-7-ubuntu:/data/myworkdir/compose/base# ls
docker-compose.yml  mynginxhome
root@VM-24-7-ubuntu:/data/myworkdir/compose/base# cd ./mynginxhome/
root@VM-24-7-ubuntu:/data/myworkdir/compose/base/mynginxhome# echo hello docker-compose.yml > index.html

启动服务

root@VM-24-7-ubuntu:/data/myworkdir/compose/base# docker compose up -d
WARN[0000] /data/myworkdir/compose/base/docker-compose.yml: `version` is obsolete 
[+] Running 28/28
 ✔ redis Pulled                                                                                          7.2s 
   ✔ 09f376ebb190 Already exists                                                                         0.0s 
   ✔ 9ae6a7172b01 Pull complete                                                                          4.4s 
   ✔ 2c310454138b Pull complete                                                                          4.5s 
   ✔ 3eba9ec960aa Pull complete                                                                          4.8s 
   ✔ 3d36c165ff0a Pull complete                                                                          5.7s 
   ✔ 493d196d734f Pull complete                                                                          5.7s 
   ✔ 4f4fb700ef54 Pull complete                                                                          5.8s 
   ✔ 484e0560ae90 Pull complete                                                                          5.9s 
 ✔ web Pulled                                                                                            9.4s 
   ✔ 04e7578caeaa Pull complete                                                                          6.9s 
   ✔ 57a1056ea484 Pull complete                                                                          8.2s 
   ✔ 6989106bacf0 Pull complete                                                                          8.2s 
   ✔ c00d1142b331 Pull complete                                                                          8.3s 
   ✔ cb49393af980 Pull complete                                                                          8.4s 
   ✔ 5ac1ebd8aebe Pull complete                                                                          8.4s 
 ✔ mysql Pulled                                                                                         12.8s 
   ✔ 20e4dcae4c69 Pull complete                                                                          4.2s 
   ✔ 1c56c3d4ce74 Pull complete                                                                          4.3s 
   ✔ e9f03a1c24ce Pull complete                                                                          4.5s 
   ✔ 68c3898c2015 Pull complete                                                                          5.0s 
   ✔ 6b95a940e7b6 Pull complete                                                                          5.1s 
   ✔ 90986bb8de6e Pull complete                                                                          5.2s 
   ✔ ae71319cb779 Pull complete                                                                          6.5s 
   ✔ ffc89e9dfd88 Pull complete                                                                          6.6s 
   ✔ 43d05e938198 Pull complete                                                                         11.6s 
   ✔ 064b2d298fba Pull complete                                                                         11.8s 
   ✔ df9a4d85569b Pull complete                                                                         11.8s 
[+] Running 4/4
 ✔ Network base_mytestnet  Created                                                                       0.1s 
 ✔ Container base-redis-1  Started                                                                       1.4s 
 ✔ Container base-mysql-1  Started                                                                       1.4s 
 ✔ Container base-web-1    Started                                                                       1.5s 

此时,进行访问就已经可以访问到了:

在这里插入图片描述

停止服务

root@VM-24-7-ubuntu:/data/myworkdir/compose/base# docker container ls
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                    PORTS                                   NAMES
a5a00dff5e97   nginx:1.24.0   "/docker-entrypoint.…"   59 seconds ago   Up 57 seconds             0.0.0.0:8979->80/tcp, :::8979->80/tcp   base-web-1
510bad9ef366   redis:7        "docker-entrypoint.s…"   59 seconds ago   Up 57 seconds (healthy)   6379/tcp                                base-redis-1
87de525d892c   mysql:5.7      "docker-entrypoint.s…"   59 seconds ago   Up 57 seconds (healthy)   3306/tcp, 33060/tcp                     base-mysql-1
7d4a54e662b9   busybox        "sh"                     22 hours ago     Up 21 hours                                                       netcontainer2
e33f58442fbf   busybox        "sh"                     22 hours ago     Up 21 hours                                                       netcontainer
root@VM-24-7-ubuntu:/data/myworkdir/compose/base# docker compose stop
WARN[0000] /data/myworkdir/compose/base/docker-compose.yml: `version` is obsolete 
[+] Stopping 3/3
 ? Container base-web-1    Stopped                                                                      10.3s 
 ? Container base-mysql-1  Stopped                                                                       1.9s 
 ? Container base-redis-1  Stopped                                                                       0.3s 

删除服务

root@VM-24-7-ubuntu:/data/myworkdir/compose/base# docker compose down
WARN[0000] /data/myworkdir/compose/base/docker-compose.yml: `version` is obsolete 
[+] Running 4/4
 ✔ Container base-web-1    Removed                                                                       0.0s 
 ✔ Container base-mysql-1  Removed                                                                       0.0s 
 ✔ Container base-redis-1  Removed                                                                       0.0s 
 ✔ Network base_mytestnet  Removed                                                                       0.2s 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】【Git】多个dev分支合并到master分支的文件冲突

问题描述 多个dev分支在同步开发,同时发起代码评审,但合入master的时候存在先后顺序,那么后面同文件的操作则会提示“合并有文件冲突”,导致代码无法入库,只能重新提交。 在个人分支中如何解决与master分支差异,从何顺利提交评审合入代码? 参考方案 1、按照下面的流程…

人工智能的社会应用:深刻变革的新浪潮

人工智能的社会应用(语言文本方面) 人工智能在社会应用中的广泛运用体现在多个领域,特别是在语音和文本处理方面。以下是这些技术的一些扩展: 1. 文本翻译: 谷歌翻译:利用深度学习模型,支持100多…

「51媒体」媒体邀约-全国邀请媒体现场报道宣传

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 「51媒体」媒体邀约是一家专注于提供媒体传播方案和执行的服务公司,旨在通过一站式服务帮助企业或个人进行有效的媒体邀约和活动宣传。 「51媒体」提供的不仅仅是简单的媒体邀…

暗色系B端界面有什么好处、应用场景、缺点、该如何设计。

B端管理系统界面蓝色系和浅色系的非常多,暗色系一般不作为首选,这背后是什么原因呢,如果真的要设计暗色系界面,该如何办呢,本文就解决这些问题。 一、暗色系B端界面相对于浅色系有什么好处 1. 减少眩光和视觉疲劳&am…

开源-Docker部署Cook菜谱工具

开源-Docker部署Cook菜谱工具 文章目录 开源-Docker部署Cook菜谱工具介绍资源列表基础环境一、安装Docker二、配置加速器三、查看Docker版本四、拉取cook镜像五、部署cook菜谱工具5.1、创建cook容器5.2、查看容器运行状态5.3、查看cook容器日志 六、访问cook菜谱服务6.1、访问c…

VMware清理拖拽缓存

磁盘空间越用越小,如何快速解决磁盘空间的问题,甩掉烦恼 安装VM tools之后可以通过拖拽的方式把文件拉入虚拟机之中。但每一次拖拽,其实都是现在cache文件夹里面生成一个同样的文件,并使用cp拷贝的方式将其拷贝到拖拽放置的目录中…

Three.js的渲染器:WebGLRenderer、CSS3DRenderer、SVGRenderer

我们都晓得渲染器是负责将场景中的3D对象转换为2D图像,然后显示在屏幕上,three.js内置了多种渲染器,来应对不同的和需求,贝格前端工场老司机,简要和大家分享下。 一、渲染器的定义和作用 在Three.js中,渲…

如何将 API 管理从 Postman 转移到 Apifox

上一篇推文讲到用 Swagger 管理的 API 怎么迁移到 Apifox,有许多同学反馈说能不能介绍一下 Postman 的迁移以及迁移过程中需要注意的事项。那么今天,它来了! 从 Postman 迁移到 Apifox 的方法有两种: 导出 Postman 集合 &#x…

「实战应用」如何用图表控件LightningChart JS创建SQL仪表板应用(二)

LightningChart JS是Web上性能特高的图表库,具有出色的执行性能 - 使用高数据速率同时监控数十个数据源。 GPU加速和WebGL渲染确保您的设备的图形处理器得到有效利用,从而实现高刷新率和流畅的动画,常用于贸易,工程,航…

最新大屏幕互动系统PHP源码 附动态背景图和配乐素材

本文来自:最新大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程 - 源码1688 应用介绍 简介: 最新大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程 测试环境:NginxPHP7.0MySQL5.6 前端图片: 后台图片&#x…

使用 Elasticsearch 设计大规模向量搜索

作者:Jim Ferenczi 第 1 部分:高保真密集向量搜索 简介 在设计向量搜索体验时,可用选项的数量之多可能会让人感到不知所措。最初,管理少量向量很简单,但随着应用程序的扩展,这很快就会成为瓶颈。 在本系列…

深度学习长文|使用 JAX 进行 AI 模型训练

引言 在人工智能模型的开发旅程中,选择正确的机器学习开发框架是一项至关重要的决策。历史上,众多库都曾竞相争夺“人工智能开发者首选框架”这一令人垂涎的称号。(你是否还记得 Caffe 和 Theano?)在过去的几年里&…

负压式水帘风机和一体式水帘风机的特点

负压式水帘风机和一体式水帘风机各有其独特的特点,以下是它们的特点归纳: 负压式水帘风机特点: 高效节能: 通过水帘与负压风机的配合,模拟自然界的蒸发降温过程,耗电量仅为传统空调的十分之一&#xff0c…

写个代码扫描插件,再也不怕 log4j 等问题

引言 关于静态代码扫描,大家想必都非常熟悉了,比如 lint、detekt 等,这些也都是常用的扫描工具。但随着隐私合规在国内越来越趋于常态,我们经常需要考虑某些危险api的调用排查等等,此时上述的工具往往不容易实现现有的…

Python内存管理与垃圾回收机制

目录 一、引言 二、Python内存管理概述 三、引用计数机制 四、垃圾回收机制 标记-清除(Mark-and-Sweep) 分代收集(Generational Collection) 五、内存泄漏与优化 六、总结 一、引言 Python作为一门高级编程语言&#xff…

MySQL查询优化最佳实践15条(建议收藏)

目录 1 优化方法(15条) 2 总结 MySQL的数据库常规查询的过程中性能的优化非常重要,其中很多点是和开发习惯有关,能熟练掌握不只能提高工作的效率,同时也能提高个人的技能。有一些优化的技巧同样也适合于其他的数据库…

2024中国通信技术产业博览会:JUNO光缆与WaveLogic 6技术,海洋深处的数字脉搏

在数字化时代,通信技术是连接世界的桥梁。NTT DATA主导的JUNO海底光缆计划,通过部署Ciena的WaveLogic 6技术,标志着全球通信网络容量的一次重大飞跃。这一进步不仅加强了亚洲与北美之间的数据连接,更为即将到来的“2024中国军民两…

华为云EI生态

1、人工智能技术趋势 2、华为AI发展思路 3、华为云EI:让企业更智能 4、华为云服务全景图 5、基础平台类服务 6、MLS:解决特性到模型应用的完整过程 7.DLS 8.GES超大规模一体化图分析与查询 9、EI视觉认知 10、EI语音语义 11、OCR:提供高精度光学文字自动…

OpenCV特征匹配

1、OpenCV Brute-Force匹配器 Brute-Force匹配器的匹配方法非常简单,输入两张图像所分别对应的特征(特征点坐标与特征点域对应的描述子),循环遍历两幅图像中的特征,计算第一幅图像与第二幅图像之间每个特征点之间的距…

49.Python-web框架-Django解决多语言redirect时把post改为get的问题

目录 1.背景 2.思路 3.寻找 Find and Replace 4.再次运行程序,POST来了 5.小结 1.背景 昨天在练习一个Django功能时,把form的method设置为POST,但是实际提交时,一直是GET方法。最后发现这是与多语言相关,django前面…