ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Docker——容器编排(七)

2021-07-18 20:00:00  阅读:152  来源: 互联网

标签:node 容器 compose -- app redis 编排 Docker docker


一、传统方式容器编排实例(Docker官网实例)

(1)容器整体的框架
在这里插入图片描述
如果按照传统的方式
在这里插入图片描述
(2)创建app.py文件,写业务内容

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

在这里插入图片描述
(3)通过DockerFIle创建镜像

ls

mkdir -p /tmp/composetest

cd /tmp/composetest 

vi app.py

vi requirements.txt

vi Dockerfile

docker build -t python-app-image .

在这里插入图片描述
在这里插入图片描述
补充文件:
Dockerfile

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]

requirements.txt文件

flask
redis

(4)获取Redis的image

  • 获取Redis的image
docker pull redis:alpine
  • 创建两个container
创建网络

docker network ls
docker network create --subnet=172.20.0.0/24 app-net 

创建python程序的container,并指定网段和端口


docker run -d --name web -p 5000:5000 --network app-net python-app-image

创建redis的container,并指定网段

docker run -d --name redis --network app-net redis:alpine

访问测试

ip[centos]:5000

二、通过Docker-compose来实现(Docker官网实例)

(1)首先第一步需要安装Docker-compose

 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

 sudo chmod +x /usr/local/bin/docker-compose

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

在这里插入图片描述
(2) 编辑docker-compose.yaml

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    networks:
      - app-net

  redis:
    image: "redis:alpine"
    networks:
      - app-net

networks:
  app-net:
    driver: bridge
docker-compose up -d 

在这里插入图片描述

在这里插入图片描述

总结:一二节是实例 约等于官网的实例

详解docker-compose.yml文件

(1)version: ‘3’

表示docker-compose的版本

(2)services

一个service表示一个container

(3)networks

相当于docker network create app-net

(4)volumes

相当于-v v1:/var/lib/mysql

(5)image

表示使用哪个镜像,本地build则用build,远端则用image

(6)ports

相当于-p 8080:8080

(7)environment

相当于-e

docker-compose常见操作(1)查看版本

​ docker-compose version

(2)根据yml创建service

​ docker-compose up

​ 指定yaml:docker-compose up -f xxx.yaml

​ 后台运行:docker-compose up

(3)查看启动成功的service

​ docker-compose ps

​ 也可以使用docker ps

(4)查看images

​ docker-compose images

(5)停止/启动service

​ docker-compose stop/start

(6)删除service[同时会删除掉network和volume]

​ docker-compose down

(7)进入到某个service

​ docker-compose exec redis sh

scale扩缩容
(1)修改docker-compose.yaml文件,主要是把web的ports去掉,不然会报错

version: '3'
services:
  web:
    build: .
    networks:
      - app-net

  redis:
    image: "redis:alpine"
    networks:
      - app-net

networks:
  app-net:
    driver: bridge

(2)创建service

docker-compose up -d

(3)若要对python容器进行扩缩容

docker-compose up --scale web=5 -d
docker-compose ps
docker-compose logs web

在这里插入图片描述

从之前的操作单机向操作集群转变

在这里插入图片描述

三、Docker Swarm

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
环境准备
(1)根据Vagrantfile创建3台centos机器
新建swarm-docker-centos7文件夹,创建Vagrantfile

boxes = [
    {
        :name => "manager-node",
        :eth1 => "192.168.0.11",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name => "worker01-node",
        :eth1 => "192.168.0.12",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name => "worker02-node",
        :eth1 => "192.168.0.13",
        :mem => "1024",
        :cpu => "1"
    }
]

Vagrant.configure(2) do |config|

  config.vm.box = "centos/7"
  
   boxes.each do |opts|
      config.vm.define opts[:name] do |config|
        config.vm.hostname = opts[:name]
        config.vm.provider "vmware_fusion" do |v|
          v.vmx["memsize"] = opts[:mem]
          v.vmx["numvcpus"] = opts[:cpu]
        end

        config.vm.provider "virtualbox" do |v|
          v.customize ["modifyvm", :id, "--memory", opts[:mem]]
		  v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
		  v.customize ["modifyvm", :id, "--name", opts[:name]]
        end

        config.vm.network :public_network, ip: opts[:eth1]
      end
  end

end

(2)进入到对应的centos里面,使得root账户能够登陆,从而使用XShell登陆

vagrant ssh manager-node/worker01-node/worker02-node
sudo -i
vi /etc/ssh/sshd_config
修改PasswordAuthentication yes
passwd    修改密码
systemctl restart sshd

(3)在win上ping一下各个主机,看是否能ping通

ping 192.168.0.11/12/13

(4)在每台机器上安装Docker engine

四、搭建Swarm集群

(1)进入manager
提示:manager node也可以作为worker node提供服务

docker swarm init --advertise-addr=192.168.0.11

注意观察日志,拿到worker node加入manager node的信息

docker swarm join --token SWMTKN-1-0a5ph4nehwdm9wzcmlbj2ckqqso38pkd238rprzwcoawabxtdq-arcpra6yzltedpafk3qyvv0y3 192.168.0.11:2377

(2)进入两个worker

docker swarm join --token SWMTKN-1-0a5ph4nehwdm9wzcmlbj2ckqqso38pkd238rprzwcoawabxtdq-arcpra6yzltedpafk3qyvv0y3 192.168.0.11:2377

日志打印

This node joined a swarm as a worker.

(3)进入到manager node查看集群状态

docker node ls

(4)node类型的转换
可以将worker提升成manager,从而保证manager的高可用

docker node promote worker01-node
docker node promote worker02-node

#降级可以用demote
docker node demote worker01-node

在线的Docker网址(4小时的会话有效期)

http://labs.play-with-docker.com
创建三个机器
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

标签:node,容器,compose,--,app,redis,编排,Docker,docker
来源: https://blog.csdn.net/qq_43170213/article/details/118875935

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有