目录
01 12-yaml文件书写规则01 12-yaml文件书写规则
10 21-docker-compose的start stop rm命令
01 12-yaml文件书写规则01 12-yaml文件书写规则
2. docker-compose
Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker
Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用
docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用
多个容器进行开发的场景。
知道yaml文件格式
docker-compose工具工作的时候需要使用一个配置文件
默认的名字: docker-compose.yaml/yml
docker-compose中常用关键字
docker-compose操作命令
启动, 关闭, 查看
02 13-yaml中的数据类型
2.1 docker-compose
的安装
#
# 当一个镜像A被作为其他镜像B的基础镜像时,这个触发器才会被执行,
# 新镜像B在构建的时候,会插入触发器中的指令。
ONBUILD [command]
# 原始镜像 -> 纯净版
-> 修改 ONBUILD ["echo", "hello,linux"]
# 基于原始镜像制作新镜像 -> 镜像A
-> 启动镜像A -> 不会输出hello, linux
# 基于镜像A制作了镜像B
-> 启动镜像B -> 会输出 hello, linux
1
2
3
4
5
6
7
8
9
10
11
12
构建新镜像的时候不使用缓存机制
docker build -t 新镜像名:版本号 --no-cache
1
2
2.2 yaml
文件格式
#
YAML有以下基本规则: 1、大小写敏感 2、使用缩进表示层级关系 3、禁止使用tab缩进,
只能使用空格键
4、缩进长度没有限制(只能使用空格缩进),只要元素对齐就表示这些元素属于一个层级。 5、使用#表示注
释 6、字符串可以不用引号标注
"字符串"
'字符串'
字符串
123 -> 整数
123a
yaml中的三种数据结构
map - 散列表
list - 数组
scalar - 纯量
#安装依赖工具
sudo apt-get install python-pip -y
#安装编排工具
sudo pip install docker-compose
#查看编排工具版本
sudo docker-compose version
#查看命令帮助
docker-compose --help
03 14-docker-compose配置文件格式
04 15-docker-compose中的关键字
2.2 yaml
文件格式
#
YAML有以下基本规则: 1、大小写敏感 2、使用缩进表示层级关系 3、禁止使用tab缩进,
只能使用空格键
4、缩进长度没有限制(只能使用空格缩进),只要元素对齐就表示这些元素属于一个层级。 5、使用#表示注
释 6、字符串可以不用引号标注
"字符串"
'字符串'
字符串
123 -> 整数
123a
yaml中的三种数据结构
map - 散列表
list - 数组
scalar - 纯量
05 16-prots和volumes关键字的使用
字符串
布尔值
- true
- false
整数
浮点数
- 12.1
NULL
- 使用 ~ 来表示
1
2
3
4
5
6
7
8
9
# 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" }}
# 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"}]
06 17-volumes_from的使用
2.3 docker-compose
配置文件
#
一份标准配置文件应该包含
version
services
networks
version: '2' # docker-compose的版本
services: # 服务
web: # 服务名, 自己起的, 每个服务器名对应一个启动的容器
image: nginx:latest # 容器是基于那个镜像启动 的
container_name: myweb
ports: # 向外开发的端口
- 8080
networks: # 容器启动之后所在的网络
- front-tier
environment: # ENV
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET: docker-compose
command: tree -L 3
extends:
file: common.yml
service: webapp
lb:
image: dockercloud/haproxy
ports:
- 80:80
networks:
- front-tier
- back-tier
volumes: # 数据卷挂载 docker run -v xxxx:xxxx
- /var/run/docker.sock:/var/run/docker.sock
depend_on:
- web
- redis
- lb
redis:
image: redis
networks:
- back-tier
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
07 18-extends的使用
一份标准配置文件应该包含
version
services
networks
version: '2' # docker-compose的版本
services: # 服务
web: # 服务名, 自己起的, 每个服务器名对应一个启动的容器
image: nginx:latest # 容器是基于那个镜像启动 的
container_name: myweb
ports: # 向外开发的端口
- 8080
networks: # 容器启动之后所在的网络
- front-tier
environment: # ENV
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET: docker-compose
command: tree -L 3
extends:
file: common.yml
service: webapp
lb:
image: dockercloud/haproxy
ports:
- 80:80
networks:
- front-tier
- back-tier
volumes: # 数据卷挂载 docker run -v xxxx:xxxx
- /var/run/docker.sock:/var/run/docker.sock
depend_on:
- web
- redis
- lb
redis:
image: redis
networks:
- back-tier
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44三大部分,其中最关键的就是 services 和 networks 两个部分,下面先来看 services 的书写规则。
Image
在 services 标签下的第二级标签是 web,这个名字是用户自己自定义,它就是服务名称。 image 则是指定
服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
command
使用 command 可以覆盖容器启动后默认执行的命令。
container_name
容器启动之后的名字
如何查看:
docker ps
depends_on
一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失
败。例如在没启动数据库容器的时候启动了应用容器,这时候应用容器会因为找不到数据库而退出,为了
避免这种情况我们需要加入一个标签,就是 depends_on,这个标签解决了容器的依赖、启动先后的问题。
environment
environment 和 Dockerfile 中的 ENV 指令一样会把变量一直保存在镜像、容器中。
services:
web:
image: 镜像名/镜像ID
1
2
3
command: tree -L 3
# 也可以写成类似 Dockerfile 中的格式:
command: [tree, -L, 3]
08 19-networks的使用
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET: docker-compose
1
2
3
4
ports:
- "3000" # 宿主机的端口是随机分配的, 3000是容器开发的对外端口 // -P
- "8000:8000" -> 一般这样写就可以
- "127.0.0.1:8001:8001"
- 55:55 -> 不推荐这样写
1
2
3
4
5
docker run -v /home/go:/xxx
# 宿主机或容器的映射路径如果不存在, 会自动创建出来
volumes:
# 这是宿主机目录, 容器的映射目录会自动创建
- /var/lib/mysql
# 按照绝对路径映射
- /opt/data:/var/lib/mysql
# 相对路径的映射
# ./ 目录是docker-compose配置文件所在的目录
# 如果是相对路径, ./是必须要写的, ../
- ./cache:/tmp/cache
# 指定容器中对文件的操作权限, 默认rw
- /home/go/configs:/etc/configs/:ro
# 文件映射
- ./temp/a.txt:/temp/b.sh
09 20-docker-compose启动和关闭容器
volumes_from
从其它容器或者服务挂载数据卷,可选的参数是 :ro或者 :rw,前者表示容器只读,后者表示容器对数据卷
是可读可写的。默认情况下是可读可写的。
extends
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET: docker-compose
1
2
3
4
ports:
- "3000" # 宿主机的端口是随机分配的, 3000是容器开发的对外端口 // -P
- "8000:8000" -> 一般这样写就可以
- "127.0.0.1:8001:8001"
- 55:55 -> 不推荐这样写
1
2
3
4
5
docker run -v /home/go:/xxx
# 宿主机或容器的映射路径如果不存在, 会自动创建出来
volumes:
# 这是宿主机目录, 容器的映射目录会自动创建
- /var/lib/mysql
# 按照绝对路径映射
- /opt/data:/var/lib/mysql
# 相对路径的映射
# ./ 目录是docker-compose配置文件所在的目录
# 如果是相对路径, ./是必须要写的, ../
- ./cache:/tmp/cache
# 指定容器中对文件的操作权限, 默认rw
- /home/go/configs:/etc/configs/:ro
# 文件映射
- ./temp/a.txt:/temp/b.sh
volumes_from:
- service_name # 服务名
- service_name:ro
- container:container_name # 挂载容器
- container:container_name:rw
10 21-docker-compose的start stop rm命令
# 在一个yaml文件中引用另外一个yaml中的设置
extends:
file: common.yml
service: webapp
# docker-compose.yaml
version: '2' # docker-compose的版本
services: # 服务
web: # 服务名, 自己起的, 每个服务器名对应一个启动的容器
extends:
file: sub-compose.yaml
service: demo1
web1: # 服务名, 自己起的, 每个服务器名对应一个启动的容器
image: nginx:latest # 容器是基于那个镜像启动 的
container_name: myweb
ports: # 向外开发的端口
- 8080
networks: # 容器启动之后所在的网络
- front-tier
- back-tier
environment: # ENV
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET: docker-compose
command: tree -L 3