Docker Compose 概念介绍

需求变更狂
• 阅读 1104

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
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
3年前
Docker Compose集成式应用组合及service编排
Compose简介Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。其代码目前在https://github.com/docker/compose(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fdocker
Stella981 Stella981
3年前
Docker Compose安装
1.Docker社区开发了很多工具,用于对多个docker容器进行编配。编配的过程实际上就是管理运行在多个docker容器里面的应用,而这些docker容器可能运行在多个不同的宿主机上。2.DockerCompose是一个比较简单的docker容器的编配工具,以前的名称叫Fig,由Orchard团队开发的开源Docker编配工具,在2014年被Do
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
Docker 容器健康检查
!DOCKERHEALTHCHECK(https://imgblog.csdnimg.cn/20210120134741738.jpg)Docker容器健康检查指的是在Dockerfile中使用HEALTHCHECK指令对容器的运行状态进行检查,并在dockerps的STATUS栏显示healthy/unhealt
Stella981 Stella981
3年前
CentOS7安装Docker详细实践
一、Docker简介Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 一个完整的Docker有以下几个部分组成:1.DockerClient客户端2.DockerDae
Stella981 Stella981
3年前
Docker是什么
一.Docker概念简介Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPho
Stella981 Stella981
3年前
Docker多容器连接
Docker提供了多个容器之间访问的方法,最简单的方式是直接使用端口映射p参数指定映射的端口或者P映射所有端口,多个容器直接通过网络端口进行访问。但网络端口映射方式并不是Docker中连接多个容器的唯一方式,还可以使用Docker的连接系统(link)连接多个容器,当容器连接到一起时,接受者容器就可以看到源容器的信息。建立容器
需求变更狂
需求变更狂
Lv1
每天的坏心情在睡前都清零。
文章
4
粉丝
0
获赞
0