0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Docker Compose的常用命令

马哥Linux运维 来源:CSDN技术社区 2025-04-30 13:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

大家好,今天给大家分享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-composermmysql

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-composekillmysql

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.18001"
-"127.0.0.15000-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--appendonlyyes
 
 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'

链接:https://blog.csdn.net/xiangxi1204/article/details/138617617

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 文件
    +关注

    关注

    1

    文章

    585

    浏览量

    25538
  • 容器
    +关注

    关注

    0

    文章

    518

    浏览量

    22577
  • 命令
    +关注

    关注

    5

    文章

    744

    浏览量

    22999
  • Docker
    +关注

    关注

    0

    文章

    522

    浏览量

    13186

原文标题:开发者必备:Docker Compose 常用命令与属性全指南

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Docker常用命令大全

    Docker----常用命令大全
    发表于 05-30 16:13

    docker常用命令有哪些?

    docker常用命令Docker镜像相关Docker容器相关Docker仓库相关
    发表于 11-06 06:48

    Ubuntu常用命令大全

    Ubuntu常用命令大全,包括常用管理目录,系统命令,硬盘相关,内存相关,查看进程等命令
    发表于 01-06 11:16 0次下载

    vim常用命令

    vim常用命令
    发表于 01-08 15:59 3次下载

    redis常用命令总结

    本文是对redis常用命令总结。
    发表于 02-09 11:25 1735次阅读

    linux常用命令手册

    linux常用命令手册免费下载。
    发表于 06-01 14:59 70次下载

    Memcache系统常用命令讲解

    Memcache系统常用命令讲解(无线电源技术商业计划书)-该文档为Memcache系统常用命令讲解文档,是一份还算不错的参考文档,感兴趣的可以下载看看,,,,,,,,,,,,,,,,
    发表于 09-28 11:27 5次下载
    Memcache系统<b class='flag-5'>常用命令</b>讲解

    linux常用命令大全

    linux常用命令大全,一些常用命令都可以找到
    发表于 03-03 09:20 0次下载

    DOS系统常用命令

    介绍了DOS系统的常用命令
    发表于 03-21 14:59 0次下载

    Linux常用命令

    Linux常用命令
    的头像 发表于 01-12 11:19 1461次阅读

    Linux常用命令手册分享

    linux常用命令合集
    发表于 04-26 11:46 1次下载

    详解kubectl常用命令

    详解kubectl常用命令
    的头像 发表于 11-05 15:39 1648次阅读
    详解kubectl<b class='flag-5'>常用命令</b>

    docker-compose配置文件内容详解以及常用命令介绍

    。 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。 最后,执行 docker-compose up 命令来启动并运行整个应用程序。 二、
    的头像 发表于 12-02 09:29 4857次阅读
    <b class='flag-5'>docker-compose</b>配置文件内容详解以及<b class='flag-5'>常用命令</b>介绍

    Docker常用命令大全

    Docker 是一种开源的应用容器引擎,广泛应用于开发、部署和运行分布式应用。掌握 Docker 常用命令对于开发人员和运维人员来说非常重要。本文将为大家整理常用
    的头像 发表于 04-22 12:47 491次阅读

    SSH常用命令详解

    SSH常用命令详解
    的头像 发表于 06-04 11:30 1131次阅读