当前位置: 首页 > news >正文

Docker Compose命令讲解+文件编写

docker compose的用处是对 Docker 容器集群的快速编排。(源码)

一个 Dockerfile 可以定义一个单独的应用容器。但我们经常碰到需要多个容器相互配合来完成某项任务的情况(如实现一个 Web 项目,需要服务器、数据库、redis等),Compose 刚好允许通过一个单独的 docker-compose.yml 文件来定义一组相关联的应用容器为一个项目(project)。

一、安装

安装完docker(docker安装:Ubuntu22)后就已经完成了compose的安装了,也可从Releases · docker/compose (github.com)仓库安装。

二、概念

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Compose 项目实现上是调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

三、应用举例

使用docker compose启动一个python服务器,访问后可显示访问次数。

服务器源码:(对"/"路径建立路由,访问后调用hello函数,在redis中给hits的value+1,然后输出到网页)

from flask import Flask
from redis import Redisapp = Flask(__name__)
redis = Redis(host='redis',port=6379)@app.route('/')
def hello():count = redis.incr('hits')return 'Hello,已被访问{}次。\n'.format(count)if __name__ == "__main__":app.run(host="0.0.0.0",debug=True)

Dockerfile:

FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]

docker-compose.yml:

version: '3'
services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"

然后启动容器:sudo docker compose up

即可启动项目,访问5000端口:

四、命令讲解

4.1docker compose up

docker compose up命令会构建镜像,创建网络、卷,并启动容器,容器名称以项目名称(目录名称)为前缀,以一个数子为后缀(Docker Compose允许扩缩容);创建的镜像、容器、网络和卷可直接使用docker命令进行查看。

  • 参数:
    • -f:docker-compose up会查找名为 docker-compose.yml 或 docker-compose.yaml 的 compose 文件,或使用 -f 指定 compose 文件名。
    • -d:在后台启动应用。

4.2docker compose down

上述项目执行down后:

过程:

  1. 关闭服务。
  2. 删除服务。(注意:容器和网络会被删除,数据卷和镜像不会,所以再次启动就能快很多)

4.3docker compose ps

查看项目状态:

显示容器名称、其中运行的Command、当前状态以及其监听的网络端口。

4.4docker compose top

列出各个服务(容器)内运行的进程。(PID编号为在宿主机上的进程ID。)

4.5docker compose stop

停止应用(关闭服务),不删除资源:

4.6docker compose start

启动停止的应用。

4.7docker compose restart

重启应用。

4.8docker compose rm

删除已经停止的应用(仅容器和网络)。

五、docker-compose文件编写

建议查看:Compose 模板文件 | Docker 从入门到实践

建议最好还是配合chatgpt进行编写,直接手写可能每一步都会报问题(〃'▽'〃)

相关文章:

Docker Compose命令讲解+文件编写

docker compose的用处是对 Docker 容器集群的快速编排。(源码) 一个 Dockerfile 可以定义一个单独的应用容器。但我们经常碰到需要多个容器相互配合来完成某项任务的情况(如实现一个 Web 项目,需要服务器、数据库、redis等&#…...

Linux bash: ipconfig: command not found解决方法

安装完centos7运行ifconfig命令发现找不到 安装相关工具 yum install net-tools.x86_64 无脑yes即可...

【面试算法——动态规划 21】正则表达式匹配(hard) 交错字符串

10. 正则表达式匹配 链接: 10. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的&#xf…...

基于Python实现的神经网络分类MNIST数据集

神经网络分类MNIST数据集 目录 神经网络分类MNIST数据集 1 一 、问题背景 1 1.1 神经网络简介 1 前馈神经网络模型: 1 1.2 MINST 数据说明 4 1.3 TensorFlow基本概念 5 二 、实现说明 5 2.1 构建神经网络模型 5 为输入输出分配占位符 5 搭建分层的神经网络 6 处理预…...

设计模式之是简单工厂模式

分类 设计模式一般分为三大类:创建型模式、结构型模式、行为型模式。 创建型模式:用于创建对象,共五种,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式:用于处理类或对…...

Java应用的混淆、加密以及加壳

文章目录 前言问题代码混淆存在的问题Java类文件加密存在的问题虚拟化保护存在的问题AOT编译存在的问题 Java应用的打包混淆器类加载与类加密Bootstrap Class LoaderExtension Class LoaderSystem Class Loader自定义ClassLoaderprotector4j 加壳采用Golang打包Java程序xjar 参…...

【Linux】:Linux中Shell命令及其运行原理/权限的理解

Shell命令以及运行原理 Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通…...

传统项目管理与敏捷项目管理

价值理念 首先来看看在理念方面,两者有何不同。 项目管理的铁三角是围绕着范围、成本和时间展开的。传统项目管理的特点是强计划驱动,需求范围固定下来后才可分配人员和时间,并在项目推进过程中积极跟踪和控制风险。 敏捷项目…...

只要掌握Win32应用程序错误的来龙去脉,就没必要惊慌失措

也许你遇到了一个问题,你试图运行的程序已损坏甚至丢失。在这种情况下,Windows将无法正确运行该文件,因此,操作系统将生成一个错误——文件不是有效的32位应用程序或文件不是无效的Win32应用程序。 错误通常是因为可执行文件不是有…...

ABB机器人关于重定位移动讲解

关于机器人如何重定位移动,首先来看一下示教器上的重定位移动是在哪。 从图中所示的坐标位置和操纵杆方向得知,重定位的本质是绕X、Y、Z轴的旋转。那么实现跟摇杆一样的操作,就可以通过改变当前位置的欧拉角来实现,参考Rapid指令…...

Ceph介绍与部署

Ceph介绍与部署 一、存储基础1.1、单机存储设备1.1.1、单机存储的问题 1.2、商业存储解决方案1.3、分布式存储(软件定义的存储 SDS)1.3.1、分布式存储的类型 二、Ceph 简介三、Ceph 优势四、Ceph 架构五、Ceph 核心组件5.1、Pool中数据保存方式支持两种类…...

sklearn 机器学习基本用法

# # 科学计算模块 # import numpy as np # import pandas as pd # # 绘图模块 # import matplotlib as mpl # import matplotlib.pyplot as plt # from sklearn.linear_model import LinearRegression # from sklearn import datasets # from sklearn.model_selection import t…...

Ionic4 生命周期钩子函数和angular生命周期钩子函数介绍

1、Ionic4 生命周期钩子函数 Ionic 4(以及之后的 Ionic 版本)使用了 Angular 生命周期钩子,因为 Ionic 是基于 Angular 构建的。因此,Ionic 4 中的生命周期与 Angular 组件生命周期非常相似。以下是一些常见的 Ionic 4 生命周期钩…...

Hive+Flume+Kafka章节测试六错题总结

题目2: EXTERNAL关键字的作用?[多选] A、EXTERNAL关键字可以让用户创建一个外部表 B、创建外部表时,可以不加EXTERNAL关键字 C、通过EXTERNAL创建的外部表只删除元数据,不删除数据 D、不加EXTERNAL的时候,默认创建内…...

【随笔】论多线程CPU离线渲染器的实现:A CPU BASED OFFLINE RENDERING ENGINE

前言 小熊挺喜欢玩游戏的,对于游戏画面有所追求,记得高中第一次玩战地的时候,惊叹于画面细腻的表现,并且还能开坦克车,这样的事情深深吸引了我。我是一个画面党,为了追求更好的画质表现我开始研究设置面板…...

多输入多输出 | MATLAB实现CNN-GRU-Attention卷积神经网络-门控循环单元结合SE注意力机制的多输入多输出预测

多输入多输出 | MATLAB实现CNN-GRU-Attention卷积神经网络-门控循环单元结合SE注意力机制的多输入多输出预测 目录 多输入多输出 | MATLAB实现CNN-GRU-Attention卷积神经网络-门控循环单元结合SE注意力机制的多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果…...

Ubuntu:Arduino IDE 开发环境配置【保姆级】

物联网开发学习笔记——目录索引 本章主要介绍在Ubuntu系统搭建Arduino IDE 开发环境,windows系统请移步:Windows:Arduino IDE 开发环境配置【保姆级】 参考官网:Arduino - Home 有关更多详细信息,请参阅 Arduino I…...

Kafka 开启SASL/SCRAM认证 及 ACL授权(三)验证

Kafka 开启SASL/SCRAM认证 及 ACL授权(三)验证。 官网地址:https://kafka.apache.org/ 本文说明如何做client验证ACL是否生效,我们之前开启了无acl信息不允许访问的配置。涉及的client有以下几个场景:shell脚本、python脚本、java应用、flink流。 kafka shell script验证…...

Pycharm 2023 设置远程调试

pycharm 版本 : 2023.2.1 整体流程参考:https://blog.csdn.net/xuanhaolaile/article/details/128293254 首先确定远程服务器上已经安装好 requirements.txt 中所需的依赖包。 1、SSH Configurations 添加远程服务器 2、Python Interpreter 注意&…...

asp.net core在其他程序集获取HttpContext

首先在Program.cs中,注册 builder.Services.AddHttpContextAccessor();Program.cs完整代码: using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.CodeAnalysis.CSharp.Syntax; using System.Text.Encodings.Web; using System.Text.Unicode; us…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

【JavaEE】-- HTTP

1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

【AI学习】三、AI算法中的向量

在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

什么是VR全景技术

VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...