1.不支持制表符 tab 键缩进,需要使用空格缩进
2.缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
3.字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -
4.用 # 号注释
5.如果包含特殊字符用单引号 ‘ ’ 引起来会作为普通字符串处理,双引号“ ”特殊字符作为本身想表示的意思
6.布尔值必须用引号 “ ” 括起来
7.大小写敏感
8.通过缩进表示层关系
对象 | 键值对的集合 |
---|---|
数组 | 一组按次序排列的值,又称序列 |
纯量 | 单个的,不可再分的值 |
示例:
对象: 键值对的字典
animal: pets
数组: 一组按次序排列的列表
- cat
- dog
- goldfish
布尔值
debug: "true"
debug: "false"
#Yaml示例
languages: #序列的映射
- Java
- Golang
- Python
websites: #映射的映射
Baidu: www.baidu.com
Wangyi: www.163.com
Souhu: www.souhu.com
#或者
languages: ["Java","Golong","Python"]
websites:
Baidu:
www.baidu.com
Wangyi:
www.163.com
Souhu:
www.souhu.com
#Json格式
{
languages: [
'Java',
'Golong',
'Python',
],
websites: [
Baidu: 'www.baidu.com',
Wangyi: 'www.163.com',
Souhu: 'www.souhu.com',
]
}
yum install -y tree
tree /opt/compose_nginx
/opt/compose_nginx/
├── docker-compose.yml #创建模板脚本
├── nginx
│?? ├── Dockerfile #创建容器脚本
│?? ├── nginx-1.12.0.tar.gz #复制源码包
│?? └── run.sh #启动服务脚本
└── wwwroot
└── index.html #站点网页
#下载
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#或者已下载过直接从宿主机传入到/opt目录下
[root@localhost ~]# mv docker-compose /usr/local/bin/
#安装
[root@localhost ~]# chmod +x /usr/local/bin/docker-compose
[root@localhost ~]# docker-compose --version
docker-compose version 1.21.1, build 5a3f1a3
#查看版本
[root@localhost ~]# docker-compose --version
docker-compose version 1.21.1, build 5a3f1a3
字段 | 描述 |
---|---|
build | 指定Dockerfile文件名(要指定的Dockerfile文件需要在build标签的子级标签中用dockerfile标签指定) |
dockerfile | 构建镜像上下文路径 |
context | 可以是dockerfile路径,或者是执行git 仓库的url地址 |
image | 指定镜像(已存在) |
command | 执行命令,会覆盖容器启动后默认执行的命令(会覆盖Dockerfile的CMD指令) |
container_name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量 |
deploy | 指定部署和运行服务相关配置,只能在Swarm模式使用 |
environment | 指定部署和运行服务相关配置,只能在Swarm模式使用 |
networks | 加入网络,引用顶级networks下条目 |
network-mode | 设置容器的网络模式 |
ports | 设置容器的网络模式 |
volumes | 挂载一个宿主机目录或命令卷到容器,命名卷要在顶级volumes 定义卷名称 |
volues_from | 从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,(仅版本‘2’支持) |
hostname | 容器主机名 |
links | 连接到另一个容器,- 服务名称[ : ] |
privileged | 用来给容器root权限,注意是不安全的,true | false |
restart | 重启策略,定义是否重启容器;**1.**no,默认策略,在容器退出时不重启容器。**2.**on-failure,在容器非正常退出时(退出状态非0),才会重启容器。**3.**on-failure:3,在容器非正常退出时重启容器,最多重启3次。**4.**always,在容器退出时总是重启容器。**5.**unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器 |
depends_on | 此标签用于解决容器的依赖,启动先后问题。如启动应用容器,需要先启动数据库容器php:depends_on:- apache- mysql |
在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,可能会因为容器依赖问题而启动失败
例如:在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends on标签用于解决容器的依赖、启动先后的问题
字段 | 描述 |
---|---|
build | 重新构建服务 |
ps | 列出容器 |
up | 创建和启动容器 |
exec | 在容器里面执行命令 |
scale | 指定一个服务容器启动数量 |
top | 显示正在运行的容器进程 |
logs | 查看服务容器的输出 |
down | 删除容器、网络、数据卷和镜像 |
stop/start/restart | 停止/启动/重启服务 |
#1.准备依赖文件
#创建compose目录,创建Dockerfile文件
[root@localhost ~]# mkdir -p /opt/compose_nginx/nginx /opt/compose_nginx/wwwroot
[root@localhost ~]# cd /opt/compose_nginx/nginx/
#将nginx-1.12.2.tar.gz拖入到此目录下
[root@localhost nginx]# pwd
/opt/compose_nginx/nginx
#2.运行脚本文件创建
[root@localhost nginx]# vim run.sh
[root@localhost nginx]# cat run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
#3.创建Dockerfile文件
[root@localhost nginx]# vim Dockerfile
[root@localhost nginx]# cat Dockerfile
#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image <bxh>
#添加环境包
RUN yum -y update
RUM yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#上传nginx软件压缩包,并解压
ADD nginx-1.12.2.tar.gz /usr/local/src/
#指定工作目录
WORKDIR /usr/local/src/nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx,conf #关闭 nginx 在后台运行
#添加宿主机中run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
#3.创建后面用于测试的站点目录,创建compose的yml文件,编写配置文件docker-compose.yml
[root@localhost nginx]# echo "this is test web
" > /opt/compose_nginx/wwwroot/index.html
[root@localhost nginx]# vim /opt/compose_nginx/docker.compose.yml
[root@localhost nginx]# cat /opt/compose_nginx/docker.compose.yml
version: '3'
services:
nginx:
hostnmae: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 1007:80
- 1008:443
networks:
- lnmp
ipv4_address: 172.18.0.10
volumes:
- ./wwwroot:/usr/local/nginx/html
networkes:
lnmp:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
[root@localhost compose_nginx]# pwd
/opt/compose_nginx
[root@localhost compose_nginx]# docker-compose -f docker-compose.yml up -d
----------------------------------------------------------------------------------------------------------
-f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml
-p, --project-name NAME :指定项目名称,默认使用目录名称
-d :在后台运行
----------------------------------------------------------------------------------------------------------
————————————————
[root@localhost compose_nginx]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
790737e6d5de compose_nginx_nginx "/run.sh" 2 minutes ago Up 2 minutes 0.0.0.0:1007->80/tcp, :::1007->80/tcp, 0.0.0.0:1008->443/tcp, :::1008->443/tcp web1
[root@localhost compose_nginx]# pwd
/opt/compose_nginx
[root@localhost compose_nginx]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------
web1 /run.sh Up 0.0.0.0:1008->443/tcp,:::1008->443/tcp,
0.0.0.0:1007->80/tcp,:::1007->80/tcp
浏览器访问:http://192.168.113.125:1007
web1 /run.sh Up 0.0.0.0:1008->443/tcp,:::1008->443/tcp,
0.0.0.0:1007->80/tcp,:::1007->80/tcp
浏览器访问:http://192.168.113.125:1007
[外链图片转存中...(img-dvnX0G4Y-1663501984103)]