Docker-Compose
- 新版本的 dockerfile 由五部分组成,分别是 services, volumes, network, configs, secrets,services 用来创建容器,其他四部分用于在容器间共享一些信息;
- services: 用来构建容器
- build: 可以是一个字符串(指定 docker-compose.yml 文件的所在目录),也可以是一个对象
- context:指定 docker-compose.yml 文件的所在目录;
- dockerfile:指定 dockerfile 相对于 context 的文件路径名;
- args: 指定构建的环境变量,这些变量可以被 dockerfile 中引用;
- 变量名:变量值(若不指定变量值,则构建时将从环境变量中查询该变量名对应的值)
- labels: 用来设置镜像的元数据
- “属性名=属性值”
- 注:此处的属性值若是域名,建议倒着写,即 docs.abc.com 写成 com.abc.docs,以避免跟某些软件的默认设置冲突;
- “属性名=属性值”
- target:若 dockerfile 是多阶段构建,则该值可用来指定要构建的阶段;
- image:如有指定 build 选项,则此选项用来给镜像命名+标签;若没有指定 build 选项,此选项用来指定构建容器所要引用的镜像;选项值可以是镜像名+标签,或者镜像的ID
- cap_add 或 cap_drop:用来增加或减少容器系统调用权限;用于设置安全性的场景;
- cgroup:用来设置所属的资源控制组(资源控制组用来设置资源使用的权限)
- command:要执行的指令,若此处设置了,则会覆盖 dockerfile 中的设置值;该值可以是长字符串,也可以是字符串列表;
- container_name: 可用来自定义容器名;但当构建多个相同容器时,该选项会带来冲突;
- configs:用来设置配置项,它支持将配置值放在一个文件中,然后在此处设置访问的路径;该选项有简版和长版两种写法;详细查看此链接;
- depends_on:显示声明当前容器所依赖的其他容器;它会让 compose 在启动或停止容器时,按相互依赖的顺序进行;虽然控制了顺序,但这不意味着后面的容器会等前面的容器准备好再启动;所以,有时候可能不一定能够达到完美的预期效果;
- deploy:用来设置部署的方式,此选项仅在 swarm 模式下起作用,在 compose 模式下会被忽略;
- endpoint_mode:用来设置某个容器服务被集群外的客户端发现的方式;
- mode:部署的模式,单节点单容器,或者单节点多容器;
- replicas:副本数量(仅在 mode 为单节点多容器的情况下有效);
- resources:设置资源使用的限制;
- restart_policy:重启策略;
- rollback_config:更新失败后的回滚策略;
- update_config:更新策略;
- devices:用来设置设备映射;
- dns:用来设置 DNS 服务器;可以是单个值,也可以是列表;
- entrypoint:入口点;设置后,会覆盖 dockerfile 里面的值;
- env_file:从文件中加载环境变量,可以单个值(单文件),也可以是列表(多文件);文件中的键值对格式为:KEY=value
- environment:用来设置环境变量;
- KEY: value
- expose:要暴露的端口;这些端口仅供已跟当前容器连接的其他容器访问,无法被主机访问;
- external_links:和那些不在当前 docker-compose.yml 文件定义的容器进行连接;不太推荐使用 links 这个遗留的历史功能,更推荐用 networks 来配置;
- 外部容器名:自定义别名
- extra_hosts:添加外部主机的映射;
- “主机名:主机IP”
- healthcheck:可用来设置执行某个预定义的命令,进行容器的健康检查,确保容器有正常运行;
- links:该选项即将在弃用,建议使用 networks 进行配置;
- logging:配置日志选项;
- network_mode:设置网络连接模式,默认值是 bridge,其他值有 host, join, none等等;
- networks:用来设置当前容器所属的网络,相关信息定义在上一级的 Networks 条目下;
- 所属的网络名
- aliases: 当前容器在网络中的别名;
- ports:设置端口映射;有短版和长短两种写法;
- restart:容器运行失败后的重启策略,默认是不重启;
- secrets:从文件中加载一些机密变量值;
- tmpfs:用来在容器中挂载一个或多个 tmpfs;写入 tmpfs 中的内容,将存储于内存中,而不是磁盘中;
- volumes:挂载某个主机上的文件夹,或者某个存储卷;如果想要在多个容器中共享数据,则在上一级的 Volumes 定义存储卷,然后在此处进行引用设置;这个选项也是有简版和长版两种写法;
- domainname, hostname, ipc, mac_address, privileged, read_only, shm_size, stdin_open, tty, user, working_dir:功能同 docker 命令下相应的参数;
- build: 可以是一个字符串(指定 docker-compose.yml 文件的所在目录),也可以是一个对象
- volumes: 用来设置命名存储卷,以便在多个容器间共享;
- 存储卷名称
- driver:要使用的驱动名称;
- driver_opts:驱动的配置参数;
- external: 若为 true,表示该存储卷已在当前 docker-compose.yml 文件外定义;
- labels:存储卷的元信息;
- name:存储卷名称;
- networks: 用来设置命令网络,以便多个容器间相互通讯;
- 网络名称
- driver:网络驱动;单机默认为 bridge,集群默认为 overlay;
- driver_opts:驱动的配置参数;
- labels: 网络的元信息;
- external: 若为 true,表示网络已在当前 docker-compose.yml 文件外定义;
- name: 网络名称;
- configs: 用来设置让多个容器进行引用的配置项(来源于某个文件或者外部);
- 配置项名称
- file:文件路径
- external:若为 true,表示已在当前 docker-compose.yml 文件外定义;
- name:配置项名称;
- secrets: 用来设置让多个容器进行引用的机密信息(来源于某个文件或者外部)
- 机密项名称
- file:机密文件路径
- external:若为 true,表示已在当前 docker-compose.yml 文件外定义;
- name:机密项名称;