docker-compose单机容器集群编排工具

server/2024/9/24 16:22:25/

docker-compose%20%E7%AE%80%E4%BB%8B">一 docker-compose 简介

使用一个Dockerfile模板文件可以定义一个单独的应用容器可实现在单机上对容器集群编排管理

的工具),如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,给大家介绍

Docker 官方产品 Docker Compose 。

docker swarm(管理跨节点)

Dockerfile可以让用户管理一个单独的应用容器;而Compose则允许用户在一个模板(YAML格

式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加

上后端的数据库服务容器等。

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

Docker-Compose将所管理的容器分为三层

  • 分别是工程(project)
  • 服务(service)
  • 以及容器(container)

Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件

等)组成一个工程,若无特殊指定工程名即为当前目录名。

一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中可

包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服

务发现及负载均衡,比如 Consul。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE

或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器

使用Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会

碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器

本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关

联的应用容器为一个项目(project)。

Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要

所操作的平台支持Docker API, 就可以在其上利用Compose来进行编排管理。

docker-compose%E7%9A%84%E4%BC%98%E5%8A%BF%EF%BC%9A">通过docker-compose的优势:

使用 Docker Compose命令可以方便地管理多个容器

可以解决容器之间的依赖关系,同时启动一个 Web 服务器容器和一个数据库容器,并在它们之间

建立网络连接,再通过depends_on实现php依赖于nginx和mysql服务的启动顺序;

Docker Compose 还支持自定义网络,使得容器可以在不同的网络中进行通信;

docker-compose%E7%9A%84%E4%B8%89%E5%A4%A7%E6%A6%82%E5%BF%B5">docker-compose的三大概念

项目project -> 包含一个或多个服务service -> 包含一个或多个容器container的镜像、端口映射、

环境变量、依赖关系等启动参数

二 compose 部署

1 Docker Compose 环境安装

#注意必须是在安装docker的基础上
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#下载安装包单独安装DockerCompose
chmod +x /usr/local/bin/docker-compose
#docker-compose添加执行权限
docker-compose --version
#查看docker-compose版本
[root@docker ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  模板  图片  下载  桌面
docker-compose   公共                  视频  文档  音乐
[root@docker ~]# mv docker-compose /opt
[root@docker opt]# chmod +x docker-compose
[root@docker opt]# mv docker-compose /usr/local/bin/
[root@docker opt]# docker-compose --version
docker-compose version 1.25.0-rc4, build 8f3c9c58

docker-compose%E7%9A%84%E9%85%8D%E7%BD%AE%E6%A8%A1%E6%9D%BF%E6%96%87%E4%BB%B6yaml%E6%96%87%E4%BB%B6%E7%9A%84%E7%BC%96%E5%86%99">2 docker-compose的配置模板文件yaml文件的编写

YAML是一种标记语言,可以很直观的展示数据序列化格式,可读性很高。类似于json数据描述语

言,语法比json简单很多,关于yaml数据格式:

YAML数据结构通过缩进来表示字段的层级

连续的项目通过减号来表示,

键值对用冒号分隔,

数组用中括号 [] 括起来,

hash 用花括号 {} 括起来

3 yaml的注意事项:

大小写敏感

通过缩进表示层级关系

不支持制表符 tab 键缩进,只能使用空格缩进

缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格

用 # 号注释

符号字符后缩进1个空格,如冒号 :  、逗号 ,  、横杠 - 

如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思

4 数据结构:

对象映射: 键值对的字典 animal: pets

序列数组: 一组按次序排列的列表

CatDogGoldfish

["Cat", "Dog", "Goldfish"]

5 布尔值

debug: truedebug: false

6 对象object类型类型

#yaml格式用 空格缩进 表示字段的层级关系,同一层字段要靠左对齐一级字段:二级字段1:                    二级字段2:三级字段: human:name:姓: "王"ming: - 文宇- 飞龙age: 24sex: 男height: 180

7 文本块

value:              ->  value: "helloworld"hello worldvalue: |            -> value: "hello\nworld"              #key: |  表示保留文本块里的换行符hello worldvalue: |-           -> value: 相当于 echo -n "helloworld"hello        worldvalue: |+           -> value: "hello\nworld\n"hello    world 

8 锚点

name: &a yaml       #锚点,相当于 a="yaml" book: *a            #引用,相当于 echo $a     book: yaml   

9 关于json格式:

 json文件格式:文件名格式通常是以 .json 为后缀,用 大括号{} 表示字段的层级关系,每层字段除

了最后一个字段都要用逗号,结尾,特性:易于api接口解析

human:name:姓: "王"ming: - 文宇- 思聪age: 24sex: 男height: 180{"human": {                      #json格式用 大括号{} 表示字段的层级关系,每层字段除了最后一个字段都要用逗号,结尾"name": {"姓": ["王"],"名":["文宇", "思聪"]},"age": ["24"],"sex": ["男"],"height": ["180"]}
}

docker-compose%E9%85%8D%E7%BD%AE%E6%A8%A1%E6%9D%BF%E6%96%87%E4%BB%B6%E5%B8%B8%E7%94%A8%E7%9A%84%E5%AD%97%E6%AE%B5%20%E4%B8%8Edocker%20run%E7%9A%84%E9%80%89%E9%A1%B9%E5%92%8C%E5%8F%82%E6%95%B0%E5%AF%B9%E6%AF%94">10 docker-compose配置模板文件常用的字段

image               使用本地镜像或从仓库拉取镜像创建容器
build              使用dockerfile现场构建镜像创建容器
context指定dockerfile文件所在的目录
dockerfile指定dockerfile的文件名称
command             指定容器启动命令,会覆盖镜像中的CMD指令
container_name      相当于指定容器的名称  --name 
environment        相当于指定容器的环境变量 -e  --env
network_mode        相当于指定容器的网络 --network
networks          指定加入的网络和IP    --IP以及自定义网络模式
ports               指定端口映射 -p
volumes            指定数据卷   -v 或者自定义顶级卷(版本3)
volumes_from        --volumes-from ,版本3不支持
 hostname  指定容器的主机名  -h  --hostname
sysctls             指定容器的内核参数  --sysctl
links               指定容器的名称以及连接别名,可以通过容器名称通信 --link
privileged          容器拥有真正的root权限 不建议使用  不安全 --privileged

指定重启策略  --restart

设置重启策略,no,always,no-failure,unless-

stopped


no,默认策略,在容器退出时不重启容器


on-failure,在容器非正常退出时(退出状态非0),才

会重启容器


on-failure:3,在容器非正常退出时重启容器,最多重启

3次。
always,在容器退出时总是重启容器


unless-stopped,在容器退出时总是重启容器,但是不

考虑在 Docker 守护进程启动时就已经停止了的容器
 

restart

docker-compose%E5%91%BD%E4%BB%A4%E7%9A%84%E9%80%89%E9%A1%B9%E5%92%8C%E5%8F%82%E6%95%B0">11 docker-compose命令

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

12 Docker Compose 文件结构

(1)准备依赖文件

(2)编写nginx页面 

[root@docker opt]# cd nginx/
[root@docker nginx]# ls
Dockerfile  nginx-1.22.0.tar.gz  run.sh
[root@docker nginx]# vim Dockerfile 
[root@docker nginx]# ls
Dockerfile  nginx-1.22.0.tar.gz  run.sh
[root@zbx-proxy wwwroot]# pwd
/opt/compose_nginx/wwwroot
[root@zbx-proxy wwwroot]# echo "<h1>this is nginx web</h1>" > /opt/compose_nginx/wwwroot/index.html
[root@docker wwwroot]# cat index.html 
<h1>this is test nginx</h1>[root@docker ~]# cd /opt/docker-compose_nginx/
[root@docker docker-compose_nginx]# ls
wwwroot

(3)创建网页目录和文件

[root@zbx-proxy nginx]# vim Dockerfile
#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image <mcb>
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#上传nginx软件压缩包,并解压
ADD nginx-1.25.0.tar.gz /usr/local/src/
#指定工作目录
WORKDIR /usr/local/src/nginx-1.25.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make -j4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]

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

 [root@docker docker-compose_nginx]# vim docker-compose.yml

nginx:container_name: web01hostname: nginxbuild:context: ./nginxdockerfile: Dockerfileports:- 200:80- 201:443networks:mcb:ipv4_address: 172.18.0.13volumes:- ./wwwroot:/usr/local/nginx/html
networks:mcb:driver: bridgeipam:config:- subnet: 172.18.0.0/16

启动docker-compose.yul文件

[root@docker docker-compose_nginx]# docker-compose  -f docker-compose.yml up -d

[root@localhost compose_nginx]# docker-compose -f docker-compose.yaml up -d
# -f, --file FILE:使用特定的compose模板文件,默认为 docker-compose.yaml
# -p, --project-name NAME:指定项目名称,默认使用目录名称
# -d:在后台运行

 访问检测:

 三 docker Compose 编写nginx+tomcat镜像

1 编写docker-compose.yul文件

version: '3'
services:nginx:container_name: web01hostname: nginxbuild:context: ./nginxdockerfile: Dockerfileports:- 200:80- 201:443networks:mcb:volumes:- ./wwwroot:/usr/local/nginx/html
tomcat:hostname: tomcatbuild:context: ./tomcat
dockerfile: Dockerfileports:- 8080:8080networks:tm:ipv4_address: 172.18.0.18
networks:mcb:driver: bridgeipam:config:- subnet: 172.18.0.0/16

2 写tomcat容器的dokerfile文件 

[root@zbx-proxy compose_nginx]# vim Dockerfile 

FROM centos:7
MAINTAINER tomcat image <mcb>
ADD jdk-8u291-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_291 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $JAVA_HOME/bin:$PATH
ADD apache-tomcat-9.0.16.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-9.0.16 /usr/local/tomcat
EXPOSE 8080
#CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
CMD ["/usr/local/tomcat/bin/startup.sh","start"]

删除镜像 

 

删除network 

创建并运行 


http://www.ppmy.cn/server/27009.html

相关文章

[华为OD] C卷 5G网络 现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站 200

题目 现需要在某城市进行5G网络建设&#xff0c;已经选取N个地点设置5G基站&#xff0c;编号固定为1到N,接 下来需要各个基站之间使用光纤进行连接以确保基站能互联互通&#xff0c;不同基站之间架设光纤的成 本各不相同&#xff0c;且有些节点之间已经存在光纤相连&#…

品牌百度百科词条需要什么资料?

品牌百度百科词条是一个品牌的数字化名片&#xff0c;更是品牌历史、文化、实力的全面展现。 作为一个相当拿得出手的镀金名片&#xff0c;品牌百度百科词条创建需要什么资料&#xff0c;今天伯乐网络传媒就来给大家讲解一下。 一、品牌基本信息&#xff1a;品牌身份的明确 品…

C语言字符串(0基础到深入剖析)---字符串系列合集(函数+指针+数组)

前言 本篇旨在帮助不了解字符串或者逻辑梳理不够透彻的伙伴们理出一条脉络。选择能看懂的部分即可&#xff0c;建议收藏&#xff0c;后期学习完C语言方便回顾。 适用范围&#xff1a;0基础C语言&#xff08;刚学字符串&#xff09;- 学过函数 - 学过指针 ---大致了解了数据内…

pyaibote--安卓自动化环境配置与基础的使用方法

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 pyaibote介绍 pyaibote是一个全新&#xff0c;强大的办公自动化库。 支持找图&#xff0c;识别像素等操作。 比appium快十倍。 文章介绍 有大佬给我提到这个库后&#xff0c;我来查看。然后发现这个库太新了&am…

Linux 第十七章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

从零开始学C语言系列之第三章《putchar》

往期回顾 【第一章】《认识C语言》 【第二章】C语言概述及基本知识1 【第二章】C语言概述及基本知识2 【第三章】字符串和格式化输入/ 输出 【第三章】 printf 【第三章】 scanf 文章目录 往期回顾输出返回值 输出 putchar() → 字符数据输出 输出字符数据是可以使用 putchar…

【小梦C嘎嘎——启航篇】C++四大类型转换

&#x1f60e; 前言&#x1f64c;C四大类型转换什么是类型转换C语言中的类型转换为什么C要嫌弃C语言的类型转换&#xff1f;自行搞一套呢&#xff1f;C强制类型转换1、static_cast2、reinterpret_cast3、const_cast4、dynamic_cast为什么要支持向下转呢&#xff1f; RTTI 总结撒…

第七篇:专家级指南:Python异常处理的艺术与策略

专家级指南&#xff1a;Python异常处理的艺术与策略 1 引言 在编程的世界中&#xff0c;异常处理是一门必修的艺术。它不仅涉及到程序的错误处理&#xff0c;更广泛地影响着软件的稳定性、健壮性和用户体验。本篇文章将深入探讨Python中的异常处理&#xff0c;展示如何通过精心…