专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Docker Compose file

1、 Service configuration

Compose file 是一个YAML文件,用于定义 servicesnetworks, 和 volumes。其默认路径是./docker-compose.yml

一个service定义包含了这个服务启动的所有容器的配置,这个操作看起来很像是传递命令行参数给docker container create命令。同样,network和volume定义类似于docker network create 和 docker volume create命令。

与 docker container create 一样,在Dockerfile中指定的选项(比如:CMD、 EXPOSE、 VOLUME、 ENV等)也是一样的,你不需要在docker-compose.yml中再次指定它们。

1、1、 build

应用于构建时的配置选项

build指定了构建上下文路径

90_1.png

或者,也可以用一个包含context和可选的dockerfile及args的对象类指定

90_2.png

如果在指定build的同时还指定了image,那么将会用指定的镜像来构建

90_3.png

1、2. context

指向包含Dockerfile目录的路径,或者指向git仓库的url

如果这个值是相对路径,那么它相对的是compose file所在的位置(PS:其实就是当前目录)

90_4.png

1、3. Dockerfile

你也可以用Dockerfile来构建,不过这个时候必须指定context

90_5.png

(PS:dockerfile是用来生成镜像的,也就是说构建的时候可以从image构建,也可以从dockerfile构建,是一样的)

1、4. args

添加构建参数,这些环境变量只能在构建过程中访问

首先,在Dockerfile中定义变量

90_6.png

然后,在构建的时候给这些变量赋值

90_7.png

或者,下面这种写法也是可以的

90_8.png

注意:如果在Dockerfile中,ARG在FROM指令之前,那么在FROM指令下ARG不可用

你也可以在构建参数中省略它们的值,这种情况下会从Compose运行的环境中取值(PS:其实就是环境变量)

1、5. cache_from

缓存的镜像列表

90_9.png

1、6. shm_size

为这个构建的容器设置/dev/shm分区的大小

90_10.png

1、7. configs

授权某个服务可以访问它下面配置的configs,支持两种语法

1、7.1. 短语法

短语法只指定config名称,授权容器可以访问config,并将其挂载到该容器下的/<config_name>

下面的例子授权redis服务访问my_config和my_other_config配置。my_config的值设置的是./my_config.txt,而my_other_config的值指定的是外部资源,这就意味着该值已经被定义在Docker中了。

90_11.png

1、7.2. 长语法

长语法提供了更细粒度的控制

  • source :config的名称
  • target :被挂载到容器后的文件名称,默认是/
  • uid和gid :被挂载到容器的文件的所有者和所属组ID
  • mode :被挂载到容器中的文件的权限(PS:如果你不熟悉UNIX的权限模式,可以用这个工具 http://permissions-calculator.org

下面这个例子将在容器下设置my_config和redis_config,设置权限是0440,所有者和所属组都是103,redis服务不可以访问my_other_config配置

90_12.png

1、8. container_name

自定义容器名称,而不是用默认生成的名称

90_13.png

1、9. depends_on

表示服务之间的依赖关系,服务依赖关系导致以下行为:

  • docker-compose up 按照依赖顺序启动服务
  • docker-compose up SERVICE 自动包含服务的依赖
  • docker-compose stop 按照依赖顺序停止服务

下面的例子中,db和redis会先于web启动,启动web的时候也会创建并启动db和redis,web停止之前会先停止db和redis

90_14.png

注意:depends_on不会等待db和redis启动好了再启动web

1、10. deploy

只有在集群方式部署的时候这个配置才有效

90_15.png

1、10.1. mode

global(每个集群节点只有一个容器) 或者 replicated (指定数量的容器)。默认是 replicated

90_16.png

1、11. env_file

添加一个环境变量文件,可以是单个值或者一个列表

90_17.png

如果同一个变量出现在多个文件中,则后者覆盖前者

90_18.png

1、12. environment

添加一个环境变量,可以覆盖env_file中同名的变量值

90_19.png

1、13. expose

在不将端口发布到主机的情况下公开端口

90_20.png

1、14. image

指定容器从哪个镜像启动,可以是镜像ID,也可以是镜像tag

90_21.png

1、15. network_mode

网络模式

90_22.png

1、16. ports

端口,两种语法

短语法

90_23.png

长语法

90_24.png

1、17. restart

重启策略,默认是no

90_25.png

1、18. ulimits

覆盖容器默认的ulimits

90_26.png

1、19. volumes

挂载主机的路径或volumes名称

你可以为单个服务挂载一个主机路径,这个时候就没有定义顶级的volumes了。但是,如果你希望多个服务复用一个volumes,那么这个时候就要定义在顶级了。

90_27.png

短语法

指定主机上的路径(HOST:CONTAINER),或者一个访问模式(HOST:CONTAINER:ro)

90_28.png

(PS:稍微解释一下,比如/opt/data:/var/lib/mysql表示挂载到主机的路径是/opt/data,挂载到容器的路径是/var/lib/mysql,其实挂载可以理解为映射)

长语法

  • type :挂载类型(volume, bind,tmpfs)
  • source :挂载的源
  • target :volume被挂载到容器中的路径
  • read_only :设置只读
  • propagation :bind的额外选项
  • nocopy :volume的额外选项,表示当volume创建的时候是否禁止从容器上复制数据
  • size :tmpfs的额外选项,表示挂载的字节大小

90_29.png

1、20. 指定时长与字节值

时长支持的单位:us,ms,s,m,h

90_30.png

字节大小支持的单位:b,k,m,g 或者 b,kb,mb,gb

90_31.png

2、 Volume configuration

下面的例子展示了两个服务,一个数据库的数据目录以一个volumn的形式与另一个服务共享,以至于它可以周期性的备份数据:

90_32.png

顶级volumns可以是空的,此时它使用Docker引擎默认提供的驱动(大多数情况下是local)来配置。你也可以指定下列key

90_33.png

3、 示例

90_34.png

4、 文档

https://docs.docker.com/compose/compose-file/

https://docs.docker.com/compose/reference/

http://permissions-calculator.org

https://yaml.org

文章永久链接:https://tech.souyunku.com/20922

未经允许不得转载:搜云库技术团队 » Docker Compose file

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们