3.1docker-compose

一:docker-compose
管理docker的工具
二:docker-compose的安装

# 安装依赖工具
sudo apt-get install python-pip -y
# 安装编排工具
sudo pip install docker-compose
# 查看编排工具版本
sudo docker-compose version
# 查看命令帮助
docker-compose --help

三:yaml文件格式 yml

YAML有以下基本规则:
1、大小写敏感
2、使用缩进表示层级关系
3、禁止使用tab缩进,只能使用空格键
4、缩进长度没有限制(只能使用空格缩进),只要元素对齐就表示这些元素属于一个层级。
5、使用#表示注释
6、字符串可以不用引号标注

四:yaml中的三种数据结构:
map - 散列表:

# 使用冒号(:)表示键值对,同一缩进的所有键值对属于一个map,示例:
age : 12
name : huang

# 使用json表示
{"age":12, "name":"huang"}

list - 数组:

# 使用连字符(-)表示:
# YAML表示
- a
- b
- 12
    - 23
    - 34
# 使用json表示
["a", "b", 12,[23,34]]

scalar - 纯量:

字符串
    "hello"
     world
布尔值
    - true
    - false
整数
    12
浮点数
    12.43
NULL 
    在yml中使用 ~ 表示

例子:

# 1
Websites:
 YAML: yaml.org 
 Ruby: ruby-lang.org 
 Python: python.org 
 Perl: use.perl.org 
# 使用json表示
{"Websites":{"YAML":"yaml.org", "Ruby":"ruby-lang.org","Python":"python.org","Perl":"use.perl.org"}}

# 2
languages:
 - Ruby
 - Perl
 - Python 
 - c
# 使用json表示
{"languages":["Ruby", "Perl", "Python", "c"]}
 
# 3
-
  - Ruby
  - Perl
  - Python 
- 
  - c
  - c++
  - java
# 使用json表示
[["Ruby", "Perl", "Python"], ["c", "c++", "Java"]]

# 4
-
  id: 1
  name: huang
-
  id: 2
  name: liao
# 使用json表示
[{"id":1, "name":"huang"}, {"id":2, "name":"liao"}]

五:docker-compose配置文件
1.一份标准配置文件应该包含三大部分:

  • version
  • services
  • networks
# common.yml
version: '2'
services:
  webapp:   # 服务名
    environment:    # 环境变量.environment 和 Dockerfile 中的 ENV 指令一样会把变量一直保存在镜像、容器中。
      RACK_ENV: development  # 规范:变量名大写,获取变量的
      SHOW: 'true'
      SESSION_SECRET: docker-compose
# test.yaml
version: '2'    # docker-compose的版本

services:       # 服务
  web:          # 服务名, 自己起的, 每个服务器名对应一个启动的容器
    image: nginx:latest # 容器是基于那个镜像启动的,如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
    container_name: myweb # 容器名字
    extends:    # 在一个yaml文件中引用另外一个yaml中的设置
      file: common.yml
      service: webapp
    command: /urs/local/nginx -g daemon off # docker容器启动之后, 执行的命令,启动nginx服务
    networks:   # 容器启动之后,要加入的网络
      - network1
    ports:      # 端口映射
      - "6789:8080"   # 6789: 宿主机端口, 8080: 容器端口
      - "3000"  # 宿主机的端口是随机分配的, 3000是容器开发的对外端口  // -P
      - "127.0.0.1:8001:8001"
      # - 12:12    yaml解析的时候如果60以下, 解析会有问题
    extra_hosts:   #添加主机映射, 域名和IP地址对应关系,最终被添加到hosts文件中  /etc/hosts
      - "host1:162.242.195.82"    # 主机名(域名):IP地址
      - "host2:50.31.209.229"
      # 域名解析: 
       #    - 先查本地hosts文件
       #    - 本地的dns缓存
       #    - 通过dns服务器查询
    volumes:    #数据卷挂载,重点
      - /opt/data:/var/lib/mysql  # 按照绝对路径映射
      - ./cache:/tmp/cache  # 相对路径的映射,docker run命令只允许使用绝对路径映射,不允许使用相对路径映射
                                        # ./目录是docker-compose配置文件所在的目录,如果是相对路径, ./是必须要写的, 或者../,当前路径的上一级
      - /home/go/configs:/etc/configs/:ro   # 指定容器中对文件的操作权限, 默认rw
      - ../temp/a.txt:/temp/b.sh  # 文件映射
    volumes_from:   #数据卷容器挂载,非重点
      # 服务名字
      - service_name  # 服务名
      - service_name:ro 
      #或者容器名
      - container:container_name  # 挂载容器
      - container:container_name:rw
 
  sql:         # 服务名, 自己起的, 每个服务器名对应一个启动的容器
    image: mysql
    volumes:
      - /home/test:/root/workdir 
    ports:
      - 9999:3306
    networks:
      - network1
      - network2
    depend_on:       # 解决了容器的依赖、启动先后的问题。
      - web
      - redis
      
  redis:      # 服务名, 自己起的, 每个服务器名对应一个启动的容器
    image: redis
    volumes:
      - /home/go/redis.conf:/redis/redis.conf
    ports:
      - 8989:6379
    networks:
      - network1
 
networks:    #声明网络
  network1: # 网络名
    driver: bridge # 网络驱动, 可以省略
  network2  # 网络名
    driver: bridge

六:docker-compose配置文件

1.compose服务启动、关闭、查看

前提条件: docker-compose.yaml (默认名)
# 启动docker容器
docker-compose up
    参数: -d : 以守护进程的方式运行
# 如果配置文件叫 a.yml
docker-compose -f a.yml up

# 关闭, 删除容器, 删除网络, 删除挂载的数据卷
docker-compose down
# 如果配置文件叫 a.yml
docker-compose -f a.yml down

# 查看 通过docker-compose启动的容器
docker-compose ps
# 如果配置文件叫 a.yml
docker-compose -f a.yml ps

2.容器开启、关闭、删除

# 启动某一个容器
docker-compose start 服务名
# 容器的关闭
# 关闭指定的容器
docker-compose stop 服务名
# 删除 -> 删除的是关闭的容器
docker-compose rm 服务名

你可能感兴趣的:(3.1docker-compose)