Ymal & Docker-compose

March 10, 2021 Docker 访问: 56 次

一门标记语言

基本语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只能用空格;只要相同层级的元素左对齐即可
  • ‘#’代表注释

YMAL对象

对象键值对表示方法:
需要注意的是冒号后面要加一个空格

key: 
    child-key: value
    child-key2: value2

另一种表示方法:

key:{key1: value1, key2: value2, ...}

数组键值对
问号加上空格配合冒号加上空格,问号后面代表键,冒号后面的数据代表值

?  
    - complexkey1
    - complexkey2
:
    - complexvalue1
    - complexvalue2

数组

-开头的行表示构成一个数组

- A
- B
- C
- D

多维数组:

-
 - A
 - B
 - C

eg:
companies是一个数组结构的数据,每个数组元素又包含idnameprice三个属性

companies:
    -
        id: 1
        name: company1
        price: 200W
    -
        id: 2
        name: company2
        price: 500W

另一中表示方式:

companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]

纯量

是最基本的,不可再分的值;包括字符串、布尔值、整数、浮点数、Null、时间、日期

boolean: 
    - TRUE  #true,True都可以
    - FALSE  #false,False都可以
float:
    - 3.14
    - 6.8523015e+5  #可以使用科学计数法
int:
    - 123
    - 0b1010_0111_0100_1010_1110    #二进制表示
null:
    nodeName: 'node'
    parent: ~  #使用~表示null
string:
    - 哈哈
    - 'Hello world'  #可以使用双引号或者单引号包裹特殊字符
    - newline
      newline2    #字符串可以拆成多行,每一行会被转化成一个空格
date:
    - 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime: 
    -  2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

Docker Compose

Compose是用于定义和运行多容器Docker应用程序的工具。使用yml文件来进行配置。

步骤:

  • 使用Dockerfile定义应用程序的环境
  • 使用docker-compose.yml来定义构成应用程序的服务,这样就可以在隔离环境中一起运行
  • 最后执行docker-compose up来启动并运行整个应用程序

启动单个容器

version: '3'
services: 
  test: #单个服务名称
    image: ubuntu:16.04#使用的镜像
    volumes: #目录挂载
      - /Users/radish/Desktop/a.php:/tmp/aa.php
    ports:#端口映射
      - 1111:111
      - 2222:222
    command: #执行命令
      - /bin/bash
      - -c
      - while true; do echo hello world; sleep 1; done

执行docker-compose来启动:

❯ docker-compose up -d
Creating network "compose-test_default" with the default driver
Creating compose-test_test_1 ... done

~/MyFile/study/Docker/Dockerfile/compose-test
❯ docker-compose ps
       Name                      Command               State                      Ports
-----------------------------------------------------------------------------------------------------------
compose-test_test_1   /bin/bash -c while true; d ...   Up      0.0.0.0:1111->111/tcp, 0.0.0.0:2222->222/tcp

启动多个容器

version: '3'
services: 
  web: 
    image: richarvey/nginx-php-fpm:php7
    volumes: 
      - /Users/radish/Desktop/a.php:/var/www/html/index.php
    ports:
      - 1111:80
    command: 
      - /start.sh
    links: 
      - "db:database"
    depends_on: 
      - db
  db:
    image: mysql:5.6.51
    expose:
      - "3306"
    environment: 
      MYSQL_ROOT_PASSWORD: root
    command: --default-authentication-plugin=mysql_native_password

links字段作用是把某个容器的IP记录到本容器里面,比如说我这里写的links内容是“db:database”,我们可以在web容器里通过"db:3306"来访问mysql服务,也可以通过"database:3306"来访问,冒号后门是一个别名。这样写的好处就是可以在php代码里写死mysql的地址,不用担心IP变化引起连接不上mysql

depends_on字段是设置依赖,我这里设置的是db容器,意思就是等到db容器启动之后再来启动web容器

expose字段是设置容器暴露端口,但不映射到主机上,知识容器之间进行访问

~/MyFile/study/Docker/Dockerfile/compose-test 12s
❯ docker-compose up -d
Creating network "compose-test_default" with the default driver
Creating compose-test_db_1 ... done
Creating compose-test_web_1 ... done

~/MyFile/study/Docker/Dockerfile/compose-test
❯ docker-compose ps
       Name                     Command               State               Ports
-------------------------------------------------------------------------------------------
compose-test_db_1    docker-entrypoint.sh --def ...   Up      3306/tcp
compose-test_web_1   /start.sh                        Up      443/tcp, 0.0.0.0:1111->80/tcp

添加新评论