Docker Compose用法详解

文章目录

    • Docker Compose是什么
    • 安装Docker Compose
    • Compose文件编写
    • 使用Docker Compose部署-管理应用

Docker Compose是什么

Docker Compose是一个用于定义和运行多容器Docker应用程序的python工具。它允许您使用一个单独的配置文件来定义和配置多个相关容器的服务,以便它们可以一起协同工作。

安装Docker Compose

直至今日,Docker Compose仍然是一个需要在Docker主机上进行安装的外部Python工具。
下面介绍一下如何在Linux系统下安装Docker Compose工具。

# 下载二进制文件
# 如果下载失败可以到github上去直接下载二进制文件
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 赋予可执行权限
sudo chmod +x /usr/local/bin/docker-compose# 查看docker compse的版本信息
docker-compse --version

Compose文件编写

Docker Compose使用YAML文件来定义多服务的应用。YAML是JSON的一个子集,因此也可以使用JSON。Docker Compose默认使用文件名docker-compose.yml。当然用户也可以使用 -f 参数来指定具体文件。下面以一个docker-compose.yml文件为例说明一下docker-compse的基本语法:

# version必须指定
# version 并非定义Docker Compose或Docker引擎的版本号
# 它定义了Compose文件格式(主要是API)的版本,建议使用最新版本
version: "3.5"
# services 用于定义不同的应用服务, 也就是不同的镜像
services:# 服务1 services1:# 从当前目录下找Dockerfile构建新镜像build: .# 指定容器的名称container_name: my-web-container# 指定Docker在容器中执行名为app.py的Python脚本作为主程序# 可覆盖Dockerfile中的CMD命令command: python app.py# 指定Docker将容器内(-target)的5000端口映射到主机(published)的5000端口ports:- target: 5000published: 5000# 连接到my-net网络    networks:- my-net# 指定Docker将counter-vol卷(source:)挂载到容器内的/code(target:)volumes:- type: volumesource: counter-voltarget: /codevolumes:# 将本机的./host/path目录映射到Docker容器中的/container/path- ./host/path:/container/path   # 只读映射     - /host/path:/container/path:ro# 给服务设置环境变量 environment:- ENV_VAR1=value1- ENV_VAR2=value2- ENV_VAR3=value3   # 指定重启策略   restart: "no" / always  / on-failure  / unless-stopped# 服务2          services2:# Docker可以基于redis:alpine 镜像启动一个独立的名为redis的容器image: "redis:alpine"# 连接到my-net网络networks:- my-net# 用于指引Docker创建新的网络
# 默认情况下,Docker Compose会创建bridge网络
# 这是一种单主机网络,只能够实现同一主机上容器的连接
networks:# 创建名为my-net的Overlay网络# 允许独立的容器连接到该网络上my-net:driver: overlayattachable: true# volumes用于指引Docker来创建新的卷
# 创建了一个名为data-vol的卷
volumes:data-vol:

docker-compose允许将一些变量通过外部文件进行定义,定义方法如下:
在docker-compose的目录下,创建一个名为.env的文件,并在其中以下面的格式定义环境变量:

ENV_VAR1=value1
ENV_VAR2=value2

在Compose文件中使用${ENV_VAR}的方式引用环境变量,这样,Compose会自动加载.env文件中的环境变量,并将其传递给服务

services:my-service:image: my-image:latestenvironment:- ENV_VAR1=${ENV_VAR1}- ENV_VAR2=${ENV_VAR2}

更多语法说明参见官方文档:
https://docs.docker.com/compose/compose-file/03-compose-file/

使用Docker Compose部署-管理应用

这里介绍一下使用Docker Compose管理和部署镜像的时候的常用命令。

# 在compose的目录下执行下面的命令, 启动应用
# 它会构建所需的镜像,创建网络和卷,并启动容器
# docker-compose up会查找名为docker-compose.yml 或docker-compose.yaml 的Compose文件
docker-compose up &# 停止和关闭应用
docker-compose down # 指定特定的配置文件
# 使用-d 参数在后台启动应用
docker-compose -f prod-equus-bass.yml up# 查看应用的状态
docker-compose ps# 列出各个服务(容器)内运行的进程
docker-compose top# 命令会停止应用,但并不会删除资源
docker-compose stop# 删除应用相关的容器和网络  但不会删除卷和镜像
docker-compose rm # 重启应用
docker-compose restart # 当第一次部署该应用的时候,Docker Compose会检查是否有同名的卷存在。
# 如果不存在,则会创建它。可使用docker volume ls 查看

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

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

相关文章

【leetcode】454. 四数相加 II(medium)

给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 思路&#xff1a;如果要暴力&#xff0c;那么时间复杂…

Unity 基础函数

Mathf&#xff1a; //1.π-PI print(Mathf.PI); //2.取绝对值-Abs print(Mathf.Abs(-10)); print(Mathf.Abs(-20)); print(Mathf.Abs(1)); //3.向上取整-Ce il To In t float f 1.3f; int i (int)f; …

GCLIB动态代理

1.创建要代理的类 public class Boy {public void eat() {System.out.println("eat");} } 2.创建拦截器 public class MyMethodInterceptor implements MethodInterceptor {Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodPr…

如何在群辉NAS系统下安装cpolar套件,并使用cpolar内网穿透?

如何在群辉NAS系统下安装cpolar套件,并使用cpolar内网穿透&#xff1f; 文章目录 如何在群辉NAS系统下安装cpolar套件,并使用cpolar内网穿透&#xff1f;前言1. 在群辉NAS系统下安装cpolar套件2. 管理隧道列表3. 创建固定数据隧道 前言 群晖作为大容量存储系统&#xff0c;既可…

git rebase

git rebase 详解git rebase&#xff0c;让你走上git大神之路 - 知乎 git练习 Learn Git Branching

AIGC之stable diffusion(SD)炼丹总结

1 stable diffusion技术介绍 2 常用资源 社区&#xff1a; civitai : 主流的AI绘画模型分享网站, 可以看大家分享出来的模型和生成的图像。 但是国内用户要访问这个网站&#xff0c; 需要科学上网。 aigccafe 这个是civitai的国内镜像网站&#xff0c;推荐使用这个。 代码…

bootloader跳转APP注意事项

在gd32f427 时跳转异常 参考文章&#xff1a; https://club.rt-thread.org/ask/question/425321.html%20https:/club.rt-thread.org/ask/question/eab19452583b5959.html https://club.rt-thread.org/ask/question/eab19452583b5959.html 关闭全部中断&#xff0c;并且清除中…

springcloud3 springcloud stream的学习以及案例

一 springcloud stream的作用 1.1 springcloud stream作用 stream屏蔽底层消息中间件的差异&#xff0c;降低切换成本&#xff0c;统一消息的编程模型。 stream中的消息通信模式遵循了“发布-订阅”模式。 1.2 Binder作用 通过定义绑定器Binder作为中间层&#xff0c;实现…

力扣hot100刷题记录

二刷hot100&#xff0c;坚持每天打卡&#xff01;&#xff01;&#xff01;Today&#xff1a;2023-8-10 1. 两数之和 // 先求差&#xff0c;再查哈希表 public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map new HashMap<>();for(int i 0;i&…

深度ip转换器:一键更换ip地址方法

很多网友问小编有关深度ip转换器怎么用&#xff1f;最新深度ip转换器手机版app&#xff1f;下面小编整理了深度ip转换器怎么修改ip地址的技巧和诀窍&#xff0c; 让我们来详细的了解一下深度id转换器&#xff0c; 一、深度ip转换器怎么用 1.深度ip转换器怎么用&#xff0c;深度…

JavaScript:深入探索async/await的使用

在JavaScript的异步编程领域&#xff0c;ES8引入的async/await语法是一项重要的创新。它让异步代码看起来更像同步代码&#xff0c;使得处理异步操作变得更加清晰和简洁。本文将深入探索async/await的使用&#xff0c;帮助你充分发挥这项技术的优势。 1. 什么是async/await&…

SpringBoot 升级内嵌Tomcat

SpringBoot 更新 Tomcat 最近公司的一个老项目需要升级下Tomcat&#xff0c;由于这个项目我完全没有参与&#xff0c;所以一开始我以为是一个老的Tomcat项目&#xff0c;升级它的Tomcat依赖或者是Tomcat容器镜像&#xff0c;后面发现是一个SpringBoot项目&#xff0c;升级的是…

Dockerfile 简单实战

将flask项目打包成镜像 1. 准备flask文件 创建 app.py 文件&#xff0c;内容如下 from flask import Flask app Flask(__name__)app.route(/) def hello_world():return Hello Worldif __name__ __main__:app.run(host0.0.0.0, port8000, debugTrue) 并开启外网访问&#xf…

vue消息订阅与发布,实现任意组件间通讯

第一步&#xff1a;下载第三方消息订阅与发布库&#xff0c;例如常用的pubsub.js,他可以在任何框架中使用包括vue、react、anglar等等。 命令&#xff1a;npm i pubsub-js 注意是pubsub-js(不是点); 第二步&#xff1a;引入库&#xff1b; import pubsub from pubsub-js 第…

美国服务器有哪些类型?

美国服务器有哪些类型?常见的服务器可分为虚拟主机、云服务器、物理服务器以及高防服务器&#xff0c;在海外服务器之中&#xff0c;使 用较多的属于美国服务器&#xff0c;下面我们就一起看看美国服务器有哪些及常见的美国服务器。 美国服务器有哪些? 与服务器一样&am…

Java并发编程(二)并发理论[JMM/重排序/内存屏障/Happens-Before 规则]

JMM(Java内存模型) 概述 JMM即Java内存模型(Java Memory Model),是一种抽象的概念,并不真实存在,JMM描述的是一组规则或规范,通过这组规范定义了程序中各个变量的访问方式Java内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操…

Android AOSP源码编译——AOSP下载(一)

一、电脑配置 Ubuntu16.04 16G&#xff0c;硬盘的大小最好大于300G (我这边是找了个win电脑装了双系统 没有使用虚拟机的方式) 二、基础环境配置 1、安装git sudo apt install git配置git email和name git config --global user.email "youexample.com" git conf…

python 批量下载m3u8的视频

方法&#xff1a; 解析m3u8&#xff0c;获取其中的ts列表&#xff0c;多线程下载所有ts文件。 全部下完之后&#xff0c;用ffmpeg合并成mp4 代码&#xff1a; import requests import os import threadingtnum 64class Downloader(threading.Thread):def __init__(self, i…

数据结构—树和二叉树

5.树和二叉树 5.1树和二叉树的定义 树形结构&#xff08;非线性结构&#xff09;&#xff1a;结点之间有分支&#xff0c;具有层次关系。 5.1.1树的定义 树&#xff08;Tree&#xff09;是n&#xff08;n≥0&#xff09;个结点的有限集。 若n0&#xff0c;称为空树&#x…

LVS工作环境配置

一、LVS-DR工作模式配置 模拟环境如下&#xff1a; 1台客户机 1台LVS负载调度器 2台web服务器 1、环境部署 &#xff08;1&#xff09;LVS负载调度器 yum install -y ipvsadm # 在LVS负载调度器上进行环境安装 ifconfig ens33:200 192.168.134.200/24 # 配置LVS的VIP…