浅谈docker compose书写规则

本文对集群部署相关的一概不做介绍

版本约束

  • Docker Engine >= 19.03
  • Docker Compose >=3.8

结构介绍

docker-compose.yaml 文件结构主要由

version # docker compose版本
networks # 网络,用于docker容器内部通讯
x-{name} # 模版命名规则 以x-开头 用于复用
volumes # 挂载卷
services # 服务模块,内部定义容器信息 其内部参数相当于docker run时的参数

模块介绍

Docker Compose官方文档

version

设定docker-compose.yaml的版本
需要升级的话,参看文档版本升级参考文档

Compose file 版本 Docker Engine 版本
3.8 19.03.0+
3.7 18.06.0+
3.6 18.02.0+
3.5 17.12.0+
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3.0 1.13.0+
2.4 17.12.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+
1.0 1.9.1.+

network_mode

使用与--network参数相同的值,以及特殊形式service:[service name]

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

networks

为当前docker-compose.yaml文件创建的容器设定网络

不一定存在于和version同级,也可以在各个其他模块中,例如services中

内部网络

services:
 some-service:
  networks:
   - some-network
   - other-network

公用网络

version: "3"
networks:
 default-network:

aliases(待补充)

网络的别名

version: "3.8"

services:
 web:
  image: "nginx:alpine"
  networks:
   - new

 worker:
  image: "my-worker-image:latest"
  networks:
   - legacy

 db:
  image: mysql
  networks:
   new:
    aliases:
     - database
   legacy:
    aliases:
     - mysql

networks:
 new:
 legacy:

ipv4_address , ipv6_address(待补充)

version: "3.8"

services:
 app:
  image: nginx:alpine
  networks:
   app_net:
    ipv4_address: 172.16.238.10
    ipv6_address: 2001:3984:3989::10

networks:
 app_net:
  ipam:
   driver: default
   config:
    - subnet: "172.16.238.0/24"
    - subnet: "2001:3984:3989::/64"

services

最主要的部分,用来配置各个服务

build

用于构建镜像,当build和image字段都存在时,使用image指定的镜像名和tag作为build镜像的name和tag

version: "3.8" # docker compose版本
services:
 webapp: # docker-compose定义的服务(容器)名,主要是针对docker-compose命令的参数,与docker ps看到的容器名不一定一致
  build: # 使用Dockerfile构建镜像
   context: ./dir 上下文路径,相对路径则是相对于compose文件路径
   dockerfile: Dockerfile-alternate # 指定Dockerfile文件名
   args: # 指定Dockerfile的参数 环境变量
    buildno: 1 # directory写法和list写法均可

context

可以使用相对路径或者git仓库的url

build:
 context: ./dir

Dockerfile

指定Dockerfile文件名,必须指定context

build:
 context: .
 dockerfile: Dockerfile-alternate

args

Dockerfile中的ARG字段,用于指定docker build时的环境变量

ARG buildno
ARG gitcommithash

RUN echo "Build number: $buildno" # bash-like风格的写法
RUN echo "Based on commit: $gitcommithash"

可以使用list或者map来设定args

build:
 context: .
 args: # map
  buildno: 1
  gitcommithash: cdc3b19
build:
 context: .
 args: # list
  - buildno=1
  - gitcommithash=cdc3b19

tips
如果需要使用boolean值,需要使用双引号("true", "false", "yes", "no", "on", "off"),以便解析器将他们解析为字符串。

cache_from

为build过程指定cache

build:
 context: .
 cache_from:
  - alpine:latest
  - corp/web_app:3.14

labels

同Dockerfile中的LABEL指令,为镜像设定metadata

build:
 context: .
 labels: # map
  com.example.description: "Accounting webapp"
  com.example.department: "Finance"
  com.example.label-with-empty-value: ""
build:
 context: .
 labels: # list
  - "com.example.description=Accounting webapp"
  - "com.example.department=Finance"
  - "com.example.label-with-empty-value"

network

docker --network指令,为容器指定网络,个人理解为设定局域网
桥接可以将两个物理局域网连接起来
三种模式

build:
 context: .
 network: host # host模式,网络延迟最低,性能与宿主机一致
build:
 context: .
 network: custom_network_1 # 自创network 
build:
 context: .
 network: none # 无网络

shm_size

设置容器内/dev/shm目录的大小

/dev/shm目录非常重要,此目录并不在硬盘上,而是在内存中,默认大小为内存的一半大小,存入其中的文件不会被清空,容器内划分此目录可以一定程度上指定容器的性能。

build:
 context: .
 shm_size: '2gb' # 使用字符串设置大小
build:
 context: .
 shm_size: 10000000 # 设置字节大小

command

相当于Dockerfile中的CMD命令

command: bundle exec thin -p 3000 # shell-like
command: ["bundle", "exec", "thin", "-p", "3000"] # json-like

container_name

相当于docker run --name

container_name: my-web-container

depends_on

用于表述服务之间的依赖关系

docker-compose up时,会根据depends_on来决定启动顺序

version: "3.8"
services:
 web:
  build: .
  depends_on: # 先启动 db 和 redis
   - db
   - redis
 redis:
  image: redis
 db:
  image: postgres

tips:
docker-compose 不会等待depends_on中的容器的状态时‘ready'时才启动,所以需要在启动完成后检查容器状态。官方给出了解决办法,使用shell脚本来曲线救国,不做赘述。

depends_on does not wait for db and redis to be “ready” before starting web - only until they have been started. If you need to wait for a service to be ready, see Controlling startup order for more on this problem and strategies for solving it.
       ----form https://docs.docker.com/compo...

devices

挂载的外接设备,与--devices功能相同

devices:
 - "/dev/ttyUSB0:/dev/ttyUSB0"

dns

自定义dns地址

dns: 8.8.8.8 # 单个string值
dns: # list
 - 8.8.8.8
 - 9.9.9.9

dns_search

自定义dns搜索域名

dns_search: example.com # 单个string值
dns_search:
 - dc1.example.com
 - dc2.example.com

entrypoint

覆盖重写默认的 entrypoint

entrypoint: /code/entrypoint.sh

同Dockerfile中的写法

entrypoint: ["php", "-d", "memory_limit=-1", "vendor/bin/phpunit"]

tips:
docker-compose.yaml 中的 entrypoint 清空Dockerfile中的CMD命令,并覆盖所有的Dockerfile中的ENTRYPOINT指令。

env_file

docker-compose.yaml添加环境变量文件。如果在docker-compose -f FILE中设置了 compose 文件,则env_file中的文件路径是相对于FILE的相对路径

env_file: .env # single value
env_file: # list
 - ./common.env
 - ./apps/web.env
 - /opt/runtime_opts.env

tips:
.env 文件格式:

# Set Rails/Rack environment # '#'为注释,
# 空行会被忽略
RACK_ENV=development # 格式为 VAR=VAL

.env 文件中的环境变量无法在build过程中被显示读取,只会被docker-compose.yaml文件读取,如果需要在build时使用该环境变量,请在build后加args子参数。

对于指定多个.env文件的情况,官网的这句话贼复杂

Keep in mind that the order of files in the list is significant in determining the value assigned to a variable that shows up more than once.
---from https://docs.docker.com/compo...

直译过来是

请记住,列表中文件的顺序对于确定分配给多次显示的变量的值很重要。

因为对环境参数文件的处理是自上而下的,所以翻译成人话就是,多个参数文件中包含同一个环境变量,以最后一个为准。

environment

添加环境变量

environment: # map
 RACK_ENV: development
 SHOW: 'true'
 SESSION_SECRET:
environment: # list
 - RACK_ENV=development
 - SHOW=true
 - SESSION_SECRET

tips:
.env 文件中的环境变量无法在build过程中被显示读取,只会被docker-compose.yaml文件读取,如果需要在build时使用该环境变量,请在build后加args子参数。
次环境变量在构建镜像时,可以被我们自身的代码读取到,例如:

func getEnvInfo() string {
  rackEnv := os.Getenv("RACK_ENV")
  fmt.Println(rackEnv)
}

output:
development

expose

暴露端口,但是仅限于服务之间的通信,暴露的是内部端口,类似Dockerfile的EXPOSE指令

expose:
 - "3000"
 - "8000"

external_links

连接服务

external_links:
 - redis_1
 - project_db_1:mysql
 - project_db_1:postgresql

tips:
官方推荐使用network

extra_hosts

添加自定义域名,同--add-host

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

也可以在容器内的/etc/hosts文件内写入

162.242.195.82 somehost
50.31.209.229  otherhost

healthcheck

同Dockerfile中的HEALTHCHECK指令

healthcheck:
 test: ["CMD", "curl", "-f", "http://localhost"]
 interval: 1m30s
 timeout: 10s
 retries: 3
 start_period: 40s

使用disabel: true,相当于test: ["NONE"]

healthcheck:
 disable: true

image

指定需要拉取或使用的镜像,也可以使用仓库/标签或部分镜像ID

image: redis # 默认标签 latest
image: ubuntu:18.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd

init

在容器内运行一个初始化程序,以转发信号开获取进程。

version: "3.8"
services:
 web:
  image: alpine:latest
  init: true

tips:
使用的默认初始化二进制文件是Tini,并安装在/usr/libexec/docker-init守护程序主机上。您可以通过init-path配置选项将守护程序配置为使用自定义init二进制文件 。

isolation

指定容器隔离技术,Linux只支持default,windows支持default`process hyperv`三个值,具体参考 Docker Engine Docs

labels

同Dockerfile中的LABEL指令,为容器设定metadata

build:
 context: .
 labels: # map
  com.example.description: "Accounting webapp"
  com.example.department: "Finance"
  com.example.label-with-empty-value: ""
build:
 context: .
 labels: # list
  - "com.example.description=Accounting webapp"
  - "com.example.department=Finance"
  - "com.example.label-with-empty-value"

links

旧版的功能,不推荐使用

logging

为当前服务设置日至参数

logging:
 driver: syslog
 options:
  syslog-address: "tcp://192.168.0.42:123"

driver参数同--log-driver指令

driver: "json-file"
driver: "syslog"
driver: "none"

tips:
只有使用json-file和journald时,docker-compose up和docker-compose logs才能看到日志,其他任何的驱动都无法看到日志打印。

指定日志设置,同docker run --log-opt.格式为k-v结构

driver: "syslog"
options:
 syslog-address: "tcp://192.168.0.42:123"

默认的日志驱动是json-file,可以设置存储限制

options:
 max-size: "200k" # 单文件最大存储
 max-file: "10" # 文件最大数量

tips:
上述的option参数仅为json-file日志驱动支持的参数,不同驱动支持的参数各不相同,具体参照下表。

支持的驱动列表

Driver Description
none 不输出日志。
local 日志以自定义格式存储,旨在最大程度地减少开销。
json-file 日志以自定义格式存储,旨在最大程度地减少开销。
syslog 将日志消息写入syslog设施。该syslog守护程序必须在主机上运行。
journald 将日志消息写入journald。该journald守护程序必须在主机上运行。
gelf 将日志消息写入Graylog扩展日志格式(GELF)端点,例如Graylog或Logstash。
fluentd 将日志消息写入fluentd(向前输入)。该fluentd守护程序必须在主机上运行。
awslogs 将日志消息写入Amazon CloudWatch Logs。
splunk 将日志消息写入到splunk使用HTTP Event Collector。
etwlogs 将日志消息写为Windows事件跟踪(ETW)事件。仅在Windows平台上可用。
gcplogs 将日志消息写入Google Cloud Platform(GCP)日志记录。
logentries 将日志消息写入Rapid7 Logentries。

tips:
具体请参考 Configure logging drivers

ports

对外暴露端口

short syntax:
要么指定两个端口HOST:CONTAINER,要么仅指定容器端口(选择了临时主机端口)。

ports:
 - "3000"
 - "3000-3005"
 - "8000:8000"
 - "9090-9091:8080-8081"
 - "49100:22"
 - "127.0.0.1:8001:8001"
 - "127.0.0.1:5000-5010:5000-5010"
 - "6060:6060/udp"
 - "12400-12500:1240"

tips:
当以HOST:CONTAINER格式映射端口时,使用低于60的容器端口可能会报错,因为YAML会将格式xx:yy中的数字解析为以60进制的数(可以理解为时间)。因此建议始终将端口映射显式指定为字符串。

long syntax

长语法允许出现短语法不允许出现的字段

  • arget:容器内的端口
  • published:公开暴露端口
  • protocol:端口协议(tcp或udp)
  • mode:host用于在每个节点上发布主机端口,或ingress使群集模式端口达到负载平衡。
ports:
 - target: 80
  published: 8080
  protocol: tcp
  mode: host

restart

容器重启策略

restart: "no" # 失败不重启
restart: always # 失败后总是重启
restart: on-failure # 错误码为 on-failure 时才重启
restart: unless-stopped # 手动停止后不重启

secrets(待补充)

volumes

用来挂载数据卷

short syntax
短语法使用最简单的格式[SOURCE:]TARGET[:MODE]

  • SOURCE可以是宿主机地址,也可以是数据卷名。
  • TARGET是容器内路径。
  • MODE包括rofor read-onlyrw for read-write(默认)

如果使用宿主机的相对路径,则以docker-compose.yaml为基础进行拓展。

volumes:
 # 指定容器内路径,docker 自动创建路径
 - /var/lib/mysql

 # 挂载绝对路径
 - /opt/data:/var/lib/mysql

 # 挂载相对路径
 - ./cache:/tmp/cache

 # 用户目录相对路径
 - ~/configs:/etc/configs/:ro

 # 命名挂载
 - datavolume:/var/lib/mysql

long syntax

长语法允许使用短语法无法表达的字段

  • type: 安装类型, bind, tmpfs 或者 npipesource: 挂载源,可以是宿主机路径,也可以是顶级挂载设置中设置好的卷名。tmpfs不适用于挂载target: 容器内挂载路径read_only: 设置挂载路径只读
  • bind: 配置额外的绑定设置
    • propagation: 用于设置绑定的传播模式
  • volume: 配置额外的挂载配置
    • nocopy: 创建卷时禁用从容器复制数据标识位
  • tmpfs: 配置额外的tmpfs配置
    • size: 设置挂载tmpfs的大小(字节)
  • consistency: 装载的一致性要求,consistent (主机和容器具有相同的视图),cached(读缓存,主机视图具有权威性)或delegated(读写缓存,容器的视图具有权威性)之一
version: "3.8"
services:
 web:
  image: nginx:alpine
  ports:
   - "80:80"
  volumes:
   - type: volume
    source: mydata
    target: /data
    volume:
     nocopy: true
   - type: bind
    source: ./static
    target: /opt/app/static

networks:
 webnet:

volumes:
 mydata:

到此这篇关于浅谈docker compose书写规则的文章就介绍到这了,更多相关docker compose书写规则内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker-compose一键部署gitlab中文版的方法步骤

    一.gitlab介绍 gitlab官方地址:https://about.gitlab.com/ GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释.可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库.团队成员可以利用内置的简单聊天程序(Wall)进行交流.它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需

  • Docker-compose的安装和设定详细步骤

    Docker-compose的安装和设定详细步骤 docker的1.12版本中,swarm已经合体,docker-engine/swarm/docker-compose的三件套装已经变成两件.后续会不会将docker-compose进一步合体呢,想做的话应该是顺手的事情吧,不想做的话再简单也不会做.考虑到docker-compose可能以独立的方式消失在docker的舞台之后,先写一个安装的文档作纪念吧. 最简单的方式 下载下来二进制的docker-compose,放到你想放的地方,设定可执行的

  • Docker 容器编排利器Compose(起步篇)

    一个大型的Docker组成的微服务应用中,容器的数量是非常庞大的,如果依赖传统的人工配置方式进行维护,对于开发和运维来说简直就是噩梦.Compose的出现正是为了解决这个问题. Compose简介 Compose的前身是Fig,Fig被Docker收购之后正式更名为Compose,Compose向下兼容Fig.Compose是一个用于定义和运行多容器Docker应用的工具,只需要一个Compose的配置文件和一个简单的命令就可以创建并运行应用所需的所有容器.在配置文件中,所有容器通过servic

  • Docker-Compose的使用示例详解

    Docker Compose是一个用来定义和运行复杂应用的Docker工具.使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作. - github.com/docker/compose docker-compose是用来在Docker中定义和运行复杂应用的工具,比如在一个yum文件里定义多个容器,只用一行命令就可以让一切就绪并运行. 使用docker compose我们可以在Run的层面解决很多实际问题,如:通过创建compose(基于YU

  • 使用 docker-compose 运行 MySQL的方法

    目录结构 . │ .env │ docker-compose.yml │ └─mysql ├─config │ my.cnf │ └─data mysql 目录下的 data 为数据目录,mysql 的数据表.二进制日志文件就在这里..env 文件包含了一些变量,这些变量可以在 docker-compose.yml 文件中通过 ${variable_name} 来引用. 当然也可以把 mysql 的目录放到其它地方,这里图个方便,直接放在 yml 文件同级目录了. .env 文件 MYSQL_R

  • 详解Docker Compose 中可用的环境变量问题

    Compose 的多个部分在某种情况下处理环境变量.本教程可以帮助你找到所需的信息. 1. 替换Compose文件中的环境变量 可以使用 shell 中的环境变量填充 Compose 文件中的值: web: image: "webapp:${TAG}" 更多信息请参考 Compose 文件手册中的 Variable substitution章节. 2. 设置容器中的环境变量 可以通过 environment 关键字设置服务容器中的环境变量,就跟使用 docker run -e VARI

  • docker-compose 详解及示例代码

    docker-compose使用示例 利用docker搭建一个mysql + java service + nginx,总共4个docker容器,如果采用docker run的方式一个一个容器去创建十分麻烦.为了能更高效的批量创建容器,docker推出了docker-compose工具,只需要定义一个docker-compose.yml文件即可快速搞定一组容器的创建, mysql: image: daocloud.io/yjmyzz/mysql-osx:latest volumes: - ./m

  • Docker Compose 网络设置详解

    基本概念 默认情况下,Compose会为我们的应用创建一个网络,服务的每个容器都会加入该网络中.这样,容器就可被该网络中的其他容器访问,不仅如此,该容器还能以服务名称作为hostname被其他容器访问. 默认情况下,应用程序的网络名称基于Compose的工程名称,而项目名称基于docker-compose.yml所在目录的名称.如需修改工程名称,可使用--project-name标识或COMPOSE_PORJECT_NAME环境变量. 举个例子,假如一个应用程序在名为myapp的目录中,并且do

  • 安装docker-compose的两种最简方法

    这里简单介绍下两种安装docker-compose的方式,第一种方式相对简单,但是由于网络问题,常常安装不上,并且经常会断开,第二种方式略微麻烦,但是安装过程比较稳定 方法一: # curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose # chmod +x /usr/local/bi

  • 浅谈docker compose书写规则

    本文对集群部署相关的一概不做介绍 版本约束 Docker Engine >= 19.03 Docker Compose >=3.8 结构介绍 docker-compose.yaml 文件结构主要由 version # docker compose版本 networks # 网络,用于docker容器内部通讯 x-{name} # 模版命名规则 以x-开头 用于复用 volumes # 挂载卷 services # 服务模块,内部定义容器信息 其内部参数相当于docker run时的参数 模块介

  • 浅谈docker学习之docker数据卷(volume)

    1.什么是数据卷volume 为了了解什么是Docker Volume,首先我们需要明确Docker内的文件系统是如何工作的.Docker镜像被存储在一系列的只读层.当我们开启一个容器,Docker读取只读镜像并添加一个读写层在顶部.如果正在运行的容器修改了现有的文件,该文件将被拷贝出底层的只读层到最顶层的读写层.在读写层中的旧版本文件隐藏于该文件之下,但并没有被不破坏 - 它仍然存在于镜像以下.当Docker的容器被删除,然后重新启动镜像时,将开启一个没有任何更改的新的容器 - 这些更改会丢失

  • 浅谈docker --privileged=true参数作用

    大约在0.6版,privileged被引入docker. 使用该参数,container内的root拥有真正的root权限. 否则,container内的root只是外部的一个普通用户权限. privileged启动的容器,可以看到很多host上的设备,并且可以执行mount. 甚至允许你在docker容器中启动docker容器. $ docker help run ... --privileged=false Give extended privileges to this container

  • 浅谈Docker如何自定义host文件

    目录 一.命令 二.docker-compose.yml 三.dockerfile 四.直接修改 五.修改镜像 总结 1.问:我们的真正开发的时候数据库都是部署在内网的,而我们程序连接数据库的时候,需要指定内网的地址.但是有时候我们需要迁移环境,那么我们的后端代码就得跟着进行修改,有没有一种好的办法,不让我们修改代码吗? 答:可以肯定的说是有的,那就是在代码中指定的不是IP地址,而是域名.我们只需要配置域名和IP地址建立映射关系,所有的项目都无需更改代码就可以达到目的. 2.问:正式环境一般都是

  • 浅谈Docker安全机制内核安全与容器之间的网络安全 原创

    内核安全 内核为容器提供两种技术 cgorups和namespaces,分别对容器进行资源限制和资源隔离,使容器感觉像是在用一台独立主机环境. ·cgroups资源限制 容器本质上是进程,cgroups的存在就是为了限制宿主机上不同容器的资源的使用量,避免单个容器耗尽宿主机资源而导致其他容器异常. ·namespaces资源隔离 为了使容器处在独立的环境中,docker使用namespaces技术来隔离容器,使容器与容器之间,容器与宿主机之间相互隔离. docker目前仅对uts.IPC.pid

  • 浅谈docker Dockerfile 指令 VOLUME 介绍

    在介绍VOLUME指令之前,我们来看下如下场景需求: 1)容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上.一旦容器删除后,这些数据就没了,除非我们人工备份下来(或者基于容器创建新的镜像).能否可以让容器进程持久化的数据保存在主机上呢?这样即使容器删除了,数据还在. 2)当我们在开发一个web应用时,开发环境是在主机本地,但运行测试环境是放在docker容器上. 这样的话,我在主机上修改文件(如html,js等)后,需要再同步

  • 浅谈Docker 容器数据卷挂载小结

    为了更直观了解数据卷挂载的操作,做个实验一一验证数据卷挂载的各种情况. 情况一.本地不存在文件挂载到容器存在文件 首先是当本地不存在该文件,而容器内存在该文件的情况,尝试把不存在的文件挂载到存在该文件的容器中.以一个 Alpine 镜像为例,这里把一个修改后的 Alpine 镜像打了新标签,叫做 volume_test: # 本地目录不存在 test 文件. $ docker run --name=test -v ~/test.txt:/etc/hosts -d volume_test 0cba

  • 浅谈Docker基础之数据管理

    用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作.容器中管理数据主要有两种方式:数据卷(Data Volumes),数据卷容器(Data Volume Containers). 数据卷 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性: 1.数据卷可以在容器之间共享和重用. 2.对数据卷的更改会立即生效. 3.对数据卷的更新不会影响镜像. 4.数据卷会一直

  • 浅谈Docker运行Tensorboard和jupyter的方法

    网上找了很多方法都是jupyter 运行正常但不知道如何打开Tensorboard.折腾了很久,实验很多中方法最终找到了一个正确的方式. 首先创建docker volumes docker volume create --name notebooks docker volume create --name logs 注: 这个是docker创建的volume 用来供jupyter 运行的notebook 和log 保存的卷信息. 然后在本机创建两个运来实际挂载notebooks 和logs的目录

  • 浅谈Docker数据持久化

    容器中数据持久化主要有两种方式: 数据卷(Data Volumes) 数据卷容器(Data Volumes Dontainers) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,可以绕过UFS(Unix File System). 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 数据卷默认会一直存在,即使容器被删除 一个容器可以挂载多个数据卷 注意:数据卷的使用,类似于 Linux 下对目录或文件进行 mount. 创建数据卷 示例: docker

随机推荐