docker-compose
dockerfile模板文件可以定义一个独立的应用容器,如果需要多个容器就需要服务编排。服务编排有很多技术方案
docker-compose开源的项目实现对容器集群的快速编排
docker-compose将所管理的容器分为三层,分别为工程,服务,以及容器。docker-compose运行目录下的所有文件(docker-pompos.yum,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为每个当前目录名。一个共工程当中包含多个服务,每个服务中定义了容器的运行的镜像,参数,依赖、当一个服务中包括多个容器实例,docker-compose的工程默认配置文件默认为docker-compose.yml ,可以通过环境变量compose_file或-f自定义配置文件其定义了多个服务和容器
yaml文件格式及编写注意事项
yaml是一个标记语言,他可以很直观的展示数据序列化格式,可读性高。类似于json数据描述语言,语法比json简单的多。yaml数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组中括号[]括起来,hash用花括号{}括起来
使用yaml时需要注意
大小写敏感
通过缩进表示层级关系
不支持tab键缩进,只能使用空格缩进
缩进的空格数目不重要,但是相同层级左对齐
#注释
符号字符后缩进1个空格如冒号:逗号, 横杠-
如果包含特殊字符用(' ')引起来会作为普通字符串处理,双引号(“ ”);特殊字符做为本身想表示的意思name: "Hi,\nTom"
数据结构
对象映射:键值对的字典
animal:pets
序列数组:一组按次序排列的列表
pets:
- Cat
- Dog
- Goldfish
pets: ["Cat","Dog","Goldfish"]
布尔值
debug:true
debug:false
示例
# yaml 格式
true和false系统默认是布尔型
json格式及docker生产经验
| 保留文本中的换行
3。 Docker Compose配置常用字段字段
字段- - -描述
build 指定Dockerfile 文件名,要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定
dockerfile 构建镜像上下文路径
context 可以是 dockerfile 的路径,或者是指向 git 仓库的 url 地址
image 指定镜像
command 执行命令,覆盖容器启动后默认执行的命令
container_name 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量
deploy 指定部署和运行服务相关配置,只能在 Swarm 模式使用
environment 添加环境变量
networks 加入网终,引用顶级networks下条目
network_mode 设置容器的网络模式,如 host,bridge,..
ports 暴露容器端口,与 -p 相同,但端口不能低于 60
volumes 挂载一个宿主机目录或命令卷到容器,命名卷要在顶级 volumes 定义卷名称
volumes_from 从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,仅版本‘2’ 支持
hostname 容器主机名
sysctls 在容器内设置内核参数
links 连接到另外一个容器,- 服务名称[:服务别名]
privileged 用来给容器root权限,注意是不安全的,true | false
restart 设置重启策略,no,always, on-failure, unless-stopped
no,默认策略,在容器退出时不重启突器。
always,在容器退出时总是重启究器。
on-failure,在容器非正常退出时 (退出状态非0),才会重启容器
on-failure:3,在容器非正常退出时重启突器,
最多重启3次。
unless-stopped,在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器
volumes_from 从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,仅版本‘2’ 支持如果在版本3中也想实现从另一个服务或容器挂载卷可以
创建一个顶级的命名卷volumes:
db-data:
以命名卷为通道完成两个逻辑卷通信
networks:定义不同的网络域
不同网络域不能通信
docker compose ps查看用户名 创建时不要docker-compose -f docker-compose.yml -p -d 无-p项目名做名字 -p指定否则查找docker compose ps查找时也要指定
docker logs nginx-compose查看
docker-compose
command:镜像后面的启动命令
两个容器互相从另一个服务挂载
或者直接挂载宿主机的