Docker Compose常用命令与属性

在这里插入图片描述

大家好,今天给大家分享Docker Compose的常用命令,以及docker-compose文件的属性。Docker Compose 是一个用于定义和运行多容器 Docker 应用应用的重要工具。它通过一个配置文件(docker-compose.yml)来详细定义多个容器之间的关联、网络设置、服务端口等信息。使用一条简单的命令,就可以轻松启动、停止和管理这些容器,极大地简化了多容器应用的部署与管理流程,方便实现应用的快速构建、开发、测试以及部署。

Docker Compose 将所管理的容器划分为三层,即工程(project)、服务(service)和容器(container)。在 Docker Compose 运行目录下,所有文件(主要是 docker-compose.yml)共同构成一个工程。一个工程中包含多个服务,每个服务中又定义了容器运行所需的镜像、参数和依赖等。并且,一个服务可以包含多个容器实例。

关于 Docker 的安装和常用命令,本文不做详细说明,可以参考:
Docker在Windows与CentOS上的安装

Docker常用命令

一、Docker Compose常用命令

执行docker-compose命令时,需要在执行命令的目录下存在 docker-compose.yml 或者 docker-compose.yaml

ps:列出所有运行容器
docker-compose ps
build:构建或者重新构建服务
docker-compose build
logs:查看服务日志输出
docker-compose logs
port:打印绑定的公共端口
# 输出 mysql 服务 3306 端口所绑定的公共端口
docker-compose port mysql 3306
start:启动指定服务已存在的容器
docker-compose start mysql
stop:停止已运行的服务的容器
docker-compose stop mysql
rm:删除指定服务的容器
docker-compose rm mysql
scale:设置指定服务运气容器的个数,以 service=num 形式指定
docker-compose mysql user=3 movie=3
run:在一个服务上执行一个命令
docker-compose run web bash
up:构建、启动容器
docker-compose up
注意:
  • docker-compose的文件,只有在文件名为docker-compose时才可以使用docker-compose up命令,如果名字为自定义时,需要指定文件名才行,命令为:
docker-compose -f my-compose.yml up
  • docker-compose文件名后缀使用 .yml 或 .yaml都可。
  • 若是要后台运行,加上-d
docker-compose up -d
kill:通过发送 SIGKILL 信号来停止指定服务的容器
docker-compose kill mysql
pull:下载服务镜像
docker-compose pull mysql:lasted

二、docker-compose.yaml文件属性

Docker Compose 的 yaml 文件有着严格的缩进和空格要求,一般来说,它主要由以下几个部分构成:

首先是版本(Version),这是 Docker Compose 文件的顶级元素,用于明确所采用的 Docker Compose 文件版本,进而确定所使用的语法及支持的功能。

其次是服务(Services),该部分对应用程序的各个服务或容器进行定义。每个服务都拥有独特的名称,并囊括了该服务的配置信息,比如所应用的镜像、环境变量、端口映射、卷挂载等。

再者是网络(Networks),这部分负责定义应用程序的网络配置。可以创建自定义网络,并明确容器连接到哪个网络上,以实现容器之间的顺畅通信。

还有卷(Volumes),该部分定义了应用程序的卷挂载配置。可以指定容器与宿主机之间文件或目录的映射关系,从而实现数据的持久化和共享。

另外,环境变量(Environment Variables)也是重要部分,在服务的配置中,可以通过 environment 或 env_file 字段来指定环境变量,这些环境变量会被传递到容器内运行的应用程序中。

同时,端口映射(Port Mapping)也不可或缺,在服务的配置中,可以利用 ports 字段来明确容器端口与宿主机端口之间的映射关系,以此实现从宿主机访问容器内运行的服务。

最后是卷挂载(Volume Mounting),在服务的配置中,可以通过 volumes 字段来指定容器内路径与宿主机路径之间的映射关系,使容器与宿主机能够共享文件和数据。

官方文档:https://docs.docker.com/compose/reference/build/

Compose文与和Docker的兼容性:

目前 Compose 文件格式有3个版本,分别为1、2.x 和 3.x。
主流的为 3.x 其支持 docker 1.13.0 及其以上的版本。

version

'3’表示使用第三代语法来构建 docker-compose.yaml 文件。

services

用来表示 compose 需要启动的服务。

image

指定启动容器的镜像,可以是镜像仓库/标签或者镜像id(或者id的前一部分)

container_name

容器名称,指定一个自定义容器名,而不是默认生成的名称。

environment

此节点下的信息会当作环境变量传入容器。

ports

本地端口/容器端口,将容器中的端口映射到本地端口上。

restart

always 表示如果服务启动不成功会一直尝试。

volumes

映射容器中的文件到本地,本地的也会映射到容器中。

depends_on

可以配置依赖服务,表示需要先启动 depends_on 下面的服务后,再启动本服务。

build

用来构建指定路径的Dockerfile文件以及args参数

version: '2'
services:
  webapp:
    build:
      context: ./my_dir    #如果是.表示当前路径
      dockerfile: Dockerfile-alternate  # 指定Dockerfile文件名。如果上面context指定了文件名,这里就不用本属性了
      args:
        buildno: 1

webapp服务将会通过./my_dir目录下的Dockerfile-alternate文件构建容器镜像。
如果你同时指定image和build,则compose会通过build指定的目录构建容器镜像,而构建的镜像名为image中指定的镜像名和标签。
image: webapp:tag
这将由./dir构建的名为webapp和标记为tag的镜像。

image

image指定启动容器的镜像,可以是镜像仓库/标签或者镜像id(或者id的前一部分)

image: mysql
image: ubuntu:14.03
image: tutum/influxdb
image: example-registry.com:3000/postgresql
image: a4nhg65fd

如果镜像不存在,Compose将尝试从官方镜像仓库将其pull下来,如果你还指定了build,在这种情况下,它将使用指定的build选项构建它,并使用image指定的名字和标记对其进行标记。

volumes

卷挂载路径设置,就是将容器中的文件映射到宿主机中,方便修改。

volumes:
  # 只需指定一个路径,让引擎创建一个卷
  - /var/lib/mysql
 
  # 指定绝对路径映射
  - /opt/data:/var/lib/mysql
  
  # 指定相对路径映射
  - ./cache:/tmp/cache
  
  # 文件映射
  - ./cache/abc.java:/tmp/cache/abc.java
 
  # 用户主目录相对路径映射,此处 ro 下面详解
  - ~/configs:/etc/configs/:ro
 
  # 命名卷
  - datavolume:/var/lib/mysql
ro、rw详解:
  • 不指定
    文件:宿主机修改该文件后容器里面看不到变化;容器里面修改该文件,宿主机也看不到变化
    文件夹:不管是宿主机还是容器内修改、新增、删除文件,都会相互同步

  • ro
    文件:容器内不能修改,会提示read-only
    文件夹:容器内不能修改、新增、删除文件夹中的文件,会提示read-only

  • rw
    文件:不管是宿主机还是容器内修改,都会相互同步,但容器内不允许删除,会提示Device or resource busy;宿主机删除文件,容器内的不会被同步
    文件夹:不管是宿主机还是容器内修改、新增、删除文件,都会相互同步

links

链接到另一个服务中的容器。 请指定服务名称和链接别名(SERVICE:ALIAS),或者仅指定服务名称。

web:
  links:
   - db
   - db:database
   - redis

links也可以起到和depends_on相似的功能,即定义服务之间的依赖关系,从而确定服务启动的顺序。

external_links

链接到docker-compose.yml 外部的容器,甚至并非 Compose 管理的容器。参数格式跟 links 类似。

external_links:
 - redis_1
 - project_db_1:mysql
 - project_db_1:postgresql
restart

设置容器重启策略

# 默认策略,在任何情况下都不会重启容器
restart: "no"
# 容器总是在停止后重新启动
restart: always
# 容器非正常退出时,退出状态非0才会重启   
restart: on-failure
# 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
restart: unless-stopped
network_mode

设置网络模式

# 桥接模式
network_mode: "bridge"
# 本机模式
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
networks

配置容器连接的网络,引用顶级 networks 下的条目 。

services:
  some-service:
    networks:
      some-network:
        aliases:
         - alias1
      other-network:
        aliases:
         - alias2
networks:
  some-network:
    driver: custom-driver-1

注意:
aliases :同一网络上的其他容器可以使用服务名称或此别名来连接到对应容器的服务。

expose

暴露端口,但不映射到宿主机,只被连接的服务访问。 仅可以指定内部端口为参数。

expose:
 - "3000"
 - "8000"
ports

暴露端口信息。 常用的简单格式:使用宿主机:容器(HOST:CONTAINER)。

ports:
 - "3000"
 - "3000-3005"
 - "8000:8000"
 - "9090-9091:8080-8081"
 - "49100:22"
 - "127.0.0.1:8001:8001"
 - "127.0.0.1:5000-5010:5000-5010"
 - "6060:6060/udp"

在v3.2中ports的长格式的语法允许配置不能用短格式表示的附加字段。 长格式:

ports:
  - target: 80
    published: 8080
    protocol: tcp
    mode: host

target:容器内的端口
published:物理主机的端口
protocol:端口协议(tcp或udp)
mode:host 和ingress 两种模式,host用于在每个节点上发布主机端口,ingress 用于被负载平衡的swarm模式端口。

pid

将pid模式设置为主机pid模式。 这就打开了容器与主机操作系统之间的共享pid地址空间。 使用此标志启动的容器将能够访问和操作裸机的命名空间中的其他容器,反之亦然。即打开该选项的容器可以相互通过进程 ID 来访问和操作。

pid: "host"
container_name

指定一个自定义容器名称,而不是生成的默认名称。

version: '3'
services:
  node-exporter:
    image: prom/node-exporter:latest
    # 由于Docker容器名称必须是唯一的,因此如果指定了自定义名称,则无法将服务扩展到多个容器。
    container_name: node-exporter
    restart: always
    ports:
      - "9100:9100"
environment

配置环境变量

version: '3'
services:
  mysqld-exporter:
    image: prom/mysqld-exporter
    container_name: mysqld-exporter
    restart: always
    ports:
      - "9104:9104"
    environment:
      - DATA_SOURCE_NAME="user:password@(hostname:3306)/"

三、docker-compose.yaml文件示例

以下是一个完成的 docker-compose.yaml 文件内容示例:

version: "3"
services:
    redis:
        image: redis:latest
        ports:
            - "6379:6379"
        container_name: im-redis-compose
        restart: always
        command: redis-server --appendonly yes
    
    rabbitmq:
        image: rabbitmq:management
        ports:
            - "5672:5672"
            - "15672:15672"
        container_name: im-rabbitmq-compose
        environment:
            RABBITMQ_DEFAULT_USER: guest
            RABBITMQ_DEFAULT_PASS: guest
            RABBITMQ_DEFAULT_VHOST: my_vhost
 
    backend:
        build: .
        links:
            - redis
            - rabbitmq
        container_name: im-server-compose
        restart: on-failure
        depends_on:
            - rabbitmq
            - redis
        ports:
            - "3000:3000"
        command: sh -c './wait-for.sh rabbitmq:15672'

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

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

相关文章

拼多多投产比高了好还是低了好

投产比是衡量店铺经济效益和可行性的重要指标,它通过比较投入和产出(销售额)来反映店铺的盈利能力,一个高的投产比意味着相对较小的投入获得了较大的销售额,表明店铺的经济效益较好。要提升投产比,商家可以…

模型查询器在使用别名后不能使用tp6

在我们定义了模型的查询器时,再通过模型进行连表加别名的时候,使用查询器,查询器会没办法使用; 那我们可以将查询器前缀增加表名或者__TABLE__ 以上两种方式都可以,个人建议使用__TABLE__,因为这个查询器可…

蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app

本文来自:蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app - 源码1688 卡券绿色循环计划—— 一项旨在构建卡券价值再利用生态的社会责任感项目。在当前数字化消费日益普及的背景下,大量礼品卡、优惠券因各种原因未能有效…

网络工程师必备:静态路由实验指南

大家好,这里是G-LAB IT实验室。今天带大家学习一下华为静态路由实验配置 01、实验拓扑 02、实验需求 1.R1环回口11,1,1.1模拟PC1 2.R2建立2个环回口模拟Server server-1: 22,1,1.1 server-2: 44.1.1.1 3.要求使用静态路由实现全网互通 PC1去往server-1从R3走…

HA-MAc,透明质酸-甲基丙烯酸酯可用于制备具有交联能力的透明质酸基材料

【基本信息】 Hyaluronate Methacrylate(甲基丙烯酸酯化透明质酸,简称HA-MAc)是一种重要的生物材料 中文名称:甲基丙烯酸酯化透明质酸、透明质酸-甲基丙烯酸酯 英文名称:Hyaluronate Methacrylate、HA-MAc 分子量&…

电能表采用无线通信的好处

电能表采用无线通信的好处涉及多个方面,从提高数据传输的效率和实时性、增强系统的灵活性和可扩展性,到优化能源管理和提高安全性等方面,都展现了其独特的优势。 一、提高数据传输的效率和实时性 传统的有线通信方式在电能表数据传输中存在…

阿赵UE引擎C++编程学习笔记——信息打印输出

大家好,我是阿赵。   在之前介绍HelloWorld的时候,使用了一个打印的命令,把HelloWorld输出到输出日志里面。   对于我们编写程序代码来说,有2个手段是对程序差错非常重要的,一个是断点,另外一个是输出日…

地下水位自动监测设备:矿井水文监测系统

TH-DSW2地下水位自动监测设备具有实时性、连续性和自动化等特点,广泛应用于地下水深井水位测量、矿山深井水位测量、地热井水位测量。可以实现对地下水位的24小时不间断监测。它在城市供水和水资源管理、农业灌溉、地质和地下探测等领域具有广泛的应用。 在城市供水…

【python】基于岭回归算法对学生成绩进行预测

前言 在数据分析和机器学习领域,回归分析是一种预测连续数值的监督学习技术。当数据特征与目标变量之间存在线性关系时,线性回归模型尤其有用。然而,当特征数量多于样本数量,或者特征之间存在多重共线性时,普通最小二…

液压阀比例电磁铁控制放大器

液压阀比例电磁铁控制放大器是一种将电信号精确转换为液压动力的技术,用于实现对液压系统的精细控制。与传统的开关型电磁铁不同,比例电磁铁可以实现连续控制,允许进行微调以适应不同的控制需求。比例液压阀包括比例压力阀、比例流量阀等&…

融知财经:期货交易原理是怎样的?期货交易有哪些特征?

期货的原理是基于对某期货品种未来走势的判断而形成对其合约的买卖交易,因此期货可以解释为买涨或买跌。买涨,即看多交易,预期某期货品种未来价格上涨而进行的买入开仓交易;买跌,即看空交易,预期某期货品种…

【Python深度学习(第二版)(4)】神经网络的基本数据结构-张量概念、阶数、使用NumPy操作张量、张量种类、样本轴等概念

文章目录 一. 张量概念二. 张量的阶数1. 标量(0阶张量)2. 向量(1阶张量)2. 矩阵(2阶张量)3. 3阶张量与更高阶的张量 三. 张量属性及操作张量1. 张量的关键属性2. 在NumPy中操作张量2.1. 选择某个图片数据2.…

班级综合测评|基于Springboot+vue的班级综合测评管理系统(源码+数据库+文档)

目录 基于Springbootvue的“智慧食堂”系统 一、前言 二、系统设计 三、系统功能设计 1 管理员功能模块 2学生功能模块 3教师功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大…

Python应用:让生活更智能

随着科技的进步,Python已成为一种非常受欢迎的编程语言,它在数据分析、人工智能、Web开发等领域有着广泛的应用。今天,我们将探讨一个Python应用的例子,这个应用将帮助我们更智能地管理日常生活。 应用名称:智能生活助…

Kubernetes最小单元Pod的生命周期

1.1 Pod生命周期 1.1.1 过程及状态 Pod 的生命周期管理是 Kubernetes 集群中非常重要的一部分,它涉及到 Pod 从创建到销毁的整个过程。下面是 Pod 生命周期中各个阶段的简要说明: Pod 创建过程:当一个 Pod 被创建时,Kubernetes 会…

三层架构实验

交换部分 第一个步骤配 Eth-Trunk,目的是:将两条线绑在一起 sw和1sw2上配置 [sw1]interface Eth-Trunk 0 //创建隧道 [sw1-Eth-Trunk0]q [sw1]int g 0/0/2 [sw1-GigabitEthernet0/0/2]eth-trunk 0 //进入接口划分隧道 [sw1-GigabitEthernet0/0/2]…

JavaScript算法描述【排序与搜索】六大经典排序|搜索旋转排序数组|在排序数组中查找元素的第一个和最后一个位置、数组中的第K个|

🐧主页详情:Choice~的个人主页 文章目录 搜索旋转排序数组方法一 二分查询最大最小值思路详解代码方法二 二分查询中间数 在排序数组中查找元素的第一个和最后一个位置、数组中的第K个最大元素和颜色分类在排序数组中查找元素的第一个和最后一个位置方法…

【LeetCode刷题】153. 寻找旋转排序数组中的最小值

1. 题目链接2. 题目描述3. 解题方法4. 代码 1. 题目链接 153. 寻找旋转排序数组中的最小值 2. 题目描述 3. 解题方法 根据题目分析,可以明确一点,无论该数组如何旋转,都会有这样的一个性质,就是nums[0] > nums[n-1]&#xf…

CST软件的界面快捷键汇总与操作窗口【入门基础】

CST界面操作快捷键 利用鼠标和键盘快捷键的GUI操作 View > Mouse Control 本章节介绍,使用鼠标和键盘快捷键,操作CST软件的2D/3D GUI (Graphical User Interface图形用户界面)的方法。为了快速方便地操作2D/3D Model,建议熟悉本章节的内…

springcloud报错:Failed to start bean‘webServerStartStop‘

如果你正在使用nacos进行服务注册,然后报一下错误: 那就说明的nacos没有打开,所以找到你的下载nacos的文件夹 好了,错误完美解决~