Docker编排工具---Compose的概述及使用

目录

一、Compose工具的概述

二、Compose的常用命令

1、列出容器

2、查看访问日志

3、输出绑定的公共端口

4、重新构建服务

5、启动服务

6、停止服务

7、删除已停止服务的容器

8、创建和启动容器

9、在运行的容器中执行命令

10、指定一个服务启动容器的个数

11、其他管理命令

三、docker-compose.yml文件

1、image标签

2、build标签

3、command标签

4、dns标签

5、environment标签

6、env_file标签

7、expose标签

8、port标签

9、network_mode标签

10、depends_on标签

11、links标签

12、volumes标签

13、volumes_from标签

14、logs标签


一、Compose工具的概述

Compose是Docker 官方的开源项目,定位是"定义和运行多个Docker 容器应用的工具",其前身是Fig,负责实现对Docker容器集群的快速编排。Compose 通过YMAL配置文件来创建和运行所有服务。

在Docker中构建自定义镜像是通过使用Dockerfile 模板文件来实现的,从而使用户方便地定义一个单独的应用容器。而Compose使用的模板文件是一个YAML格式文件,它允许用户通过一个docker-compose.yml 模板文件来定义一-组相关联的应用容器为一个项目。

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

Compose有以下两个重要概念。

(1)服务(Service): 一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。每个服务都有自己的名称、使用的镜像、挂载的数据卷、所属的网络、依赖的服务等。

(2)项目( Project):由一组关联的应用容器组成的一-个完整业务单元,在docker-compose.yml中定义,即Compose的一个配置文件可以解析为一个项目,Compose 通过分析指定配置文件,得出配置文件所需完成的所有容器管理与部署操作。

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

二、Compose的常用命令

Compose的常用命令常跟在docker-compose主命令后面。

1、列出容器

ps命令用于列出所有运行的容器。

其常用选项说明如下。

-q:只显示ID

例如,列出所有运行容器。

复制代码
docker-compose ps

2、查看访问日志

logs命令用于查看服务日志输出。

其常用选项说明如下。

(1) -f,--follow:实时输出日志。

(2) -t,--timestamps:显示时间戳。

(3) --tail="all":从日志末尾显示行。

例如,查看nginx的实时日志。

复制代码
docker-compose logs -f nginx

3、输出绑定的公共端口

port命令用于输出绑定的公共端口。

其常用选项说明如下。

(1) --protocol=proto: TCP或UDP, 默认为TCP。

(2) --index=index: 多个容器时的索引数字,默认为1。

例如,输出eureka 服务8761 端口所绑定的公共端口。

复制代码
docker-compose port eureka 8761

4、重新构建服务

build命令用于构建或重新构建服务。

其常用选项说明如下。

(1) --no-cache: 不使用缓存构建镜像。

(2) --build-arg key=val:设置构建时变量。

例如,构建镜像。

复制代码
docker-compose build

5、启动服务

start命令用于自动指定服务已存在的容器。

例如,启动nginx容器。

复制代码
docker-compose start nginx

6、停止服务

stop命令用于停止已运行服务的容器。

例如,停止nginx容器。

复制代码
docker-compose stop nginx

7、删除已停止服务的容器

rm命令用于删除指定服务的容器。
其常用选项说明如下。

(1) -f,--force: 强制删除。

(2) -s,--stop: 删除容器时需要先停止容器。

(3)-V,删除与容器相关的任何匿名卷。

例如,删除已停止的nginx容器。

复制代码
docker-compose rm nginx

8、创建和启动容器

up命令用于创建和启动容器。

其常用选项说明如下。

( 1)-d:在后台运行容器。

(2) -t:指定超时时间。

(3) -no-deps:不启动连接服务。

( 4) --no-recreate:如果容器存在,则不重建容器。

(5) --no-build:不构建镜像,即使其会丢失。

(6) --build:启动容器并构建镜像。

(7) --scale SERVICE=NUM:指定-个服务(容器)的启动数量。

例如,创建并启动nginx容器。

复制代码
docker-compose up -d nginx

9、在运行的容器中执行命令

exec命令用于在支持的容器中执行命令。

其常用选项说明如下。

(1) -d:在后台运行命令。

(2) --privileged:给这个进程赋予特殊权限。

(3) -u,--user USER:作为该用户运行该命令。

(4) -T:禁用分配伪终端,默认分配一个终端。

(5) --index=index:多个容器时的索引数字,默认1。

例如,登录到nginx容器中。

复制代码
docker-compose exec nginx bash

10、指定一个服务启动容器的个数

scale命令用于指定服务启动容器的个数。

例如,设置指定服务运行容器的个数,以service=num的形式指定。

复制代码
docker-composo scale user=3 movie=3

11、其他管理命令

(1) restart命令用于重启服务。

(2) kill命令通过发送SIGKILL信号来停止指定服务的容器。

(3) pause命令用于挂起容器。

(4) image命令用于列出本地Docker的镜像。

(5) down命令用于停止容器和删除容器、网络、数据卷及镜像。

(6) create命令用于创建一个服务。

(7) pull命令用于下载镜像。

(8) push命令用于推送镜像。

(9) help命令用于查看帮助信息。

三、docker-compose.yml文件

docker-compose.yml文件包含version、services、 networks 三部分,其中,services 和networks是关键部分。常见的services书写规则如下。

1、image标签

image标签用于指定基础镜像。

复制代码
services:
    web:
        image:nginx (image:"nginx:latest")

在services标签下的web为第二级标签,标签名可由用户自定义,它也是服务名称。

image可以指定服务的镜像名称或镜像ID,如果镜像在本地不存在,则Compose会尝试获取这个镜像。

2、build标签

build标签用于指定Dockerfile所在文件夹的路径。该值可以是一个路径, 也可以是一个对象。Compose 会利用它自动构建镜像,并使用构建的镜像启动容器。

复制代码
build: /path/to/build/dir

也可以使用相对路径,即

复制代码
build: ./dir

还可以设置上下文根目录,并以该目录指定Dockerfile。

复制代码
build:

    context: ../

    dockerfile: path/of/Dockerfile

3、command标签

command标签用于覆盖容器启动后默认执行的命令。

复制代码
command: bundle exec thin -P 3000

也可以写为类似Dockerfile中的格式,例如:

复制代码
comand: [bundle, exec, thin, -P, 3000]

4、dns标签

dns标签用于配置DNS服务器,其可以是一个具体值。

复制代码
dns: 114.114.114.114

也可以是一个列表。

复制代码
dns:
    - 114.114.114.114
    - 115.115.115.115

还可以配置DNS搜索域,其可以是一个值或列表。

复制代码
dns_ search: example.com
dns_ search:
    - dc1.example.com
    - dc2.example.com

5、environment标签

environment标签用于设置镜像变量。与arg标签不同的是,arg 标签设置的变量仅用于构建过程中,而environment标签设置的变量会一直保存在镜像和容器中。

复制代码
environment:
    RACK_ ENV: development
    SHOW: 'true'
    SESSION_SECRET:

或者:

复制代码
environment:
    - RACK_ ENV=development
    - SHOW=true
    - SESSION_SECRET

6、env_file标签

env_file标签用于设置从env文件中获取的环境变量。可以指定一个文件路径或路径表,其优先级低于environment指定的环境变量,即当其设置的变量名称与environment标签设置的变量名称冲突时,以environment标签设置的变量名称为主。

复制代码
env_file: .env

可以根据docker.compose.yml设置路径列表。

复制代码
env_file:
    - ./common.env
    - ./apps/web.env
    - /opt/secrets.env

7、expose标签

expose标签用于设置暴露端口,只将端口暴露给连接的服务,不暴露给主机。

复制代码
expose:
    - "8000"
    - "8010"

8、port标签

port标签用于对外暴露端口定义,使用host:container格式,或者只指定容器的嘴口号,宿主机会随机映射端口。

复制代码
ports:
    - "3000"
    - "8763:8763"
    - "宿主机端口:容器端口"

注意:当使用host:container格式来映射端口时,如果使用的容器端口号小于60,则可能会得到错误的结果,因为YAML会将<xx:yy>格式的数字解析为60进制,所以建议使用字符串格式。

9、network_mode标签

network_mode标签用于设置网络模式。

复制代码
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

10、depends_on标签

depends_on标签用于指定容器服务的启动顺序。

复制代码
version: '2'
services: 
    web:
        build: .
        depends_on:
            - db
            - redis
        redis:
            image: redis
        db:
            image: postgres

这里,容器会先启动Redis和DB两个服务,再启动Web服务。

11、links标签

links标签用于指定容器连接到当前连接,可以设置别名。

复制代码
links:
    - db
    - db:database
    - redis

12、volumes标签

volumes标签用于指定卷挂载路径,可以挂载一个日录或者一个已存在的数据卷容器。可以直接使用"host:container"格式,或者使用"host:container:ro" 格式,对于容器来说,后者的数据卷是只读的,这样可以有效保护宿主机的文件系统。

复制代码
volumes:
    //只是指定一个路径,Docker会自动创建个数据卷 (该路径是容器内部的)
    - /var/1ib/mysq1
    
    //使用绝对路径挂载数据卷
    - /opt/data:/var/lib/mysq1
    
    //以Compose配置文件为中心的相对路径作为数据卷挂载到容器
    - ./cache:/tmp/cache
    
    //使用用户的相对路径( ~/ 表示的目录是/home/<用户目录>/ 或者 /root/)
    - ~/configs:/etc/configs/:ro

    //已经存在的命名的数据卷
    - datavolume:/var/1ib/mysq1

如果不使用宿主机的路径,则可以指定一个volume_driver。

复制代码
volume_ driver: mydriver

13、volumes_from标签

volumes_from标签用于设置从其他容器或服务挂在数据卷,可选的参数是:ro或者:rw,前者表示容器只读,后者表示容器对数据卷是可读可写的。默认情况下是可读可写的。

复制代码
volumes_ from:
    - service_ name
    - service_ name:ro
    - container:container_name
    - container:container_name:rw

14、logs标签

logs标签用于设置日志输出信息。

复制代码
logging :
    driver: syslog
    options:
    syslog-address: "tcp://192.168.0.42:123"
相关推荐
冼紫菜14 分钟前
Spring 项目无法连接 MySQL:Nacos 配置误区排查与解决
java·spring boot·后端·mysql·docker·springcloud
AllData公司负责人26 分钟前
【能力比对】K8S数据平台VS数据平台
云原生·容器·kubernetes
识途老码1 小时前
k8s部署OpenELB
云原生·容器·kubernetes·eip
christine-rr1 小时前
【25软考网工】第五章(8)路由协议RIP、OSPF
运维·网络·网络工程师·软考·考试
漫谈网络1 小时前
SSHv2 密钥交换(Key Exchange)详解
运维·ssh·自动化运维·devops·paramiko·sshv2
努力努力再努力wz1 小时前
【c++深入系列】:万字详解vector(附模拟实现的vector源码)
运维·开发语言·c++·c
江畔柳前堤2 小时前
信息论12:从信息增益到信息增益比——决策树中的惩罚机制与应用
运维·深度学习·算法·决策树·机器学习·计算机视觉·docker
sunshine_sean2 小时前
docker 部署kafka命令
docker·容器·kafka
Super_man541882 小时前
k8s之ingress解释以及k8s创建业务的流程定义
云原生·容器·kubernetes
Chat_zhanggong3453 小时前
AI训练服务器概述
运维·服务器·人工智能