一: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 服务名