Docekr三剑客之 Docekr compose

简介: Docekr三剑客之 Docekr compose

写在前面

Docker三剑客Docker Compose、Docker Machine、Docker Swarm分别是Docker官方开源的三个项目。有着不同的功能:

  1. Docker Compose负责实现对 Docker 容器集群的快速编排
  2. Docker Machine负责在多种平台上快速安装 Docker 环境
  3. Docker Swarm提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案

今天这篇文章我们来聊聊Docker compose,这部分我们会分为三篇文章来分别介绍。

一、什么是Docker compose

Compose 项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在https://github.com/docker/compose

我们知道使用Dockerfile模板文件可以让用户很方便的定义一个单独的应用容器,其实在工作中,经常会碰到需要多个容器相互配合来完成的某项任务情况,例如工作中的web服务容器本身,往往会在后端加上数据库容器,甚至会有负责均衡器,比如LNMP服务

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

Compose 中有两个重要的概念:

  服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例

  项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml中定义

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

二、安装和卸载

2.1 安装

在 Linux 上的也安装十分简单,从 GitHub Release 处直接下载编译好的二进制文件即可。

例如,在 Linux 64 位系统上直接下载对应的二进制包。

// 先把docker-compose文件dump到当前目录
wget https://github.com/docker/compose/releases/download/v2.12.2/docker-composelinux-x86_64
// 然后拷贝到/usr/bin/
$ sudo cp -arf docker-compose-linux-x86_64 /usr/bin/docker-compose
$ sudo chmod +x /usr/bin/docker-compose
2.1 卸载

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

sudo rm /usr/bin/docker-compose

三、常用命令

命令官方详细文档戳这里

3.1 命令对象及格式

对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如

果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。

执行 docker-compose [COMMAND] --help 或者 docker-compose help [COMMAND] 可以查看具体某个

命令的使用格式。

docker-compose 命令的基本的使用格式是

docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
3.2 常用选项
  1. -f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml ,可以多次指定
  2. -p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
3.3 使用说明
3.3.1 build

构建或重新构建项目中service的镜像。构建之后镜像不会被应用到容器,必须将项目down之后,再重

新up方能使用最新镜像。构建的镜像会被加上项目名称的前缀

选项包括:

–force-rm 删除构建过程中的临时容器。

–no-cache 构建镜像过程中不使用 cache(这将加长构建过程)。

–pull 始终尝试通过 pull 来获取更新版本的镜像。

–build-arg 设置构建参数

3.3.2 config

验证 Compose 文件格式是否正确,若正确则显示配置,若格式错误显示错误原因。

3.3.3 up&down

up命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容

器的一系列操作。

链接的服务都将会被自动启动,除非已经处于运行状态。

可以说,大部分时候都可以直接通过该命令来启动一个项目。

默认情况, docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可

以很方便进行调试。

当通过 Ctrl-C 停止命令时,所有容器将会停止。

如果使用 docker-compose up -d ,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选

项。

默认情况,如果服务容器已经存在, docker-compose up 将会尝试停止容器,然后重新创建(保持使

用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容。如

果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate 。这样将只会启动

处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用 dockercompose up --no-deps -d  来重新创建服务并后台停止旧服务,启动新服务,并不会

影响到其所依赖的服务。

选项:

-d 在后台运行服务容器。

–no-color 不使用颜色来区分不同的服务的控制台输出。

–no-deps 不启动服务所链接的容器。

–force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用。

–no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。

–no-build 不自动构建缺失的服务镜像。

-t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。

down命令将会停止 up 命令所启动的容器,并移除网络

3.3.4 exec

进入指定的容器。

3.3.5 help

获得一个命令的帮助。

3.3.6 images

列出 Compose 文件中包含的镜像。

3.3.7 logs

格式为 docker-compose logs [options] [SERVICE…] 。

查看服务容器的输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。

可以通过 --no-color 来关闭颜色。

该命令在调试问题的时候十分有用。

3.3.8 pause&unpause

暂停一个服务容器。

恢复处于暂停状态中的服务。

3.3.9 port

打印某个容器端口所映射的公共端口。

选项:

–protocol=proto 指定端口协议,tcp(默认值)或者 udp。

–index=index 如果同一服务存在多个容器,指定命令对象容器的序号(默认为 1)。

3.3.10 ps

格式为 docker-compose ps [options] [SERVICE…] 。

列出项目中目前的所有容器。

选项:

-q 只打印容器的 ID 信息。

3.3.11 pull&push

pull 格式为 docker-compose pull [options] [SERVICE…] 。

拉取服务依赖的镜像。

选项:

–ignore-pull-failures 忽略拉取镜像过程中的错误。

push 推送服务依赖的镜像到 Docker 镜像仓库。

3.3.12 run

格式为 docker-compose run [options] [-p PORT…] [-e KEY=VAL…] SERVICE [COMMAND]

[ARGS…] 。

在指定服务上执行一个命令。类似docker run指令

将会基于指定的service的镜像启动一个新的容器,并且运行指定命令

默认情况下,如果存在关联,则所有关联的服务将会自动被启动,除非这些服务已经在运行中。

该命令类似启动容器后运行指定的命令,相关卷、链接等等都将会按照配置自动创建。

两个不同点:

给定命令将会覆盖原有的自动运行命令;

不会自动创建端口,以避免冲突。

如果不希望自动启动关联的容器,可以使用 --no-deps 选项,例如

将不会启动 web 容器所关联的其它容器。

选项:

-d 后台运行容器。

–name NAME 为容器指定一个名字。

$ docker-compose run redis pwd

//该操作为伪操作

docker-compose run --no-deps web pwd

–entrypoint CMD 覆盖默认的容器启动指令。

-e KEY=VAL 设置环境变量值,可多次使用选项来设置多个环境变量。

-u, --user=“” 指定运行容器的用户名或者 uid。

–no-deps 不自动启动关联的服务容器。

–rm 运行命令后自动删除容器, d 模式下将忽略。

-p, --publish=[] 映射容器端口到本地主机。

–service-ports 配置服务端口并映射到本地主机。

-T 不分配伪 tty,意味着依赖 tty 的指令将无法运行。

3.3.13 start&stop

start 启动已经存在的服务。

stop 停止已经处于运行状态的服务,但不删除它。通过 docker-compose start 可以再次启动这些服务。

选项:

-t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。

3.3.14 restart

重启项目中的服务。

选项:

-t, --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)

3.3.15 rm

删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。

选项:

-f, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。

-v 删除容器所挂载的数据卷。

3.3.16 top

查看各个服务内运行的进程。

3.3.17 version

打印版本信息。

四、yml 配置指令参考(以下内容只作为参考)

官方文档:https://docs.docker.com/compose/compose-file/

version

Compose 文件格式有3个版本,分别为1, 2.x 和 3.x 目前主流的为 3.x 其支持 docker 1.13.0 及其以上的

版本

build

指定镜像构建参数,其作用与docker build 命令一样

例如:

build: ./dir
build:
context: .
dockerfile: Dockerfile-compose
args:
- http_proxy: https://proxy.golang.com.cn,https://goproxy.cn,direct
labels:
- "myhello:1.0"
- "com.example.description=Accounting webapp"
tags:
- "myhello:1.0.0"
- "localhost:5000/myhello:1.0.0"
  1. context:上下文路径
  2. dockerfile:指定构建镜像的 Dockerfile 文件名
  3. args:添加构建参数,这是只能在构建过程中访问的环境变量。
  4. labels:设置构建镜像的标签。
  5. target:多层构建,可以指定构建哪一层。
  6. tags:指定镜像的tags


推荐一个零声学院免费教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:

相关文章
|
测试技术 API C++
[译] Compose之解密ViewCompositionStrategy
[译] Compose之解密ViewCompositionStrategy
237 0
|
2月前
|
存储 Kubernetes 持续交付
Docker Compose
【10月更文挑战第3天】
63 6
|
2月前
|
存储 Kubernetes 调度
掌握 Docker Compose
【10月更文挑战第6天】
33 1
|
7月前
|
负载均衡 应用服务中间件 API
Docker-compose 简单介绍
Docker-compose 简单介绍
|
7月前
|
Shell 应用服务中间件 nginx
6.Docker Compose
6.Docker Compose
|
应用服务中间件 Docker 容器
|
XML 负载均衡 API
Docker Compose(一)
Docker Compose
161 0
|
7月前
|
小程序 API 容器
100 行写一个 Compose 版华容道
100 行写一个 Compose 版华容道
176 0
100 行写一个 Compose 版华容道
|
7月前
|
NoSQL Linux Redis
Docker-Compose
Docker-Compose
218 0
|
7月前
|
应用服务中间件 nginx Docker
docker-compose
docker-compose
126 0