欢迎来到站长天空!

其它服务器

当前位置: 主页 > 服务器 > 其它服务器

docker-compose常见的参数命令详解

时间:2025-12-15 23:30:05|栏目:其它服务器|点击:

目录
  • 1. Docker Compose 产生背景
  • 2. Docker Compose模板文件
    • 1.environment
    • 2.volumes
    • 3.build
    • 4.depends_on
    • 5.env_file
    • 6.networks
    • 7.ports
    • 8.expose
    • 9.restart
  • 3. docker-compose指令
    • 1.up -d(后台启动)
    • 2.down
    • 3.exec
    • 4.ps
    • 5.top
    • 6.logs -f(实时)
  • 总结

    1. Docker Compose 产生背景

    Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。使用Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的多种数据库服务容器;再比如在分布式应用一般包含若干个服务,每个服务一般都会部署多个实例。如果每个服务都要手动启停,那么效率之低、维护量之大可想而知。这时候就需要一个工具能够管理一组相关联的的应用容器,这就是Docker Compose。

    中文文档:https://yeasy.gitbook.io/docker_practice/compose

    2. Docker Compose模板文件

    模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。下面主要列出几个常见&重要的模板指令,其他指令大家可以自行百度。

    默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。

    1.environment

    设置环境变量,主要是用来配置容器中程序所需要配置的一些参数。你可以使用数组或字典两种格式。

    services:
      mysql:
        image: mysql:latest
        ports:
          - 3307:3306
    	environment:	# 使用字典格式,类似于 docker run -e MYSQL_ROOT_PASSWORD=root
    	  MYSQL_ROOT_PASSWORD: root
    

    也可以使用数组格式:

    services:
      mysql:
        image: mysql:latest
        ports:
          - 3307:3306
        environment:	# 使用数组格式
          - MYSQL_ROOT_PASSWORD=root
    

    2.volumes

    数据卷所挂载路径设置,挂载数据卷的默认权限是读写(rw)。

    你可以在主机上挂载绝对路径,或者挂载相对路径,相对路径是相对于当前正在使用的compose配置文件的目录进行扩展。 相对路径应始终以 . 或者 … 开始。

    services:
      mysql:
        image: mysql:latest
        ports:
          - 3307:3306
    	environment:	# 使用字典格式,类似于 docker run -e MYSQL_ROOT_PASSWORD=root
    	  MYSQL_ROOT_PASSWORD: root
        volumes:	
       	  # 挂载绝对路径映射,没有这个路径的话会自动创建
          - /root/docker/composetest/tomcat/app_data:/var/lib/mysql
    
          # 或者使用相对路径映射,也会自动创建
          - ./app_data:/var/lib/mysql
    

    你还可以使用别名的方式挂载容器数据卷(可以跨多个服务并重用挂载卷,当然使挂载绝对路径或相对路径也可以重用挂载卷),但要注意一点,使用别名的方式挂载需要在顶级volumes关键字中声明挂在卷,否则启动会报错。

    services:
      mysql:
        image: mysql:latest
        ports:
          - 3307:3306
        environment:
          MYSQL_ROOT_PASSWORD: root
        volumes:
          - my_app_data:/var/lib/mysql
      web1:
        volumes:	# 重用my_app_data
          - my_app_data:/var/lib/mysql
      web2:
        volumes:	# 重用my_app_data
          - my_app_data:/var/lib/mysql
    
    volumes:
      my_app_data:
    

    3.build

    指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。

    services:
    
      webapp:
        build: ./		# 从当前目录下寻找Dockerfile文件
    

    你也可以使用 context 指令指定 Dockerfile 所在文件夹的路径,使用 dockerfile 指令指定 Dockerfile 文件名,可以使用 args 指令指定构建镜像时往Dockerfile中传入的变量。

    services:
    
      webapp:
        build:
          context: ./dir
          dockerfile: Dockerfile_flask
          args:
            buildno: 1
    

    4.depends_on

    解决容器的依赖、启动先后的问题。以下例子中会先启动 redis db 再启动 web。

    注意:web 服务不会等待 redis、db 完全启动之后才启动。

    services:
      webapp:
        build: .
        depends_on:
          - db
          - redis
    
      redis:
        image: redis:latest
    
      db:
        image: mysql:latest
    

    5.env_file

    从文件中获取环境变量,可以为单独的文件路径或列表。

    services:
      mysql:
        image: mysql:latest
        ports:
          - 3307:3306
    	env_file: .env		# 仅使用单个env文件
    	
    	env_file:		# 通过数组来使用多个env文件
    	  - ./common.env
    	  - ./apps/web.env
    	  - /opt/secrets.env
    

    环境变量文件中每一行必须符合格式,支持 # 开头的注释行。

    # common.env: Set development environment
    MYSQL_ROOT_PASSWORD=root
    

    6.networks

    配置容器连接的网络。

    services:
      webapp:
        networks:
          - flask-net
    
    networks:	# 在顶级networks关键字中需要声明,才会在启动时自动创建该网络,否则报错。
      flask-net:
    

    7.ports

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

    ports:
     2. "80:80" # 绑定容器的80端口到主机的80端口
     3. "9000:8080" # 绑定容器的8080端口到主机的9000端口
     4. "443" # 绑定容器的443端口到主机的任意端口,容器启动时随机分配绑定的主机端口号
    

    8.expose

    暴露端口,但不映射到宿主机,只被连接的服务访问。

    和ports的区别是,expose暴露容器给link到当前容器的容器,不会将端口暴露给主机。

    9.restart

    指定docker容器(服务)总是运行。

    services:
      webapp:
        networks:
          - flask-net
    	restart: always
    

    3. docker-compose指令

    中文文档: https://yeasy.gitbook.io/docker_practice/compose/commands

    1.up -d(后台启动)

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

    docker-compose up -d · # 不写服务名,默认启动docker-compose.yml所有服务
    docker-compose up -d 服务名 # 启动docker-compose.yml的对应服务

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

    2.down

    此命令将会停止 up 命令所启动的容器,并移除网络,但是不会移除已经打好的镜像。

    docker-compose down · # 不写服务名,默认停止docker-compose.yml所有服务
    docker-compose down 服务名 # 停止docker-compose.yml的对应服务

    3.exec

    进入指定的容器。和docker的exec命令一样。

    docker-compose exec 服务名 bash

    4.ps

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

    docker-compose ps # 列出所有运行的服务
    docker-compose ps -q # 只列出容器的ID信息
    选项:
    -q 只打印容器的 ID 信息。

    5.top

    查看所有服务容器内运行的进程,或者查看指定服务名的容器内运行的进程。

    docker-compose top
    docker-compose top 服务名

    6.logs -f(实时)

    查看所有服务容器,或指定服务容器的日志输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过 --no-color 来关闭颜色。该命令在调试问题的时候十分有用。

    docker-compose logs # 输出所有服务容器的日志
    docker-compose logs 服务名 # 输出对应服务的日志
    docker-compose logs -f 服务名 # 实时输出对应服务的日志

    其他命令参考中文文档手册。

    总结

    上一篇:Docker Compose 搭建简单的Python网络应用程序(步骤详解)

    栏    目:其它服务器

    下一篇:Kubernetes教程之Windows HostProcess 运行容器化负载

    本文标题:docker-compose常见的参数命令详解

    本文地址:https://zz.feitang.co/server/31140.html

    广告投放 | 联系我们 | 版权申明

    申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

    如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

    联系QQ:257218569 | 邮箱:257218569@qq.com

    Copyright © 2018-2025 站长天空 版权所有 Powered by EyouCms冀ICP备14023439号