compose配置文件参数详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了compose配置文件参数详解相关的知识,希望对你有一定的参考价值。

本文介绍compose配置文件参数的使用,熟练编写compose文件

[[email protected] lnmp]# cat lnmp.yaml
version: 3
services:
  nginx:
    build: /root/docker_demo/nginx/
    ports:
      - "80:80"
    links:
      - php:php
    volumes:
      - "/www:/usr/local/nginx/html"
  php:
    image: php
    expose:
      - "9000"
    volumes:
      - "/www:/usr/local/nginx/html"

上面的一个例子version代表版本

技术分享

什么版本的docker-compose对应什么版本的docker:

技术分享

services就是compose中定义的服务,compose管理的是project、service、container,project如果没有指定就是默认的lnmp.yml文件的lnmp

nginx、php就是属于services的子集栏,定义了两个service

nginx服务中有各种参数:

build:和docker中的build构建一样,后面的路径指向Dockerfile的位置:

[[email protected] lnmp]# ll /root/docker_demo/nginx/
total 832
-rw-r--r--. 1 root root   1133 Nov  6 13:40 Dockerfile
-rw-r--r--. 1 root root   1033 Nov  6 10:17 fastcgi_params
-rw-r--r--. 1 root root 833473 Nov  6 09:35 nginx-1.8.1.tar.gz
-rw-r--r--. 1 root root    776 Nov  6 10:16 nginx.conf
-rw-r--r--. 1 root root    341 Nov  6 16:43 www.conf

ports参数就是docker在docker run启动容器时-p选项的意思差不多,映射到本机host,前者的端口是本机host,后面是container_port

links参数也是docker run在启动容器时--link选项的意思差不多,用于与容器间的互联访问,php:php,前者php是定义的service名称,后者的php是给它定义了一个别名

volumes:与docker run在启动容器时-v选项的意思差不多,用于host与container之间的映射挂载,前者是host_mount_dir,后面是container中的目录

volumes:
  # Just specify a path and let the Engine create a volume
  - /var/lib/mysql

  # Specify an absolute path mapping
  - /opt/data:/var/lib/mysql

  # Path on the host, relative to the Compose file
  - ./cache:/tmp/cache

  # User-relative path
  - ~/configs:/etc/configs/:ro

  # Named volume
  - datavolume:/var/lib/mysql

在下面的php这个service中:

image:代表的就是使用的docker images中的某个镜像名称去开启container(默认tag为latest),如果本地没有镜像将会进行pull 

image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd

有了上面的第一个简单的compose yml文件,于是进行启动container:

[[email protected] lnmp]# docker-compose -f lnmp.yaml up --build

由于我这里进行了配置文件的修改,所以不再单独的up,而是up --build(If you change a service’s Dockerfile or the contents of its build directory, run docker-compose build to rebuild it.)

单独的docker-compose -f lnmp.yaml build只会进行build而不会进行启动容器,之后还需进行docker-compose -f lnmp.yaml up

 build: /root/docker_demo/nginx/,build参数这里可以指定解决路径也可以以compose的项目路径的相对路径进行指定

[[email protected] lnmp]# cat lnmp.yaml
version: 3
services:
  nginx:
    build:
      context: /root/docker_demo/nginx/
      dockerfile: /root/docker_demo/nginx/Dockerfile

build参数的子集也可以根据Dockerfile构建的context来进行build

在build子集中还有args的使用,配合Dockerfile中的ARG结合使用

[[email protected] nginx]# cat Dockerfile 
FROM centos_init:v2

MAINTAINER [email protected]163.com
ARG buildno
RUN echo "Build number: $buildno"

上面的Dockerfile中定义了build,但是并没有赋值,RUN执行打印这个值,而在compose的yml中:

[[email protected] lnmp]# cat lnmp.yaml
version: 3
services:
  nginx:
    build:
      context: /root/docker_demo/nginx/
      dockerfile: /root/docker_demo/nginx/Dockerfile
      args:
        buildno: 2

定义了buildno的值,于是在docker-compose执行构建时使用了这个值,下面是过程

技术分享

如果仅仅在yml文件中定义了args变量,而没有在Dockerfile中定义相同的变量,将会报错:

[Warning] One or more build-args [foo] were not consumed.

ARG在Dockerfile中的用法:

ARG <name>[=<default value>]
设置变量命令,ARG命令定义了一个变量,在docker build创建镜像的时候,使用 --build-arg <varname>=<value>来指定参数
ARG user1
ARG buildno
或者定义默认值
ARG user1=someuser
ARG buildno=1

ARG只是在build构建过程中使用,构建完成后,变量将会消失和ENV有着明显的区别




以上是关于compose配置文件参数详解的主要内容,如果未能解决你的问题,请参考以下文章

Docker-Compose模板文件参数详解

Docker Compose 配置文件详解

Docker Compose 配置文件详解

docker-compose.yml 配置文件详解及项目发布

prometheus配置详解

docker系列:docker-compose用法详解