docker compose 文件缓存(dockercompose命令详解)

来源网友投稿 2229 2022-12-30

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。
本篇文章给大家谈谈docker compose 文件缓存,以及docker-compose命令详解对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享docker compose 文件缓存的知识,其中也会对docker-compose命令详解进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

docker-compose.yml说明和编写

模板文件是使用 Compose 的核心docker compose 文件缓存,涉及到的指令关键字也比较多。大部分指令跟 docker run 相关参数的含义都是类似的。

默认的模板文件名称为 docker-compose.yml ,格式为 YAML 格式。

可以将 Compose 文件命名为任何所需内容,以使其在逻辑上具有意义; docker-compose.yml 仅为标准名称。我们可以简单地将此文件命名为 docker-stack.yml 或更特定于项目的内容

注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile )等来自动构建生成镜像。

在 docker stack 下, build 指令不能使用,只能用 image

如果使用 build 指令,在 Dockerfile 中设置的选项(例如: CMD , EXPOSE , VOLUME , ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置。

请注意,将 Compose 文件设置为 version:"3" 。本质上,这会使其兼容 swarm mode 。我们可以使用 deploy key (仅可用于 Compose 文件格式版本 3.x 及更高版本)及其子选项对每项服务(例如,web)进行负载均衡和优化性能。我们可以使用 docker stack deploy 命令(仅在 Compose 文件版本 3.x 及更高版本上受支持)运行此文件。您可以使用 docker-compose up 运行具有 非 swarm 配置的版本 3 文件。

指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。

也可以使用 context 指令指定 Dockerfile 所在文件夹的路径。

使用 dockerfile 指令指定 Dockerfile 文件名。

使用 arg 指令指定构建镜像时的变量。

使用 cache_from 指定构建镜像的缓存

指定容器的内核能力(capacity)分配。

让容器拥有所有能力可以指定为:

去掉 NET_ADMIN 能力可以指定为:

覆盖容器启动后默认执行的命令。

仅用于 Swarm mode

指定父 cgroup 组,意味着将继承该组的资源限制。

例如,创建了一个 cgroup 组名称为 cgroups_1。

指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。

仅用于 Swarm mode

指定设备映射关系。

解决容器的依赖、启动先后的问题。以下例子中会先启动 redis``db 再启动 web

自定义 DNS 服务器。可以是一个值,也可以是一个列表。

配置 DNS 搜索域。可以是一个值,也可以是一个列表。

挂载一个 tmpfs 文件系统到容器。

从文件中获取环境变量,可以为单独的文件路径或列表。

如果通过 docker-compose -f FILE 方式来指定 Compose 模板文件,则 env_file 中变量的路径会基于模板文件路径。

如果有变量名称与 environment 指令冲突,则按照惯例,以后者为准。

环境变量文件中每一行必须符合格式,支持 # 开头的注释行。

设置环境变量。docker compose 文件缓存你可以使用数组或字典两种格式。

只给定名称的变量会自动获取运行 Compose 主机上对应变量的值,可以用来防止泄露不必要的数据。

如果变量名称或者值中用到 true|false , yes|no 等表达 布尔 含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义。这些特定词汇,包括

y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF

暴露端口,但不映射到宿主机,只被连接的服务访问。

仅可以指定内部端口为参数

类似 Docker 中的 --add-host 参数,指定额外的 host 名称映射信息。

会在启动后的服务容器中 /etc/hosts 文件中添加如下两条条目。

通过命令检查容器是否健康运行。

指定为 镜像名称或镜像 ID 。如果镜像在本地不存在, Compose 将会尝试拉取这个镜像。

为容器添加 Docker 元数据(metadata)信息。例如可以为容器添加辅助说明信息。

配置日志选项。

目前支持三种日志驱动类型:

options 配置日志驱动的相关参数:

设置网络模式。使用和 docker run 的 --network 参数一样的值。

配置容器连接的网络。

跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过 进程ID 来相互访问和操作。

暴露端口信息。

使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。

存储敏感数据,例如 mysql 服务密码。

指定容器模板标签(label)机制的默认属性(用户、角色、类型、级别等)。例如配置标签的用户名和角色名。

设置另一个信号来停止容器。在默认情况下使用的是 SIGTERM 停止容器。

配置容器内核参数。

指定容器的 ulimits 限制值。

例如,指定最大进程数为 65535,指定文件句柄数为 20000(软限制,应用可以随时修改,不能超过硬限制) 和 40000(系统硬限制,只能 root 用户提高)。

数据卷所挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro) 。

该指令中路径支持相对路径。

此外,还有包括 domainname , entrypoint , hostname , ipc , mac_address , privileged , read_only , shm_size , restart , stdin_open , tty , user , working_dir 等指令,基本跟 docker run 中对应参数的功能一致。

指定服务容器启动后执行的入口文件。

指定容器中运行应用的用户名。

指定容器中工作目录。

指定容器中搜索域名、主机名、mac 地址等。

允许容器中运行一些特权命令。

指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,在生产环境中推荐配置为 always 或者 unless-stopped 。

以只读模式挂载容器的 root 文件系统,意味着不能对容器内容进行修改。

打开标准输入,可以接受外部输入。

模拟一个伪终端。

Compose 模板文件支持动态读取主机的系统环境变量和当前目录下的 .env 文件中的变量。

例如,下面的 Compose 文件将从运行它的环境中读取变量 ${MONGO_VERSION} 的值,并写入执行的指令中。

如果执行 MONGO_VERSION=3.2 docker-compose up 则会启动一个 mongo:3.2 镜像的容器;如果执行 MONGO_VERSION=2.8 docker-compose up 则会启动一个 mongo:2.8 镜像的容器。

若当前目录存在 .env 文件,执行 docker-compose 命令时将从该文件中读取变量。

在当前目录新建 .env 文件并写入以下内容。

执行 docker-compose up 则会启动一个 mongo:3.6 镜像的容器。

Docker的那些事儿—什么是docker compose?

从本节开始docker compose 文件缓存,开启docker compose学习。

上一篇docker compose 文件缓存: Docker的那些事儿—如何利用docker-machine配置管理machine?

前面我们学习了docker容器docker compose 文件缓存,了解了如何启动容器。那如果我需要启动多个容器,甚至还要严格控制这些容器的启动顺序,怎么办呢?当然了,我们可以通过脚本来完成这一相对复杂的流程控制,但是这显然不够灵活,逻辑稍微变化,脚本可能变化很大。基于此Docker提供了一种更加简单的方法,来管理多个容器的联动。

Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用(称为一个 project,即项目)。Compose 定位是“Define and run multi-container applications with Docker”,其前身是 Fig,兼容 Fig 的模板文件。docker compose 文件缓存你需要定义一个 YAML 格式的配置文件 docker-compose.yml ,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。

# 启动所有服务

$ docker-compose up

# 关闭所有服务

$ docker-compose stop
使用Compose包含三个最基本步骤docker compose 文件缓存

1、定义Dockerfile文件,该文件定义了应用环境(镜像的构建)

2、定义docker-compose.yml文件,该文件定义了组成应用的服务

3、运行docker-compose up命令
一个典型的docker-compose.yml文件内容如下:

version: '3'

services:

  web:

    build: .

    ports:

    - "5000:5000"

    volumes:

    - .:/code

    - logvolume01:/var/log

    links:

    - redis

  redis:

    image: redis

volumes:

  logvolume01: {}

  关于docker-compose.yml文件,后面会详细介绍。
下一篇: Docker的那些事儿—如何安装docker-compose?

详解Docker——你需要知道的Docker进阶知识五

Dockerfile 是一个文本文件,其中包含了构建 Docker 镜像需要执行的命令序列。使用 docker build 命令从 Dockerfile 中读取指令来构建镜像。

构建镜像时,该过程的第一件事是将 Dockerfile 文件所在目录下的所有内容发送给 Docker 守护进程。所以大多数情况下,最好创建一个新的目录,在其中保存 Dockerfile ,以及构建镜像所需的其它文件。Dockerfile 文件所在目录也被称为构建上下文(context)。

使用 FROM 指令指定一个基础镜像,后续指令将在此镜像基础上运行:

在 Dockerfile 中可以指定一个用户,后续的 RUN , CMD 以及 ENTRYPOINT 指令都会使用该用户身份去执行,该用户必须已存在。

除了指定用户之外,还可以使用 WORKDIR 指定当前工作目录(CWD), RUN , CMD , COPY , ADD 指令将在指定的工作目录中执行。

RUN 指令用于执行命令,该指令有两种形式:

例如我们执行更新命令:

CMD 的使用方式跟 RUN 类似,不过在一个 Dockerfile 文件中只能有一个 CMD 指令,如果有多个,则只有最后一个会生效。该指令指定了启动容器时要执行的命令,例如:

可以在 docker run 时指定命令来覆盖默认的 CMD 命令,比如 docker run image echo"hello shiyanlou" 。

CMD 指令还有一种特殊用法。在 Dockerfile 中,如果使用 ENTRYPOINT 指令指定了入口命令,则 CMD 指令的内容会作为 ENTRYPOINT 指令的参数:

ENTRYPOINT 指令会覆盖 CMD 指令作为容器运行时的默认指令,并且该指令不会被 docker run 时指定的指令覆盖,如下示例:

上述文件构建出来的镜像,使用 docker run image 等同于 docker run image ls-a-l 。使用 docker run image-i-s 等同于 docker run image ls-a-i-s 。即 CMD 指令的值会被当作 ENTRYPOINT 指令的参数附加到 ENTRYPOINT 指令的后面,只有 CMD 指令可以被覆盖。

COPY 和 ADD 都用于将构建上下文中的文件,目录等复制到镜像中。使用方式如下:

`` 可以指定多个,但是其路径不能超出构建上下文范围,即必须在 Dockerfile 同级或子目录中。

不需要预先存在,不存在时会自动创建,如果使用相对路径,则 为相对于工作目录的路径。

COPY 和 ADD 的不同之处在于,ADD 可以添加远程文件,并且 `` 可以是 gzip 或 tar 等格式的压缩文件,添加时会自动进行解压。

ENV 指令用于设置环境变量:

VOLUME 指令指定要创建的挂载路径,在容器运行时,将为每个挂载路径创建一个匿名卷并挂载上去:

上述指令将会在容器运行时,创建两个匿名卷,并分别挂载到容器中的 /data1 和 /data2 路径。

学习了上面这些常见的 Dockerfile 指令之后,可以使用这些指令来构建一个镜像。如下所示,构建一个提供 ssh 服务的镜像:

构建镜像

查看镜像

启动容器

查看已经启动的容器

测试远程登录

Compose 是运行由多个容器组成的 Docker 应用的工具,使用 Compose 可以一次启动一组有关联的服务,每个服务由来自同一镜像的单个或多个容器组成。

在复杂应用中,应用一般由多个服务(service)组成,例如一个网站后台通常包含 Web 服务、数据库服务、缓存服务、消息队列服务等。

使用 Compose 的步骤如下:

目前有三种版本的 Compose 文件格式:

下载 docker-compose-Linux-x86_64

下载成功后,为了方便使用,可以将其添加到 PATH 路径下

执行完成后,就能够在终端下直接使用 docker-compose 命令了:

接下来我们将创建一个 Web 应用,该应用包含两个容器:

项目目录结构如下:

首先编辑 app/web/web.py 文件,写入下面的内容:

上述代码创建了一个简单的 Web 应用。该应用会连接 redis 服务,在访问 / 页面时,自动将变量 number 加 1。

编辑 app/web/requirements.txt 文件,输入如下内容:

requirements.txt 文件存放了 Web 应用依赖的第三方库包的名称和版本信息。

编辑 app/web/Dockerfile 文件,添加如下内容

上述 Dockerfile 定义了 Web 应用镜像,该镜像基于 python:2.7 基础镜像,在其基础上安装了应用依赖的库包,并通过 CMD 指令指定了应用的启动命令。

编辑 app/docker-compose.yml 文件:

该 docker-compose.yml 文件定义了两个服务,分别为 web 和 redis 服务,并且配置了 web 服务的端口映射和挂载目录。 depends_on 定义了依赖关系,被依赖的服会先启动。

进入 app 目录,执行 docker-compose up 命令来启动应用:

启动成功后,就可以打开网址 127.0.0.1:8001 来访问 Web 应用了。

另外一些命令:

全网最详细的Docker-Compose详细教程

compose、machine 和 swarm 是docker 原生提供的三大编排工具。简称docker三剑客。

Docker Compose能够在 Docker 节点上,以单引擎模式(Single-Engine Mode)进行多容器应用的部 署和管理。多数的现代应用通过多个更小的微服务互相协同来组成一个完整可用的应用。

Docker Compose 使用 YAML 文件来定义多服务的应用。YAML 是 JSON 的一个子集,因此也可以使用JSON。

Docker Compose 默认使用文件名 docker-compose.yml。当然,也可以使用 -f 参数指定具体文件。

Docker Compose 的 YAML 文件包含 4 个一级 key:version、services、networks、volumes

docker-compose up -d

docker-compose down

docker-compose ps

docker-compose logs

docker-compose build者重新构建服务

docker-compose start

docker-compose stop

docker-compose restart

docker compose 内容指导

由于之前写了一篇文章,主要是关于docker 基础的东西。这里说一下,容器编排的事情,因为后面 k8s 会用到这个。
参考 下面这个, 文档特别清晰
Docker Compose gitbook

注意 docker compose 有两个版本 一个是 python 编写的 ( docker-compose ),一个是 go 重写的 叫 compose v2 ( docker compose )命令几乎没有区别,只是 go 的少了 - , 我们用python 版的就行。没什么差别

目标 : 定义和运行多个 Docker 容器的应用, 针对多个容器组,进行一键启动和停止。
具体实现 : docker-compose.yml 来定义一组相关联的应用容器为一个项目(project) docker-compose.yml 就相当于 dockerfile 的 dockfile

概念
service 服务 , 包含多个运行的容器
project 项目, docker compose 管理的单元

自己跑了一便文档上的例子,确实比较好用哟

内容分别如下:
app.py

Dockerfile

docker-compose.yml

运行过程

看一下刚刚启动的容器:

上述命令会自动 帮你构建镜像,并按照配置启动容器组。已经存在镜像,则不会成重新构建,除非 使用 docker-compose build 重新构建服务

停止过程

可以看出,是先停掉容器,然后再删除容器的,也会删除网络。所以必要的数据一定要 挂载到外面做持久化

可以看到不会重复构建镜像,只会创建新的网络和容器

可选的 参数
-f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml
-p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名
(up 的时候可以,使用 -p 参数修改 默认的 目录名的项目名)

检查 Compose 文件是不是对的,错误的话会有错误信息

停止容器组,依次删除容器和清楚创建的网络

进入指定的容器 ( services 里定义的服务名) 或者直接 docker exec

查看容器组 (只包含 compose 启动的容器)

列出 compose 文件中的镜像

默认会 用不同的颜色 显示 服务组的控制台日志

暂停一个服务容器,和 docker pause 一样的

拉取服务依赖的镜像

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

重启项目中的服务

所有关联的服务将会自动被启动

这个还是挺有用的,设置服务容器的个数

启动服务

关闭容器

这个命令是最常用的

ymal
一个基本模板

一些可用的配置项 (只说一下,常用的吧)

每个服务都必须通过 image 或者 build ( 使用 Dockerfile) 指令 指定镜像生成的方式

指定dockerfile 路径,相对于 docker-compose.ymal 文件 相对路径 或者 绝对路径

默认为 dockerfile 的入口命令,你可以用这个覆盖

覆盖默认的规则 : 项目名称 服务名称 序号

如果指定了 这个容器名,就没办法使用 docker-compose scale 命令了,因为多个容器名不能一样

指定当前容器 依赖那个容器(需要先启动)

下面的启动 顺序依次是 redis db web

web 服务不会等待 redis db 「完全启动」之后才启动

暴露端口,但不映射到宿主机

容器健康检查配置

和build 目的一样,指定某个镜像的生成方式
如果本地不存在 会尝试 pull

添加容器描述信息, 和 dockerfile 里面的 labels 一样

和 docker run --network 的一样

设置容器使用的网络

和 docker run -p 一样
HOST:CONTAINER 前面是 宿主机,后面是容器,单个 的话就是暴露容器端口

设置挂在目录
HOST:CONTAINER 宿主机路径/数据卷 : 容器路径
支持相对路径

以及其他命令

domainname, entrypoint, hostname, ipc, mac_address, privileged, read_only, shm_size, restart, stdin_open, tty, user, working_dir

关于 compose 容器间的通信 (使用 服务名 即可)
https://michael728.github.io/2019/06/15/docker-compose-networks/

下面关于我的 docker-compose.yml

Docker从入门到精通之Docker Compose

Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,只需一个命令,就可以从配置中创建并启动所有服务。

用python构建一个简易网页统计网页点击量,docker-compose进行发布

Step1:创建项目

Step2:创建Dockerfile文件

Step3:在docker-compose.yml中定义services

Step4:用Docker compose构建和运行app

Step5:绑定一个数据卷

将当前目录与容器的/code目录绑定,这样可以动态修改代码

Step6:重新构建和运行app

先docker-compose down停止服务,在构建

用YAML文件定义服务,默认文件是docker-compose.yml,包含4个顶级key,version、services、networks、volumes

参考compose-spec/spec.md at master · compose-spec/compose-spec · GitHub

指定本 yml 依从的 compose版本

定义多个应用服务,包含环境配置、镜像构建等

指定构建镜像的路径

定义服务的block IO配置,参考compose-spec/spec.md at master · compose-spec/compose-spec · GitHub

指定自定义容器名称

定义服务间启动或关闭的依赖关系

覆盖容器启动的默认命令

domainname declares a custom domain name to use for the service container.

覆盖容器默认的entrypoint

从文件中添加环境变量到容器,可以是一个或多个文件

文件格式:

添加环境变量

暴露端口,但不映射到宿主机,只被连接的服务访问,仅可以指定内部端口

用于检测 docker 服务是否 健康 运行。

指定容器运行的镜像

设置容器标签

连接到另一个容器的网络,简单将就是让容器相互连通

服务的日志记录配置,driver:指定服务容器的日志记录驱动程序,默认值为json-file。有以下三个选项

仅在 json-file 驱动程序下,可以使用以下参数,限制日志得数量和大小。

syslog 驱动程序下,可以使用 syslog-address 指定日志接收地址。

设置网络模式,格式如下:

配置容器连接的网络

指定ip地址

端口映射,映射主机与容器端口,格式:Host:ontainer

容器重启策略

存储敏感数据,比如密码

将主机数据卷挂载到容器

覆盖容器工作目录

关于docker compose 文件缓存和docker-compose命令详解的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 docker compose 文件缓存的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于docker-compose命令详解、docker compose 文件缓存的信息别忘了在本站进行查找喔。
上一篇:包含做公司it运维的词条
下一篇:轴承性能测试实验报告(滚动轴承综合性能测试分析实验报告中南大学)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~