天天看点

docker compose部署应用以及遇到的问题简介概念调用流程常用命令部署及遇到的问题

docker compose部署应用以及遇到的问题

  • 简介
  • 概念
  • 调用流程
  • 常用命令
  • 部署及遇到的问题

简介

通俗地说,Compose 是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。

使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。

Compose 的使用方式非常简单,步骤自上而下:

  1. 定义 Dockerfile
  2. 定义 docker-compose.yml
  3. 运行 docker-compose up

概念

Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)。Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例。

project

通过 docker compose 管理的一个项目被抽象称为一个 project,它是由一组关联的应用容器组成的一个完整的业务单元。简单点说就是一个 docker-compose.yml 文件定义一个 project。我们可以在执行 docker-compose 命令时通过 -p 选项指定 project 的名称,如果不指定,则默认是 docker-compose.yml 文件所在的目录名称。

service

运行一个应用的容器,实际上可以是一个或多个运行相同镜像的容器。

调用流程

如图是docker compose的一次调用流程:

docker compose部署应用以及遇到的问题简介概念调用流程常用命令部署及遇到的问题

右上角的 docker-compose 定义了一组 service 来组成一个 project,通过 docker-compose.yml 中 service 的定义与 container 建立关系(service 与容器的对应关系),最后使用 container 来完成对 docker client的调用,向 docker daemon 发起 http 请求。注意,这里的 project, service 和 container 对应的都是 docker-compose 实现中的数据结构。下面让我们结合上图来介绍 docker-compose 工作的大致流程。

  1. 用户执行的 docker-compose up 命令调用了命令行中的启动方法,功能非常简单。一个 docker-compose.yml 文件定义了一个 project,docker-compose up 提供的命令行参数则作为这个 project 的启动参数交由 project 模块处理。
  2. 如果当前宿主机已经存在与该应用对应的容器,docker-compose 则进行行为逻辑判断。如果用户指定可以重新启动已有服务,docker-compose 就会执行 service 模块的容器重启方法,否则就直接启动已有容器。这两种操作的区别在于前者会停止旧的容器,创建并启动新的容器,并把旧容器移除掉。在这个过程中创建容器的各项自定义参数都是从 docker-compose up 命令和 docker-compose.yml 中传入的。
  3. 启动容器的方法也很简洁,这个方法中完成了一个 docker 容器启动所需的主要参数的封装,并在 container 模块执行启动。
  4. 最后,contaier 模块会调用 docker客户端来执行向docker daemon发起创建容器的 POST 请求。

由此可见 docker-compose 工作的整体流程非常清晰、简洁!

常用命令

ps:列出所有运行容器

docker-compose ps
           

logs:查看服务日志输出

docker-compose logs
           

port:打印绑定的公共端口,下面命令可以输出 eureka 服务 8761 端口所绑定的公共端口

docker-compose port eureka 8761
           

build:构建或者重新构建服务

docker-compose build
           

start:启动指定服务已存在的容器

docker-compose start eureka
           

stop:停止已运行的服务的容器

docker-compose stop eureka
           

rm:删除指定服务的容器

docker-compose rm eureka
           

up:构建、启动容器

docker-compose up
           

kill:通过发送 SIGKILL 信号来停止指定服务的容器

docker-compose kill eureka
           

pull:下载服务镜像

scale:设置指定服务运气容器的个数,以 service=num 形式指定

docker-compose scale user=3 movie=3
           

run:在一个服务上执行一个命令

docker-compose run web bash
           

部署及遇到的问题

我在通过docker compose部署dubbo和zookeeper过程中遇到了问题:dubbo无法连接zookeeper。

继续阅读