目录2.使用Compose步骤和思路二、docker-compose常用命令三、dockercompose安装四、docker-compose.yml基础五、工作常用方法

dockercompose快速开始一、什么是dockercompose

官方:

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

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

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

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

这儿涉及2个重要的概念:

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

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

1.Compose特点在单独的主机上提供多个互相隔离的环境

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

每位项目有自己的Dockernetwork,不同项目的Dockernetwork彼此不通。

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

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

Compose在启动容器时,会手动保存volume。当我们用docker-composedown删除容器后,再用docker-composeup启动时,之前volume会手动挂载到新建的容器中。

只重建有改动的容器

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

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

可以使用变量

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

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

2.使用Compose步骤和思路

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

二、docker-compose常用命令

docker-compose#拉取镜像

docker compose 教程_教程视频_教程之家

docker-composeup-dnginx#运行nginx容器

docker-composeup-d#运行所有容器

docker-composeps#查看容器运行状态

docker-composedown#停止容器和容器网路

docker-composermnginx#删掉nginx容器

docker-composerunyaandroidml中定义的服务名命令#在指定服务上运行一个命令

默认编程酒店情况下,docker-composeup启动的容器都在前台,控制台将会同时复印所有容器的输出信息,可以很便捷进行调试。当通过Ctrl+c停止命令时,所有容器将会停止。

假如希望在后台启动并运行所有的容器,使用docke编程r-composeup-d。

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

三、dockercompose安装

只有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:

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

一个service代表一个container,这个container可以从dockerhub的image来创建,或则从本地的Dockerfilebuild下来的image来创建。

service的启动类似dockerrun,我们可以给其指定network和volme,所以可以给service指定network和volume的引用

官方示例:

(External user) --> 443 [frontend network]
                            |
                  +--------------------+
                  |  frontend service  |...ro...
                  |      "webapp"      |...ro... #secured
                  +--------------------+
                            |

教程视频_教程之家_docker compose 教程

[backend network] | +--------------------+ | backend service | r+w ___________________ | "database" |=======( persistent volume ) +--------------------+ _________________/

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

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:

教程之家_docker compose 教程_教程视频

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: {}

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

五、工作常用方法docker-compose或dockerrun启动容器后就退出

问题背景:

启动容器:docker-composeup-d

查看容器运行情况:docker-composeps

结果容器并没有运行linux压缩命令,运行docker-composeps-a命令发觉,容android器在启动后短时间内又停止了

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

问题剖析:

Docker容器后台运行,就必须有一个前台进程.容器运行的命令假如不是这些仍然挂起的命令(例如运行top,tail),就是会手动退出的。

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

DockerCompose解决方案:

方案一:自己启动一个前台进程tail-Fanything

教程之家_docker compose 教程_教程视频

DockerCompose保持容器运行

要使容器在启动时保持运行docker-compose,请使用以下命令

command:tail-Fanything

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

容器解决方案:

tail-Fanything或

dockerrun加上这个开机重启参数:–restartalways-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的作用是为容器分配一个伪终端,就相当于dockerun-t,我的理解是这样就是把/bin/bash当作前台进程

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

我们目前的docker-compose中的service容器中各自只有一个,通过scale可以去扩充service。

教程之家_docker compose 教程_教程视频

比如将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参数官方说明:

实战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

到此这篇关于dockercompose快速开始的文章就介绍到这了,更多相关dockercompose开始内容请搜索我们曾经的文章或继续浏览下边的相关文章希望你们之后多多支持我们!

本文标题:dockercompose快速开始超详尽教程

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复