docker-compose教程

1. docker-compose是什么?

1. 1 简介

 compose、machine 和 swarm 是docker 原生提供的三大编排工具。

 简称docker三剑客。Compose 项目是 Docker 官方的开源项目,定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

Compose 中有两个重要的概念:

【官方解释】:

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

【个人理解】:

  • 服务是一个应用程序的逻辑单元,它可以由一个或多个容器组成。每个服务都拥有自己的配置,包括镜像、端口映射、环境变量、卷和网络等。

  • 项目是一个包含多个服务的集合。它定义了应用程序的整体架构,并提供了管理所有服务的工具。

【服务和项目的例子】

  • 一个 Web 应用程序可以包含以下服务:

  • web:运行应用程序代码的服务。

  • db:运行数据库的服务。

  • cache:运行缓存服务的服务。

  • 一个 Docker Compose 项目可以包含以下文件:

  • docker-compose.yml:定义所有服务的配置文件。

  • Dockerfile:构建服务镜像的配置文件。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
在这里插入图片描述

在这里插入图片描述

1.2 Docker Compose, Docker Swarm 和 Kubernetes 对比

Docker Compose

  • 单机部署:Docker Compose 通常用于单机部署,因为它没有集群管理功能。
  • 简单易用:Docker Compose 使用 YAML 文件定义应用,语法简单易懂,易于上手。
  • 开发和测试:Docker Compose 非常适合在开发和测试环境中使用,因为它可以快速启动和停止应用,并方便地进行配置更改。

Docker Swarm

  • 集群管理:Docker Swarm 是一个集群管理工具,可以管理多个 Docker 主机,并把它们作为一个集群来使用。
  • 服务发现和负载均衡:Docker Swarm 提供服务发现负载均衡功能,可以自动发现集群中的服务并进行负载均衡。
  • 高可用性:Docker Swarm 可以自动重启失败的容器,并确保应用的高可用性
  • 生产环境部署:Docker Swarm 非常适合在生产环境中使用,因为它可以提供高可用性、可扩展性和容错性。

Kubernetes

  • 集群管理:k8s 是一个集群管理工具,可以管理多个 Docker 主机,并把它们作为一个集群来使用。
  • 功能强大:Kubernetes 是一个功能强大的容器编排工具,它提供了丰富的功能,例如服务发现负载均衡自动扩展滚动更新健康检查等。
  • 高可用性:Docker Swarm 可以自动重启失败的容器,并确保应用的高可用性
  • 复杂性高:Kubernetes 的学习曲线比较陡峭,需要掌握大量的概念和配置选项。
  • 生产环境部署:Kubernetes 非常适合在生产环境中使用,因为它可以提供高可用性、可扩展性和容错性。

总结

特征Docker ComposeDocker SwarmKubernetes
功能简单中等强大
复杂性中等
部署方式单机集群集群
服务发现
负载均衡
高可用性
滚动更新、健康检查、高级调度等
适用场景开发和测试生产环境生产环境

2. docker compose安装

2.1 二进制包

# 1. 安装
$ sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

   # 国内用户可以使用以下方式加快下载
$ sudo curl -L https://download.fastgit.org/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

# 2. 卸载
$ sudo rm /usr/local/bin/docker-compose

2.2 pip安装

# 1. 安装
$ sudo pip install -U docker-compose

# 2. 卸载
$ sudo pip uninstall docker-compose

# 3. 查看版本
docker-compose --versiom

3. compose模版文件

Docker Compose YAML 文件解释

version: '3'

services:
  mysql:
    build:
      context: ./mysql
    environment:
      MYSQL_ROOT_PASSWORD: admin
    restart: always
    container_name: mysql
    volumes:
      - /data/edu-bom/mysql/test:/var/lib/mysql
    image: mysql/mysql:5.7
    ports:
      - 3306:3306
    networks:
      net:

  eureka:
    build:
      context: ./edu-eureka-boot
    restart: always
    ports:
      - 8761:8761
    container_name: edu-eureka-boot
    hostname: edu-eureka-boot
    image: edu/edu-eureka-boot:1.0
    depends_on:
      - mysql
    networks:
      net:

networks:
  net:

volumes:
  vol:

详细解释:

  1. version: 指定 Docker Compose 文件的版本。此处为 3。

  2. services: 定义服务部分,包含应用程序的不同组件。

  3. mysql: 定义名为 “mysql” 的服务,用于构建和运行 MySQL 数据库。

  4. build: 指示 Docker Compose 从 ./mysql 目录构建 Docker 镜像。

  5. environment: 设置环境变量,包括 MySQL 数据库的 root 用户密码。

  6. restart: 指定容器在意外停止后自动重启。

  7. container_name: 指定容器的名称为 “mysql”。

  8. volumes: 将主机上的 /data/edu-bom/mysql/test 目录挂载到容器的 /var/lib/mysql 目录,用于存储数据库数据。

  9. image: 指定使用官方的 MySQL 5.7 镜像。

  10. ports: 将容器的 3306 端口映射到主机的 3306 端口,以便访问 MySQL 数据库。

  11. networks: 将 “mysql” 服务连接到名为 “net” 的网络。

  12. eureka: 定义名为 “eureka” 的服务,用于构建和运行 Eureka 服务发现服务器。

  13. build: 指示 Docker Compose 从 ./edu-eureka-boot 目录构建 Docker 镜像。

  14. restart: 指定容器在意外停止后自动重启。

  15. ports: 将容器的 8761 端口映射到主机的 8761 端口,以便访问 Eureka 服务发现服务器。

  16. container_name: 指定容器的名称为 “edu-eureka-boot”。

  17. hostname: 指定容器的主机名为 “edu-eureka-boot”。

  18. image: 指定使用 edu/edu-eureka-boot:1.0 镜像。

  19. depends_on: 指定 “eureka” 服务依赖于 “mysql” 服务,确保数据库启动后再启动 Eureka 服务。

  20. networks: 将 “eureka” 服务连接到名为 “net” 的网络。

  21. networks: 定义名为 “net” 的网络。

  22. volumes: 定义名为 “vol” 的卷,但未被任何服务使用。

4. docker-compose命令

up

docker-compose up [options] [SERVICE...]

该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务启动服务,并关联服务相关容器的一系列操作。

可以说,大部分时候都可以直接通过该命令来启动一个项目。

如果使用 docker-compose up -d,将会在后台启动并运行所有的容器。

默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容。如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate这样将只会启动处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用 docker-compose up --no-deps -d <SERVICE_NAME> 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。

选项:

  • -d 在后台运行服务容器。
    - --no-color 不使用颜色来区分不同的服务的控制台输出。
  • --no-deps 不启动服务所链接的容器。
  • --force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用。
  • --no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。
  • --no-build 不自动构建缺失的服务镜像。
  • -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。

start

docker-compose start [SERVICE...]

启动已经存在的服务容器

down

docker-compose down

此命令将会停止 up 命令所启动的容器,并移除网络

stop

docker-compose stop [options] [SERVICE...]

停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。

选项:

  • -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。

ps

docker-compose ps [options] [SERVICE...]

列出项目中目前的所有容器。

选项:

  • -q 只打印容器的 ID 信息。

logs

docker-compose logs [options] [SERVICE...]

查看服务容器的输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过 --no-color 来关闭颜色。

build

docker-compose build [options] [SERVICE...]

构建(重新构建)项目中的服务容器。

服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db

可以随时在项目目录下运行 docker-compose build 来重新构建服务。

选项:

  • --force-rm 删除构建过程中的临时容器。
  • --no-cache 构建镜像过程中不使用 cache(这将加长构建过程)。
  • --pull 始终尝试通过 pull 来获取更新版本的镜像。

restart

docker-compose restart [options] [SERVICE...]

重启项目中的服务

选项:

  • -t, --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)。

rm

docker-compose rm [options] [SERVICE...]

删除所有停止状态的)服务容器。推荐先执行docker-compose stop 命令来停止容器。

选项:

  • -f, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
  • -v 删除容器所挂载的数据卷。

top

docker-compose top

查看各个服务容器内运行的进程。

images

docker-compose images

列出 Compose 文件中包含的镜像。

run

docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]

在指定服务上执行一个命令。

使用举例:

1.在web服务器运行python脚本

2. 在 Web 服务容器中运行 shell 命令,并映射端口,设置环境变量,使用卷,连接网络:

docker-compose run -p 8080:80 -e MY_VAR=value -v my_volume:/path/to/file/in/container --network my_network web bash

这将在 “web” 服务的容器中打开一个交互式 shell,并进行以下操作:

  • 将容器的 80 端口映射到主机的 8080 端口。
  • 设置环境变量 MY_VAR 的值为 “value”。
  • 将名为 “my_volume” 的卷挂载到容器中的 /path/to/file/in/container 路径。
  • 连接到名为 “my_network” 的网络。

3. 在数据库容器中运行 SQL 命令,使用环境变量,连接网络:

docker-compose run -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=password --network my_network db psql -U postgres mydatabase

这将在 “db” 服务的容器中使用 PostgreSQL 客户端连接到 “mydatabase” 数据库,并进行以下操作:

  • 设置环境变量 POSTGRES_USER 的值为 “postgres”。
  • 设置环境变量 POSTGRES_PASSWORD 的值为 “password”。
  • 连接到名为 “my_network” 的网络。

4. 在 Web 服务容器中运行 Python 脚本,使用卷,连接网络:

docker-compose run -v my_volume:/path/to/file/in/container --network my_network web python my_script.py

这将在 “web” 服务的容器中运行名为 “my_script.py” 的 Python 脚本,并进行以下操作:

  • 将名为 “my_volume” 的卷挂载到容器中的 /path/to/file/in/container 路径。
  • 连接到名为 “my_network” 的网络。

port

docker-compose port [options] SERVICE PRIVATE_PORT

打印某个容器端口所映射的公共端口。

选项:

  • --protocol=proto 指定端口协议,tcp(默认值)或者 udp。
  • --index=index 如果同一服务存在多个容器,指定命令对象容器的序号(默认为 1)。
# 下面结果表示:将web服务的5000端口映射到了宿主机的5001端口
 $ docker-compose port web 5000
   0.0.0.0:5001

5. 简单示例

参考链接:
[Docker] Docker Compose 基础教程(概念/基础操作)
全网最详细的Docker-Compose详细教程
Docker Compose

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

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

相关文章

男士内裤一般几个月换一个?男性内裤的选购方法分享!

男士内裤&#xff0c;作为日常穿着的重要衣物&#xff0c;往往被许多男性朋友所忽视。然而&#xff0c;一款合适的内裤不仅能够提升穿着的舒适度&#xff0c;还能在一定程度上维护健康。因此&#xff0c;对男士内裤的选择&#xff0c;我们应当给予足够的重视。 众多男性朋友们…

C++——从C语言快速入门

目录 一、数组 1、声明数组 2、初始化数组 3、访问数组元素 4、示例 5、注意事项 6、数组小练习 计算器支持加减乘除 数组找最大值 二、指针 三、字符串 string 类型 一、数组 在 C 中&#xff0c;数组是一种存储固定大小的相同类型元素的序列。数组的所有元素都存…

半导体人才荒,何解?

过去两年&#xff0c;全球半导体行业陷入寒冬&#xff0c;砍单、裁员、减产、倒闭等各种负面消息接踵而至。 2024年来&#xff0c;在全球半导体产业经历周期性下滑后&#xff0c;逐渐迎来复苏&#xff0c;市场景气向好。据WSTS预测&#xff0c;2024年全球半导体市场将同比增长…

四川古力未来科技抖音小店靠谱之选,购物新体验

在当今数字化浪潮下&#xff0c;抖音小店作为新兴的电商平台&#xff0c;正以其独特的魅力和便捷性&#xff0c;吸引着越来越多的消费者。而四川古力未来科技抖音小店&#xff0c;凭借其优质的产品、完善的服务和良好的口碑&#xff0c;成为了众多消费者的靠谱之选。 四川古力未…

Paraformer解读(1)基于self-attention和dfsmn的encoder

DFSMN SAN-M python实现 import torch import torch.nn as nn import torch.nn.functional as Fclass PositionalEncoding(nn.Module):def __init__(self, d_model, dropout0.1, max_len5000):super(PositionalEncoding, self).__init__()self.dropout nn.Dropout(pdropout)p…

国资国企如何高效实现数据监管报送

为深入贯彻国家关于数字经济与实体经济融合发展的重要指示&#xff0c;结合国资监管信息系统的规范要求&#xff0c;亿信华辰积极响应&#xff0c;助力国企走上数字化转型的道路。应对国资国企监管要求&#xff0c;国资国企监管数据填报平台作为数字化建设的关键环节&#xff0…

【Vue】——前端框架的基本使用

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

超声波清洗机哪个品牌好用点?四款超卓超声波清洗机疯狂安利!

在这个注重效率与清洁卫生的时代&#xff0c;小型超声波清洗机因其便携性、高效能以及出色的清洁效果&#xff0c;成为了家庭和小型工作室的必备神器。无论是清洗珠宝、眼镜、化妆刷&#xff0c;还是日常的金属餐具和电子产品&#xff0c;小型超声波清洗机都能轻松应对&#xf…

操作失败——后端

控制台观察&#xff0c;页面发送的保存菜品的请求 返回的response显示&#xff1a; ---------- 我开始查看明明感觉都挺正常&#xff0c;没啥错误&#xff0c;就是查不出来。结果后面电脑关机重启后&#xff0c;隔一天看&#xff0c;就突然可以了。我觉着可能是浏览器的缓存没…

C# 声音强度图绘制

C# 声音强度图绘制 采集PCM音频数据 音频原来自麦克风 音频源来自录音文件 处理PCM音频数据 将PCM数据进行强度值换算 private void UpdateVoice(double[] audio){// 计算RMS值double rms Math.Sqrt(audio.Select(x > x * x).Average());// 将RMS值转换为分贝值&#x…

常用的接口测试工具

大家好&#xff0c;当谈到软件开发中的质量保证时&#xff0c;接口测试无疑是至关重要的一环。在当今快节奏的开发环境中&#xff0c;确保应用程序的各个组件之间的交互正常运作是至关重要的。而接口测试工具则成为了开发人员和测试人员的得力助手&#xff0c;帮助他们有效地测…

Java版电商平台B2B2C:多商家直播商城系统特性解析

B2B2C平台&#xff0c;立足于传统电商领域&#xff0c;同时引入了创新的商业模式。该平台不仅支持商家入驻和平台自营&#xff0c;还积极构建了一个全新的市场环境&#xff0c;旨在为各行各业及互联网创业者提供更多收益机会。 该平台以消费者需求为中心&#xff0c;帮助企业构…

什么是人机协同翻译

什么是人机协同翻译 序什么是人机协同翻译账号绑定服务开通文档翻译图片翻译体验感受及建议 序 什么是人机协同翻译&#xff0c;为什么会需要人机协同翻译&#xff0c;以及人机协同翻译的效果&#xff0c;应用场景等&#xff0c;本文将关于这些内容一一解答。 什么是人机协同…

全平台自定义小程序源码系统 一个后台控制7端 自主设计属于你的小程序 前后端带完整的安装代码包以及搭建教程

系统概述 在当今数字化时代&#xff0c;小程序以其轻量级、跨平台、即用即走的特点&#xff0c;成为企业、个人及开发者们追捧的热门工具。为了满足不同用户的需求&#xff0c;小编给大家分享一款全平台自定义小程序源码系统。该系统通过一套强大的后台管理系统&#xff0c;实…

SD NAND的垃圾回收机制:无人机数据管理的隐形守护者

随着科技的飞速发展&#xff0c;无人机在各个领域的应用越来越广泛&#xff0c;从航拍到物流配送&#xff0c;再到农业监测&#xff0c;无人机正逐渐成为我们生活中不可或缺的一部分。而SD NAND作为一种创新的存储芯片&#xff0c;可以直接贴片使用&#xff0c;具有小尺寸、高可…

机台数据导出难住IT管理员,如何才能解决IT人员的困境?

为了方便数据的共享、保存、分析、合规性和迁移等目的&#xff0c;企业会按规律性的时间周期进行机台数据的导出操作&#xff0c;通过专业的数据迁移软件、外部存储设备&#xff08;如USB硬盘、移动硬盘、SD卡等&#xff09;&#xff0c;或者通过机台设备的专用导出功能来完成。…

MoE 混合专家模型(Mixture of Experts)

参考&#xff1a;深度揭秘爆火MoE&#xff01;GPT-4关键架构&#xff0c;成开源模型逆袭杀手锏 (baidu.com) MoE是一种神经网络架构设计&#xff0c;在Transformer模块中集成了专家/模型层。 当数据流经MoE层时&#xff0c;每个输入token都会动态路由到专家子模型进行处理。当…

使用Rufus工具制作Ubuntu To Go——很详细

一、准备工作 准备工具&#xff1a; 1、下载Rufus(主角)软件 2、准备一个U盘或硬盘&#xff08;小白128G足够&#xff0c;装Ubuntu系统&#xff09; 3、下载Ubuntu系统镜像文件 1、下载软件Rufus 先来看一下官网介绍&#xff1a; Rufus 是一款格式化和创建 USB 启动盘的辅助工…

直播商城源码-PC+APP+H5+小程序现成源码

随着电商行业的不断演进&#xff0c;直播商城已成为连接消费者和商品的新兴桥梁。直播商城源码提供了一个完整的解决方案&#xff0c;使得企业能够迅速搭建起一个覆盖PC、APP、H5和小程序的全渠道电商平台。本文将探讨直播商城源码的优势、关键功能以及如何选择适合的现成源码。…

银河麒麟操作系统 v10 离线安装 mysql 8.4.0

一 查看系统环境 [root0003 ~]# cat /etc/os os-release ostree/ [root0003 ~]# cat /etc/os-release NAME"Kylin Linux Advanced Server" VERSION"V10 (Lance)" ID"kylin" VERSION_ID"V10" PRETTY_NAME"Kylin Linux Ad…