docker compose快速开始超详细教程

目录
  • 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...<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开始内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 快速使用docker-compose部署clickhouse的教程

    ClickHouse 是一个开源的面向列的 DBMS(由 Yandex 开发).ClickHouse 的工作速度比传统方法快 100-1000 倍.它适用于大数据.业务分析和时间序列数据.ClickHouse 是第一个与 Sybase IQ.Vertica 和 Snowflake 等专有数据库的性能.成熟度和可扩展性相匹配的开源 SQL 数据仓库. 在这个小教程中,我将向您展示如何以最少的设置安装 ClickHouse. 对于本教程,我们需要安装 Docker 和 docker-compose.

  • Docker Compose快速部署多容器服务实战的实例详解

    目录 1 什么是Docker Compose 2 安装Docker Compose 3 Docker Compose文件格式的简单介绍 4 Docker Compose常用命令 5 使用Docker Compose一键部署Spring Boot+Redis实战 5.1 构建应用 5.1.1 Spring Boot项目 5.1.2 Redis配置文件 5.2 打包应用并构建目录 5.2.1 打包Spring Boot项目 5.2.2 上传redis.conf配置文件 5.3 编写Dockerfil

  • 使用Docker Compose部快速署ELK(亲测有效)

    目录 1.概述 1.1定义 1.2功能说明 2.部署ELK 2.1创建目录和文件 2.2配置docker-compose并启动 2.3打开kibana 3.收集日志 3.1环境准备 3.2使用logback记录日志 3.3使用log4j2记录日志 1.概述 1.1定义 对于大规模的日志,需要集中化的管理.而ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用.ELK是三种技术产品的简称,包括Elasticsearch.Logstash.Kibana

  • docker-compose快速搭建docker私有仓库的步骤

    创建docker-compose.yml并填入如下内容 version: '3' services: registry: restart: always image: registry:2 ports: - 5000:5000 environment: REGISTRY_HTTP_TLS_CERTIFICATE: /certs/registry.crt REGISTRY_HTTP_TLS_KEY: /certs/registry.key REGISTRY_AUTH: htpasswd REGIS

  • docker-compose教程之安装使用和快速入门

    教程基于ubuntu下最新的compose版本3 参考: https://docs.docker.com/compose/overview/ 1.Compose介绍 Docker Compose是一个用来定义和运行复杂应用的Docker工具.一个使用Docker容器的应用,通常由多个容器组成.使用Docker Compose不再需要使用shell脚本来启动容器. Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-

  • docker compose快速开始超详细教程

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

  • SpringBoot整合mybatis-plus快速入门超详细教程

    目录 前言 mybatis-plus 简介 mybatis-plus 优点 相关链接 mybatis-plus实例 1.示例项目结构 2.数据库准备 3.pom.xml: 4.application.yml 5.User.java 6.UserMapper.java 7.UserServiceImpl.java 8.测试类 mybatis-plus的crud: 1.insert操作: 2.select操作: 3.update操作: 4.delete操作: 总结 前言 mybatis-plus 简

  • 使用Docker+jenkins+python3环境搭建超详细教程

    前言: 自动化写好后需要在服务器上每日定时运行遇到,这样的一个问题,Jenkins容器是在docker中安装的 ,然后从git上拉取代码 发现代码在jenkins容器的目录当中,运行的时候提示没有安装python环境还第三方库. 解决方法有3种: 第一种:启动jenkins容器时 将容器的目录挂载到宿主机目录上去执行(方法不能实现)Pass 第二种:在jenkins上创建本地节点,将代码拉取到本地 然后去运行本地项目(在本机上使用比较方便,但是局限性比较小) 第三种:重新封装jenkins镜像,

  • centos8使用Docker部署Django项目的详细教程

    引言 在本文中将介绍在Docker中通过django + uwsgi + nginx部署方式部署Django项目, 由于记录的是学习过程,使用的都是目前较高的版本. python  版本为3.8.3 django  版本为3.0.6 nginx   版本为1.17.10 好了简单的介绍之后,就进入正题了. 创建一个工作目录 创建一个工作目录用来存放项目,和Dockerfile等文件. mkdir uwsgidocker 简单说明一下各个文件 docker-compose.yml: Docker

  • python UIAutomator2使用超详细教程

    一.环境要求 python 3.6+ android 4.4+ 二.介绍 uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库.其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作. 三.库地址 GitHub地址: https://github.com/openatx/uiautomator2 https://github.com/openatx/uiau

  • k3d入门指南之在Docker中运行K3s的详细教程

    什么是k3d? k3d是一个小型程序,用于在Docker中运行K3s集群. K3s是经过CNCF认证的轻量级Kubernetes发行和沙箱项目.它是为资源有限环境设计的,被打包为单个二进制文件,所需RAM小于512MB. 要了解有关K3s的更多信息,请查看我们之前的公众号文章及B站上的视频. k3d借助从K3s仓库构建的Docker镜像在安装了Docker的任何机器上的Docker容器中启动多个K3s节点. 这样,一台物理(或虚拟)机(称为Docker Host)可以运行多个K3s集群,每个集群

  • SQLyog下载、安装超详细教程(亲测永久有效)

    SQLyog 是一个易于使用的.快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库. 功能: 1.快速备份和恢复数据: 2.以GRID / TEXT 格式显示结果: 3.支持客户端挑选.过滤数据: 4.批量执行很大的SQL脚本文件: 5.快速执行多重查询并能够返回每页超过1000条的记录集,而这种操作是直接生成在内存中的: 6.程序本身非常短小精悍!压缩后只有348 KB : 7.完全使用MySQL C APIs程序接口: 8.以直观的表格界面建立或编辑数据表:

  • SecureCRT的使用超详细教程

    目录 下载和安装 简单的介绍 如何使用 一.SecureCRT的使用 二.SecureFX的使用 使用乱码 下载和安装 SecureCRT和SecureFX的下载和安装我这里就不多说了,详细的安装下载教程请参考: SecureCRT的下载.安装( 过程非常详细!!值得查看) 简单的介绍 SecureCRT 是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件,优点是可以一次创建多个 Tab Page,连接多台远程主机. Secu

  • 利用Matlab绘制地图的超详细教程

    目录 MappingToolbox工具箱安装 局部区域陆地绘制 映射贴图 纹理贴图 线路图绘制 usamap axesm 一些地图绘制可用简易函数 subplot tightmap 边框标签网格快速开关函数 colormap colorbar worldmap和usamap是axesm的子类,worldmap是用于生成世界地图坐标区域,usamap用于生成美国地图坐标区域,本文先在worldmap函数基础上讲解如何导入各种数据绘制各种类型图片,略提一下如何使用usamap,再讲解axesm的各种

  • Navicat Premium 12.0.29安装与激活超详细教程

    目录 下载安装程序及激活工具 1.安装程序 2.激活程序 Navicat Premium 是一套多连接数据库开发工具,让你在单一应用程序中同时连接多达六种数据库:MySQL.MariaDB.SQL Server.SQLite.Oracle 和 PostgreSQL,可一次快速方便地访问所有数据库. 下载安装程序及激活工具 下载 链接: 注意:因某些限制,下载链接通过如下方式获取: 需要的小伙伴,请关注微信公众号: Java技术迷, 或者扫描下方公众号二维码,回复关键字:211216, 即可免费无

随机推荐