docker-compose

2023-05-16,,

Docker-Compose简介

  • Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排, 并且提供了 scale (服务扩容) 的功能。

  • Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。

  • Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

  • 使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

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

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

假如,你有一个java镜像,一个mysql镜像,一个nginx镜像。如果没有docker-compose,那么每次启动的时候,你需要敲各个容器的启动参数,环境变量,容器命名,指定不同容器的链接参数等等一系列的操作,相当繁琐。而用了docker-composer之后,你就可以把这些命令一次性写在docker-composer.yml文件中,以后每次启动这一整个环境(含3个容器)的时候,你只要敲一个docker-composer up命令就ok了。

先简单理解 docker 的使用过程,它分为镜像构建与容器启动。

  1. 镜像构建:即创建一个镜像,它包含安装运行所需的环境、程序代码等。这个创建过程就是使用 dockerfile 来完成的。

  2. 容器启动:容器最终运行起来是通过拉取构建好的镜像,通过一系列运行指令(如端口映射、外部数据挂载、环境变量等)来启动服务的。针对单个容器,这可以通过 docker run 来运行。

而如果涉及多个容器的运行(如服务编排)就可以通过docker-compose来实现,它可以轻松的将多个容器作为 service 来运行(当然也可仅运行其中的某个),并且提供了 scale (服务扩容) 的功能。

简单总结:

dockerfile: 构建镜像;

docker run: 启动容器;

docker-compose: 启动服务;

安装

推荐官方安装

curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

[root@rancher ~]# docker-compose -v

docker-compose version 1.24.1, build 4667896b

卸载

如果是二进制包方式安装的,删除二进制文件即可:

sudo rm /usr/local/bin/docker-compose


如果通过Python pip工具安装的,则执行如下命令删除:

sudo pip uninstall docker-compose


常用命令

-f,–file FILE指定Compose模板文件,默认为docker-compose.yml,可以多次指定。

-p, 指定docker-compose的项目目录,也就是docker-compose.yml文件的存储目录

-v,–version打印版本并退出

docker-compose ps      显示所有容器

docker-compose up -d nginx   构建并在后台启动nginx容器,不加nginx,启动所有服务,下面的等同。

docker-compose run    允许为你的应用程序运行一次性命令

docker-compose start nginx   启动nginx容器

docker-compose restart nginx   重启nginx容器 (注意是编排文件中的service)

docker-compose stop  nginx  停止nginx容器

docker-compose pause nginx    暂停nginx容器

docker-compose unpause nginx    恢复nginx容器

docker-compose kill nginx    强制停止nginx容器

docker-compose rm nginx    删除nginx容器(删除前必须关闭容器)

docker-compose exec nginx bash            登录到nginx容器中

docker-compose down -v   停止并删除容器、网络、映像和卷,-v(--volumes)删除容器的数据卷

docker-compose logs -f  --tail 50 nginx    查看nginx的实时日志,只看最后50行。

docker-compose events --json nginx      以json的形式输出nginx的docker日志

docker-compose config  -q    验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。

docker-compose build nginx        构建镜像

docker-compose build --no-cache nginx   不带缓存的构建。

docker-compose scale     设置服务的容器数量

docker-compose pull     拉取服务镜像

docker-compose push    推送服务镜像

《docker-compose.doc》

下载本文的Word格式文档,以方便收藏与打印。