欢迎来到站长天空!

其它服务器

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

docker compose快速开始超详细教程

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

目录
  • docker compose快速开始
  • 一、什么是docker compose
    • 1. Compose 特性
      • 在单独的主机上提供多个相互隔离的环境
      • 在创建容器时,自动保存 volume 数据
      • 只重建有改动的容器
      • 可以使用变量
    • 2. 使用 Compose 步骤和思路
    • 二、docker-compose常用命令
      • 三、docker compose 安装
        • 四、docker-compose.yml 基础
          • 五、工作常用技巧
            • docker-compose或docker run 启动容器后就退出
              • docker-compose一个应用启动多个节点
                • 使用Docker-Compose,如何执行多个命令

                docker compose快速开始

                一、什么是docker compose

                官方:https://docs.docker.com/compose/

                docker-compose是基于docker的开源项目,托管于github上,由python实现,调用 docker服务的API负责实现对docker容器集群的快速编排,即通过一个单独的yaml文件,来定义一组相关的容器来为一个项目服务。

                Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。

                快速编排:站在项目角度将一组相关联容器整合在一起,对这组容器按照指定顺序进行启动。

                Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。
                这里涉及2个重要的概念:

                • 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
                • 项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。

                Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

                Compose 项目由 Python编写,实现上调用了Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持 Docker APl,就可以在其上利用Compose来进行编排管理。

                1. Compose 特性

                在单独的主机上提供多个相互隔离的环境

                Compose 用项目名称来隔离不同的环境,在没有设置项目名称的情况下,Compose 会用 docker-compose.yml 文件所在根目录名称做为项目名称。

                每个项目有自己的 Docker network,不同项目的 Docker network 彼此不通。

                在单个主机上建立多个隔离环境,Compose 使用项目名称将环境彼此隔离。您可以在多个不同的上下文中使用此项目名称。默认项目名称是项目目录的基本名称。您可以使用-p 命令行选项或 COMPOSE_PROJECT_NAME 环境变量设置自定义项目名称 。默认项目目录是 Compose 文件的基本目录。可以使用–project-directory 命令行选项自定义项目目录。

                在创建容器时,自动保存 volume 数据

                Compose 在启动容器时,会自动保存 volume。当我们用 docker-compose down 删掉容器后,再用 docker-compose up 启动时,之前 volume 会自动挂载到新建的容器中。

                只重建有改动的容器

                当 docker-compose.yml 中的某个容器有改动时,用 Compose 重启项目,改动的容器会重新生成,没有改动的容器则保持不变。

                仅重新创建已更改的容器,当您重新启动未更改的服务时,Compose 会使用现有容器。

                可以使用变量

                变量在环境之间组合重复使用.

                Compose 支持在 docker-compose.yml 中使用变量,可以通过设置变量来配合不同的使用环境。

                2. 使用 Compose 步骤和思路

                • 使用 Dockerfile 定义您的应用程序的环境
                • 使用 docker-compose.yml 定义组成您的应用程序的服务
                • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
                • 运行docker compose up启动并运行程序
                • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

                Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。

                二、docker-compose常用命令

                docker-compose # 拉取镜像
                docker-compose up -d nginx # 运行nginx容器
                docker-compose up -d # 运行所有容器
                docker-compose ps # 查看容器运行状态
                docker-compose down # 停止容器和容器网络
                docker-compose rm nginx # 删除nginx容器
                docker-compose run yaml中定义的服务名 命令 #在指定服务上运行一个命令

                默认情况下,docker-compose up启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。当通过Ctrl+c停止命令时,所有容器将会停止。
                如果希望在后台启动并运行所有的容器,使用docker-compose up -d

                总结: 批量启动时, docker-compose up -d 比较常用!

                三、docker compose 安装

                只有 Linux 平台上在安装docker时没有安装docker-compose,windows、macos平台安装docker时会自动安装docker-compose。

                apt install python3-pip
                sudo pip install -U docker-compose

                四、docker-compose.yml 基础

                【推荐】详解docker-compose.yml文件常用模版命令
                参考URL:https://www.jb51.net/article/229685.htm

                Docker Compose配置文件docker-compose.yml是Docker Compose的核心,用于定义服务、网络和数据卷。格式为YAML,默认路径为./docker-compose.yml,可以使用.yml或.yaml扩展名,目前Compose配置文件格式的最新版本为V3。Compose配置文件中涉及的配置项也比较多,但大部分配置项的含义跟docker run命令相关选项是类似的。

                • services

                一个service代表一个container,这个container可以从dockerhub的image来创建,或者从本地的Dockerfile build出来的image来创建。
                service的启动类似docker run,我们可以给其指定network和volme,所以可以给service指定network和volume的引用

                • networks
                • volumes

                官方示例:https://docs.docker.com/compose/compose-file/

                (External user) --> 443 [frontend network]
                                            |
                                  +--------------------+
                                  |  frontend service  |...ro...
                                  |      "webapp"      |...ro... #secured
                                  +--------------------+
                                            |
                                        [backend network]
                                            |
                                  +--------------------+
                                  |  backend service   |  r+w   ___________________
                                  |     "database"     |=======( persistent volume )
                                  +--------------------+        \_________________/

                示例应用程序由以下部分组成:

                • 2 个服务,由 Docker 镜像支持:webapp和database
                • 1 个密钥(HTTPS 证书),注入前端
                • 1个配置(HTTP),注入前端
                • 1 个持久卷,附加到后端
                • 2 个网络
                services:
                  frontend:
                    image: awesome/webapp
                    ports:
                      - "443:8043"
                    networks:
                      - front-tier
                      - back-tier
                    configs:
                      - httpd-config
                    secrets:
                      - server-certificate
                  backend:
                    image: awesome/database
                    volumes:
                      - db-data:/etc/data
                    networks:
                      - back-tier
                volumes:
                  db-data:
                    driver: flocker
                    driver_opts:
                      size: "10GiB"
                configs:
                  httpd-config:
                    external: true
                secrets:
                  server-certificate:
                    external: true
                networks:
                  # The presence of these objects is sufficient to define them
                  front-tier: {}
                  back-tier: {}

                此示例说明了volumesconfigssecrets之间的区别。虽然它们都作为挂载的文件或目录暴露给服务容器,但只有一个卷可以配置为读写访问。secretsconfigs是只读的。volumes配置允许您选择卷驱动程序并传递驱动程序选项以根据实际基础架构调整卷管理。Configs 和 Secrets 依赖于平台服务,并且被声明external为它们不作为应用程序生命周期的一部分进行管理:Compose 实现将使用特定于平台的查找机制来检索运行时值。

                五、工作常用技巧

                docker-compose或docker run 启动容器后就退出

                问题背景:
                启动容器:docker-compose up -d
                查看容器运行情况:docker-compose ps
                结果容器并没有运行,运行 docker-compose ps -a 命令发现,容器在启动后短时间内又停止了

                问题描述总结:docker-compose 启动容器后就退出,查看日志没有报错。

                问题分析:
                Docker容器后台运行,就必须有一个前台进程.容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

                docker 容器的生命周期是同容器中的前台进程相关的,如果容器内没有前台进程,容器就会自动停止。

                Docker Compose解决方案:
                方案一:自己启动一个前台进程tail -F anything
                Docker Compose保持容器运行
                要使容器在启动时保持运行docker-compose,请使用以下命令

                command: tail -F anything

                version: "3.8"
                services:
                  web:
                    image: "centos-test:v5"
                    command: bash -c "/etc/init.d/xxx start && tail -f /var/log/meesage.log"

                容器解决方案:
                tail -F anything 或
                docker run 加上这个开机重启参数:–restart always -d

                方案二:在 docker-compose 中添加 tty: true 关键字

                version: '3'
                services: 
                    web: 
                        container_name: node_web
                        build:
                              context: .
                        volumes: 
                            - ./:/home/node/app
                        ports: 
                            - 8888:8080
                        tty: true

                tty: true 的作用是为容器分配一个伪终端,就相当于 docke run -t, 我的理解是这样就是把 /bin/bash 当做前台进程

                docker-compose一个应用启动多个节点

                我们目前的docker-compose 中的service容器中各自只有一个,通过scale可以去扩展service。
                例如将web服务的数量变为三个:

                docker-compose up --scale web=3 -d

                1.docker-compose.yml配置
                version: “3”
                services:
                web:
                image: nginx:1.19.9-alpine
                restart: always
                ports:

                80-81:80

                2.启动服务

                docker-compose up -d --scale web=2

                3.查看应用状态

                docker-compose ps 

                使用Docker-Compose,如何执行多个命令

                scale参数官方说明: https://docs.docker.com/compose/reference/scale/

                实战demo:

                version: "3.8"
                services:
                  web:
                    image: "centos-test:v1"
                    command: bash -c "/etc/init.d/xxx start && tail -f /var/log/message.log"
                    init: true

                上一篇:docker 安装Oracle-12C的方法详解

                栏    目:其它服务器

                下一篇:Docker容器实战之镜像与容器的工作原理

                本文标题:docker compose快速开始超详细教程

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

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

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

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

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

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