头图

Docker Compose File

简介

Docker Compose File 是以 yml 格式来编写的,它是用来描述一个或者多个容器的配置,以及他们之间的关系,每一个容器在 docker compose file 中都称作为 service,你可以使用 docker composer file 来为描述你要创建容器的网络设置、卷轴设置等,

Docker Compose 默认使用 docker-compose.yml 作为配置文件,你也可以在使用 docker compose 命令的时候指定的配置文件。

看看下面的文件:

version: '2.0'

services:
    web:
    image: sample-01
    build: .
    ports:
        - "3000:3000"

该配置文件里包含了一个名叫 “web” 的 service,当然也可以不叫 “web” 而叫其他的名字,比如有些人可能称之为 “node” 或者 “api” 等,但是一般来说如果是前端的项目,我会习惯性地称为 “web”。叫什么名字不重要,它只是在你使用 Docker Compose 命令行的时候,引用这一个或者这堆容器的别名而已。

version 2.0 和 3.0 的区别

大多数人会觉得 docker compose file 的 3.0 版本是 2.0 版本的升级版,因此应该尽量使用 3.0版本。但实际并不是如此,如果你只是在本地使用 docker compose 来开发或者测试,并且不打算在服务器或者 Docker Swarm、基于Docker 企业版的 Kubernetes 集群上使用,你是不必要使用 3.0 版本的 Docker Compse File,因为 3.0 版本更多的是关注于多节点服务和分布式功能。而版本2则是关注于单个节点的流程功能,它其实是具有一些 3.0 版本没有的独特功能。

Docker Compose CLI

简介

Docker Compose CLI 中使用的很多命令跟 docker cli 中使用的类似甚至是一样,因此我们不必花费很多精力去学习即可马上掌握 Docker Compose CLI 中的命令。

版本

这里需要注意的是,Docker Compose CLI 中的版本与 Docker Compose File 中声明的版本不是同一个概念,因为他们是两个不同的东西。Docker Compose CLI 通常是在本地开发中使用,而 Docker Compose File 则是在其他地方来描述容器的配置。这里只需要关心的是当前的 Docker Compose CLI 版本是否能够支持你所在使用的 Docker Compose File 版本即可。

常用的 CLI 命令

  • docker-compose up
  • docker-compose down

docker-compose up

使用这个命令可以根据 Docker Compose File 一键构建出镜像并且运行起来。

  1. 首先构建 Docker Compose File 中配置的镜像,如果该镜像没有在本地拉取过,那么它会自动地从仓库中拉取。
  2. 然后会根据刚刚拉取的镜像创建容器,并且配置好相关的卷轴和网络。
  3. 显式地运行容器,如果使用 -d 参数则会以守护进程地方式在后台运行。
如果使用 --build 参数,则每次执行时都会重新构建镜像。

docker-compose down

使用这个命令可以一键停止、删除容器以及对应的网络。在默认情况下该命令不会自动删除卷轴,除非使用 -v 参数明确声明需要删除卷轴。这是出于数据安全性的考虑,但正是因为这个原因,当我们执行 docker-compose up 命令时,有时候会出现一些跟第一次启动不一样的情况,通常是因为在执行 ocker-compose down 的时候没有添加 -v 参数。

other docker-compose command

正如之前提到的,docker-compose 中的很多命令与 Docker CLI 类似甚至是一样的,如下面要介绍的这些命令:

  • build: 仅仅只是构建或者重新构建一个或多个镜像。如果希望在构建的时候不使用缓存,可以使用 --no-cache 参数。这样它就会全新拉取镜像再构建,而不用手动地去删除镜像。
  • stop: 仅仅只是停止指定容器,并不会删除它。
  • ps: 列出全部由 Docker Compose File 创建的 “services”,不管是运行中还是停止的“service”,相比于 Docker CLI 中的 ps 命令,它会以更简单的方式显示出 “service” 对应有哪些端口,以及显示引起容器停止的误会原因。
  • push: 把所有的 Docker Compose File 推送到仓库。
  • logs: 与 Docker CLI 中 logs 一致。
  • exec: 与 Docker CLI 中 logs 一致。

还有一点需要注意的是,除了上面列举的 Docker Compose 命令外,还有很多命令后面都是有 [service] 这个可选项的。
这个 [service] 指的是 Docker Compose File 中声明的 “service” 名称,而不是镜像名称。通过给出特定的 “service”
名称,可以达到当前命令只执行于指定 “service” 名称的容器,从而缩小命令执行的范围。

实战

进入到存放上一章节 Docker Compose File 的目录,然后执行下面的命令:

# 启动应用
> docker-compose up
# 然后发现错误地以前台的方式启动,先终止运行
> ctrl-c (same as docker-compose stop)
# 删除刚刚启动的容器
> docker-compose down
# 通过添加参数 -d 以守护模式来运行应用
> docker-compose up -d
# 查看应用运行状态
> docker-compose ps
# 查看应用运行日志 
> docker-compose logs
# 通过 exec 命令进入到 web 容器中
> docker-compose exec web sh
# 尝试使用 curl 命令,发现该容器没有安装 curl 命令
> curl localhost
# 退出容器编辑 Dockerfile
> exit
# Dockerfile 添加 RUN 语句,通过 apk 来安装 curl 命令
> RUN apk add --update curl
# 重新启动应用
> docker-compose up -d
# 发现没有生效,应该本地已经构建过镜像了,因此不会重新构建新的镜像,需要添加 --build 参数
> docker-compose up -d --build
> docker-compose exec web sh
# 重新进入到 web 容器中执行 curl 命令
> curl localhost
# 成功执行,退出
> exit
# 停止并删除容器运行
> docker-compose down

cubeSuger
54 声望1 粉丝

一个被代码耽误的段子手