Doceker-compose——容器群集编排管理工具

目录

Docker-compose

[1、Docker-compose 的三大概念](#1、Docker-compose 的三大概念)

2、YAML文件格式及编写注意事项

[1)使用 YAML 时需要注意下面事项](#1)使用 YAML 时需要注意下面事项)

2)ymal文件格式

3)json格式

[3、Docker Compose配置常用字段](#3、Docker Compose配置常用字段)

4、Docker-compose的四种重启策略

[5、Docker Compose 常用命令](#5、Docker Compose 常用命令)

6、Docker-compose配置文件的编写

[1)下载Docker compose](#1)下载Docker compose)

[2)安装Docker compose](#2)安装Docker compose)

3)准备依赖文件

4)编写配置文件docker-compose.yml

5)启动docker-compose


Docker-compose

docker-compose 实现在单机上对容器集群编排管理的工具。使用python开发的,能运行docker的平台也都能用docker-compose编排管理容器。

本质就是在yaml格式 的docker-compose配置模板文件里定义多个容器的启动参数依赖关系,并使用docker-compose根据这个模板文件的配置来启动和管理容器集群

1、Docker-compose 的三大概念

项目project -> 包含一个或多个服务service -> 包含一个或多个容器的镜像、映射端口、环境变量等启动参数

  • 默认使用项目的目录名做project项目名,支持使用 -p 或 --project-name 来指定项目名
  • 在项目目录里要包含一个 docker-compose 配置模板文件,默认为docker-compose.yml,支持使用 -f 或 --file 来指定项目的配置模板文件
  • 在配置模板文件里要包含一个或者多个服务,每个服务包含启动容器的名称、镜像、映射端口、环境变量、挂载点、网络模式、依赖关系等容器启动的配置参数

2、YAML文件格式及编写注意事项

YAML 是一种标记语言 ,它可以很直观的展示数据序列化格式可读性高 。类似于 json 数据描述语言,语法比 json 简单的很多。YAML 数据结构 通过缩进 来表示,连续的项目 通过减号 来表示,键值对冒号 分隔,数组中括号 [] 括起来,hash花括号 {} 括起来。

1)使用 YAML 时需要注意下面事项

  • 大小写敏感
  • 通过缩进表示层级关系
  • 不支持制表符 tab 键缩进,只能使用空格缩进
  • 缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
  • 用 # 号注释
  • 符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -
  • 如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思

2)ymal文件格式

文件名格式以 .yml 或者.yaml 为后缀,用 空格缩进表示字段的层级关系,可读性高,易于人类管理。

#一个字段key有多个值的表达式
横向写法:
test: ["test1", "test2", "test3"]

纵向写法:
ntest:
- "test1"
- "test2"
- "test3"

#多级字段的格式
顶级/一级字段:
    二级字段1: ["值1", "值2"]
    二级字段2: 
	    三级字段: 值     对象object类型

value:            value: 相当于echo helloworld!
  hello
  world!

value: |          value: 相当于echo -e "hello\nworld!"
  hello
  world!

value: |-         value: 相当于echo -n helloworld!
  hello
  world!
  
value: |+         value: 相当于echo -e "hello\nworld!\n"
  hello
  world!

value: >          value: 相当于echo "hello world!"
  hello
  world!
  
name: &a zhangsan     相当于 a=yaml
book: *a              相当于 echo $a , book: zhangsan

3)json格式

文件名格式以 .json 为后缀,用 {} 表示字段的层级关系,程序接口解析效率高

{ "字段": "值"}
{ "debug": true }          布尔值类型
{ "ht": "dashuaige" }     字符串类型

{
  "heitui01": ["ht", "shellking", "paidaxing"],
  "heitui02": ["zhangsan", 
           "lisi", 
		   "wangwu"]
}


{
  "websites": {                      一级字段
    "memory": "512M",                二级字段
	"disk": "100G",
    "cpu": {                         三级字段
	  "name": ["inter", "amd"]
	}
  }
}

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,no-failure,unless-stopped |
| depends_on | 定义服务之间依赖关系 |

4、Docker-compose的四种重启策略

1)no:默认策略,在容器退出时不重启容器。

2)always:在容器退出时总是重启容器。

3)no-failure:在容器非正常退出时(退出状态非0),才会重启容器。

4)unless-stopped:在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。

5、Docker Compose 常用命令

字段 描述
build 重新构建服务
ps 列出容器
up 创建和启动容器
exec 在容器里面执行命令
scale 指定一个服务容器启动数量
top 显示容器进程
logs 查看容器输出
down 删除容器、网络、数据卷和镜像
stop/start/restart 停止/启动/重启容器

6、Docker-compose配置文件的编写

docker-compose配置文件采用yaml文件格式编写,所以前面有介绍yaml文件格式

1)下载Docker compose

Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose

#下载
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

2)安装Docker compose

3)准备依赖文件

mkdir -p /data/compose_nginx/nginx /opt/compose_nginx/wwwroot
cd /data/compose_nginx/nginx
cp nginx-1.12.0.tar.gz ./

vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

vim Dockerfile
#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image <wl>
#添加环境包
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#上传nginx软件压缩包,并解压
ADD nginx-1.12.0.tar.gz /usr/local/src/
#指定工作目录
WORKDIR /usr/local/src/nginx-1.12.0
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"]
//方法二:
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]


echo "<h1>this is test web</h1>" > /opt/compose_nginx/wwwroot/index.html

4)编写配置文件docker-compose.yml

vim /data/compose_nginx/docker-compose.yml
version: '3'
services:
  nginx:
    container_name: web1
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 1216:80
      - 1217:443
    networks:
      lnmp:
        ipv4_address: 172.18.0.10
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  lnmp:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16

5)启动docker-compose

cd /data/compose_nginx/
docker-compose -f docker-compose.yml up -d    #启动docker-compose

相关推荐
梅见十柒7 分钟前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
运维&陈同学2 小时前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
O&REO2 小时前
单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南
云原生·容器·kubernetes
运维小文3 小时前
K8S资源限制之LimitRange
云原生·容器·kubernetes·k8s资源限制
wuxingge12 小时前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
志凌海纳SmartX13 小时前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总13 小时前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿14 小时前
k8s 集群安装
云原生·容器·kubernetes
Code_Artist14 小时前
Docker镜像加速解决方案:配置HTTP代理,让Docker学会科学上网!
docker·云原生·容器
何遇mirror14 小时前
云原生基础-云计算概览
后端·云原生·云计算