容器的编排

什么是容器的编排?
就是让容器有序的启动并在启动的过程加以控制

docker-compose -f bainpaiwenjian.yul up 如果编排文件为默认名称docker-compose.yul则无需加参数 -f 以及 编排文件即
docker-compose up 因为它会自动寻找 docker-compose.yul文件,一般都会加-d 放在后台启动

下面在/opt 目录下创建以下4个文件

docker-compose.yml haproxy.cfg index1.html index2.html

[root@linux-node1 opt]# cat index1.html
web1
[root@linux-node1 opt]# cat index2.html
web2

[root@linux-node1 opt]# cat haproxy.cfg
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
stats uri /status

listen stats
bind 0.0.0.0:1080
mode http
stats enable
stats hide-version
stats uri /stats
stats auth admin:admin

frontend balancer
bind 0.0.0.0:80
default_backend web_backends

backend web_backends
balance roundrobin
server server1 web1:80 check
server server2 web2:80 check

[root@linux-node1 opt]# cat docker-compose.yml
web1:
image: nginx #定义镜像
expose: #容器内部开放的端口
- 80
volumes:
- /opt/index1.html:/usr/share/nginx/html/index.html #挂载 将/opt/index1.html 挂载给给容器

web2:
image: nginx
expose:
- 80
volumes:
- /opt/index2.html:/usr/share/nginx/html/index.html
haproxy:
image: haproxy
volumes:
- /opt/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg

links: #依赖,haproxy必须依赖于web1还有web2,如果web1 web2起不来,haproxy也不会工作
- web1
- web2
ports:
- "80:80"
- "7777:1080" 将haproxy中设置的1080端口映射到宿主机的7777端口

现在就可以运行编排工具了,生产环境要加上-d参数,使其在后台运行
node1 # docker-compose up
Starting 14ee8e7d111e_opt_web2_1 ... done
Starting 2ee1b18634d1_opt_web1_1 ... done
Recreating opt_haproxy_1 ... done
Attaching to 2ee1b18634d1_opt_web1_1, 14ee8e7d111e_opt_web2_1, opt_haproxy_1
14ee8e7d111e_opt_web2_1 | WARNING: no logs are available with the 'fluentd' log driver
2ee1b18634d1_opt_web1_1 | WARNING: no logs are available with the 'fluentd' log driver
haproxy_1 | WARNING: no logs are available with the 'fluentd' log driver

此时就可以访问192.168.56.11了,可以发现不停的刷新 可以看到haproxy开始起作用了,web1和web2会交替的显示,
然后再打开http://192.168.56.11:7777/stats 可以看到haproxy的状态,另外可以打开kibana查看日志

node1# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS

NAMES
844626e0de4d haproxy "/docker-entrypoint.…" 12 minutes ago Up 12 minutes

0.0.0.0:80->80/tcp, 0.0.0.0:7777->1080/tcp opt_haproxy_1
14ee8e7d111e nginx "nginx -g 'daemon of…" 2 hours ago Up 12 minutes 80/tcp

14ee8e7d111e_opt_web2_1
2ee1b18634d1 nginx "nginx -g 'daemon of…" 2 hours ago Up 12 minutes 80/tcp

2ee1b18634d1_opt_web1_1
此时我们停掉一台nginx主机
node1 # docker stop 2ee1b18634d1_opt_web1_1
再次刷新浏览器发现,只有web2了,说明haproxy工作没有问题,再进入haproxy的管理页面,发现其中的一台nginx已经挂了,
然后我们再把刚才停掉的主机启动

node1 # docker start 2ee1b18634d1_opt_web1_1
2ee1b18634d1_opt_web1_1
此时刷新浏览器又正常了

https://www.cnblogs.com/52fhy/p/5991344.html

记录 Docker 的学习过程 (单机编排)的更多相关文章

  1. 记录 Docker 的学习过程 (网络篇)

    打开2个会话,分别运行以下命令 # docker run -it -P --name nginx2 nginx #-P 端口随机映射 再打开一个会话查看 运行中的容器 # docker ps -aCO ...

  2. 记录 Docker 的学习过程 (自建私有仓库)

    私有仓库的创建 node1#wget http://harbor.orientsoft.cn/harbor-v1.4.0/harbor-offline-installer-v1.4.0.tgz nod ...

  3. 记录 Docker 的学习过程 (dockerfile自动制作镜像)

    自动制作镜像 通过编写dockerfile来自动创建镜像 #vi Dockerfile #编辑dockerfile文件,一定要以这个名字命名 #cat Dockerfile #导入哪个基础镜像FROM ...

  4. 记录 Docker 的学习过程 (数据挂载)

    docker 存储篇 容器中的存储是分层的, 在容器中,如果我们要创建一个文件,会在文件的最上层(可写层)创建 容器中内置的文件,默认来讲是只读的,只有自己创建的文件才是可写状态 比如说 /etc/p ...

  5. 记录 Docker 的学习过程 (日志篇)

    日志收集 elk 在node3上操作 docker pull sebp/elk:5610 node3# sysctl vm.max_map_count=262144 node3# docker run ...

  6. 记录 Docker 的学习过程 (网络篇之跨主机互通)

    下面从node3上操作node3# docker run -d -p 8500:8500 --name consul progrium/consul -server -bootstrap node3# ...

  7. 记录 Docker 的学习过程 (安装基础篇)

    docker 通过内核来实现 特点是效率高 1. centos7 三台(推荐2c 4g 最低 1c1g)2. 关闭防火墙 selinux3. 做好主机名解析,三台能互相ping通主机名host参考文件 ...

  8. 单机编排之Docker Compose

    当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且容器出错,这个时候推荐使用docker 单机编排工具docker compose,Docker Compose 是docker容器的一种 ...

  9. Docker入门篇(三)之docker-compose单机编排

    1.docker-compose的简介 docker-compose作为dokcer的官方编排工具,它可以让用户通过编写一个简单的模板文件,快速地创建和管理基于docker容器的应用集群.实现对doc ...

随机推荐

  1. git系列之---工作中项目的常用git操作

    0.本地git的安装 官网下载 1.git 配置 git config user.name  查看 用户名 git config user.email   查看 邮箱 git config --glo ...

  2. css中的盒子模型是什么?

    什么是CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周 ...

  3. C++ Primer抄书笔记(二)——变量和基本类型(下)

    四.const限定符[引用/指针/顶层/常量表达式] const对象值不变,必须初始化,能完成此type的大部分operation. 一般,多文件独立变量,编译初始化仅文件内有效: 除非,(条件:初值 ...

  4. ES6 - 基础学习(1): 开发环境搭建

    现在Chrome浏览器已经很好的支持ES6了,但有些低版本的浏览器或其他浏览器还是不支持ES6的语法,因此实际项目开发或上线过程中就需要把ES6的语法转变成ES5的语法.项目开发过程中 Webpack ...

  5. 为NuGet配置微软官方中国镜像

    NuGet微软官方中国镜像地址: https://nuget.cdn.azure.cn/v3/index.json 打开Visual Studio => 工具 => NuGet包管理器 = ...

  6. #《Essential C++》读书笔记# 第二章 面向过程的编程风格

    基础知识 函数必须先被声明,然后才能被调用(被使用).函数的声明让编译器得以检查后续出现的使用方式是否正确--是否有足够的参数.参数类型是否正确,等等.函数声明不必提供函数体,但必须指明返回类型.函数 ...

  7. Nginx架构分析(20200202)

    Nginx模块化 Nginx基于模块化设计,每个模块是一个功能实现,分布式开发,团队协作 核心模块.标准HTTP模块.可选HTTP模块.邮件模块.第三方模块 编译后的源码目录objs/ngx_modu ...

  8. CF547E Mike and Friends [AC自动机,离线树状数组]

    #include <cstdio> #include <queue> #include <vector> #define pb emplace_back using ...

  9. react引入ggEditor流程图

    遇到的问题 1.propsAPI获取不到内容:withPropsAPI包裹的组件必须是GGEditor的子组件. 2.自定义组件如何使用:正确的办法是通过config配置,参照上面的代码(之前我在在内 ...

  10. .Net 程序代码混淆加密工具 ILProtector

    我的项目中某一部分信息比较敏感,但是.Net程序反编译之后连注释都看得到.需要把exe保护起来,如:代码混淆之后再加壳. Bing到一款.Net混淆工具  ILProtector   作为资深工具党, ...