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:- alias1other-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: 80published: 8080protocol: tcpmode: 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-exporterrestart: alwaysports:- "9100:9100"
environment

配置环境变量

version: '3'
services:mysqld-exporter:image: prom/mysqld-exportercontainer_name: mysqld-exporterrestart: alwaysports:- "9104:9104"environment:- DATA_SOURCE_NAME="user:password@(hostname:3306)/"

三、docker-compose.yaml文件示例

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

version: "3"
services:redis:image: redis:latestports:- "6379:6379"container_name: im-redis-composerestart: alwayscommand: redis-server --appendonly yesrabbitmq:image: rabbitmq:managementports:- "5672:5672"- "15672:15672"container_name: im-rabbitmq-composeenvironment:RABBITMQ_DEFAULT_USER: guestRABBITMQ_DEFAULT_PASS: guestRABBITMQ_DEFAULT_VHOST: my_vhostbackend:build: .links:- redis- rabbitmqcontainer_name: im-server-composerestart: on-failuredepends_on:- rabbitmq- redisports:- "3000:3000"command: sh -c './wait-for.sh rabbitmq:15672'

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

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

相关文章

营销管理新突破,店匠科技与TikTok Shop携手深化合作

在全球化浪潮与数字化趋势的推动下,跨境电商已成为众多商家追求增长的新高地。TikTok Shop美国小店(TTS)以其庞大的用户基础和市场规模,成为商家们竞相入驻的热门平台。店匠科技(Shoplazza)作为领先的独立站SaaS服务商,近日宣布与TikTok Shop达成深度合作,为商家带来一站式订单…

docker端口映射成功,docker端口不生效的问题解决,外界无法访问docker映射端口

docker端口映射不生效的问题解决 问题 使用docker run -p 88848:8848后,显示容器启动正常,并且使用docker logs –f xxx能够看到容器可以正常启用,docker ps 可以看到容器启动成功,并且端口已经映射,但是在浏览器访问相关地址&am…

智慧公厕打造智慧城市新标杆

公共厕所作为城市基础设施的重要组成部分,直接关系到市民的生活品质和城市形象。传统的公厕管理方式存在着许多问题,如环境脏乱、清洁不及时等,给市民带来了诸多不便和不满。而智慧公厕作为一种全新的管理模式,通过物联网、大数据…

进程间通信 管道

前言 ubuntu系统的默认用户名不为root的解决方案(但是不建议):轻量应用服务器 常见问题-文档中心-腾讯云 (tencent.com) 进程间通信的基本概念 进程间通信目的:进程间也是需要协同的,比如数据传输、资源共享、通知事件…

NLP(12)--语言模型

前言 仅记录学习过程,有问题欢迎讨论 应用-语音识别: 声音的本质是一种波,将波按时间段切分为很多帧,之后进行声学特征提取,每一帧转化为向量。 应用-输入法: 按照语言模型给出概率最高的候选词 语言…

2024年化学材料、清洁能源与生物技术国际学术会议(ICCMCEB2024)

2024年化学材料、清洁能源与生物技术国际学术会议(ICCMCEB2024) 会议简介 2024国际化学材料、清洁能源和生物技术大会(ICCMCEB2024)将在长沙隆重举行。本次会议旨在汇聚来自世界各地的化学材料、清洁能源和生物技术领域的专家学者,共同探…

用C++译密码

为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。字母…

【吃透Java手写】3-SpringBoot-简易版-源码解析

【吃透Java手写】SpringBoot-简易版-源码解析 1 SpringbootDemo2 准备工作2.1 Springboot-my2.1.1 依赖2.1.2 SpringBootApplication2.1.3 SJBSpringApplication2.1.3.1 run方法 2.2 Springboot-user2.2.1 依赖2.2.2 UserController2.2.3 UserApplication 2.3 分析run方法的逻辑…

Vue+OpenLayers7入门到实战:OpenLayers实现鼠标拖拽方式绘制矩形(正方形和长方形)

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上实现鼠标拖拽方式绘制矩形(拖拽方式长方形和正方形)。 OpenLayers本身是可以通过鼠标点击多个点的方式来绘制多边形的,当然也包括长方形和正方形,但是这种多边形绘…

Ollama + Openwebui 本地部署大型模型与交互式可视化聊天

Ollama简介 Ollama是一个创新的平台,它允许用户在本地启动并运行大型语言模型。它提供了一个简单易用的内容生成接口,类似于OpenAI,但无需开发经验即可直接与模型进行交互。Ollama支持热切换模型,为用户提供了灵活性和多样性。 …

港股开启估值修复行情 珠光效果材料龙头大涨25%

进入二季度以来,港股市场持续大涨,仅4月恒生指数就大涨7.4%,5月涨幅继续扩大至12.31%,大幅跑赢全球各主要指数。尤其是随着恒生科技多年以来的估值底部的确认,至此恒生指数、恒生港股通,恒生高股息&#xf…

使用C语言实现杨氏矩阵并找出数字

前言 过了五一假期,咋们经过了一个假期的休息,要继续学习了,不能偷懒哦!! 今天让我们来看看如何在一个杨氏矩阵中找出自己想找到的数字。 首先,我们要了解一下杨氏矩阵到底是什么,如果一个矩阵中…

概念解析 | ROC曲线:评估分类模型

注1:本文系"概念解析"系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:ROC曲线的含义和绘制 概念解析 | ROC曲线:评估分类模型 第一部分:通俗解释 在我们的日常生活中,经常会遇到需要做出判断和选择的情况。比如,当你收到一封邮件时…

深度学习(算法工程师)最火的就业方向

自动驾驶与智能交通 自动驾驶是深度学习技术的一个重要应用领域,其目标是实现车辆的自主导航和驾驶。自动驾驶系统需要借助深度学习技术来识别交通信号、行人、车辆等环境信息,并做出相应的决策。因此,自动驾驶与智能交通领域的就业方向包括…

WPS二次开发系列:一文快速了解WPS SDK功能场景

作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 目录 SDK功能介绍 功能详解: 打开文档…

第十二届蓝桥杯省赛真题 Java B 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: ASC试题 B : 卡片试题 C: 直线试题 D: 货物摆放试题 E: 路径试题 F: 时间显示试题 G: 最少砝码试题 H: 杨辉三角形试题 I: 双向排序试题 J: 括号序列 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,…

echarts指标盘属性概括

echarts指标盘属性概括 代码 有模拟数据可以直接使用const options {animation: true,title: {top: "35%",left: "center",// text: "单元测试覆盖度", // 主标题itemGap: 15,textStyle: {// 主标题样式color: "#666666",fontSize:…

YOLOv5改进 | 独家创新篇 | 利用MobileNetV4的UIB模块二次创新C3(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用MobileNetV4的UIB模块二次创新C3,其中UIB模块来自2024.5月发布的MobileNetV4网络,其是一种高度优化的神经网络架构,专为移动设备设计。它最新的改动总结主要有两点,采用了通用反向瓶…

微同城小程序源码 轻松制作本地生活活动赚钱 带完整的安装代码包以及搭建教程

近年来,本地生活服务市场蓬勃发展,人们对于周边的生活信息、活动资讯等需求日益增长。然而,传统的信息发布方式存在诸多不便,如信息更新不及时、传播范围有限等。微同城小程序源码应运而生。它利用小程序的便捷性和普及性&#xf…

海睿思受邀参加 “走进中节能”研习交流,探索新能源数据治理的创新路径

近日,OceanMind海睿思参加由江苏省企业信息化协会(以下简称“苏信会”)主办的“走进中节能太阳能科技(镇江)有限公司”研习交流活动。 海睿思与苏美达、远东控股、隆基乐叶、固德威、上能电气等40多位来自制造业领域的…