docker compose快速开始超详细教程

 更新时间:2022年05月24日 11:56:38   作者:西京刀客  
docker-compose是基于docker的开源项目,托管于github上,由python实现,调用 docker服务的API负责实现对docker容器集群的快速编排,即通过一个单独的yaml文件,来定义一组相关的容器来为一个项目服务,本文给大家介绍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...<HTTP configuration>
                  |      "webapp"      |...ro...<server certificate> #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 compose快速开始的文章就介绍到这了,更多相关docker compose开始内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何在docker容器内部安装kibana分词器

    如何在docker容器内部安装kibana分词器

    这篇文章主要介绍了如何在docker容器内部安装kibana分词器,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Docker Registry搭建私有镜像仓库的实现方法

    Docker Registry搭建私有镜像仓库的实现方法

    这篇文章主要介绍了Docker Registry搭建私有镜像仓库的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • docker搭建dnsmasq服务的实现

    docker搭建dnsmasq服务的实现

    本文将指导读者如何使用Docker搭建DNSmasq服务,通过简单的步骤和详细的说明,帮助读者快速在Docker环境中部署DNSmasq,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • docker挂载NVIDIA显卡运行pytorch的方法

    docker挂载NVIDIA显卡运行pytorch的方法

    这篇文章主要介绍了docker挂载NVIDIA显卡运行pytorch的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • docker搭建minio的问题解决

    docker搭建minio的问题解决

    本文主要介绍了docker搭建minio的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • docker image tag为什么出现none的原因及解决

    docker image tag为什么出现none的原因及解决

    当我们使用docker加载新的镜像时,有时候会发现Repository和Tag名称都为none的情况,这通常是由于没有指定正确的标签名称或者仓库名称所导致的,本文主要介绍了docker image tag为什么出现none的原因及解决,感兴趣的可以了解一下
    2023-10-10
  • docker容器内网络请求缓慢问题解决

    docker容器内网络请求缓慢问题解决

    在使用docker的过程中发现了几个问题,在docker里进行的网络请求经常会失败,这篇文章主要介绍了docker容器内网络请求缓慢问题解决
    2019-01-01
  • 基于Docker的MySQL主从复制环境搭建的实现步骤

    基于Docker的MySQL主从复制环境搭建的实现步骤

    这篇文章主要介绍了基于Docker的MySQL主从复制环境搭建的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Docker+DockerCompose封装web应用的方法步骤

    Docker+DockerCompose封装web应用的方法步骤

    这篇文章会介绍如何将后端、前端和网关通通使用 Docker 容器进行运行,并最终使用 DockerCompose 进行容器编排,感兴趣的可以了解一下
    2021-08-08
  • Docker深度清除镜像缓存overlay2的实现

    Docker深度清除镜像缓存overlay2的实现

    维清理镜像是通过命令 docker rm i 删除镜像的,但是这条命令不会删除docker build命令产生的缓存文件,本文主要介绍了Docker深度清除镜像缓存overlay2的实现,感兴趣的可以了解一下
    2023-12-12

最新评论