Docker-第八课,进阶-Docker Compose

Docker Compose

简介:
Docker Compose 轻松高效的管理容器。定义运行多个容器。
官方介绍:
定义、运行多个容器
yaml file 配置文件
single command。命令有哪些?
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. To learn more about all the features of Compose, see the list of features.
所有的环境都可以使用Compose
Compose works in all environments: production, staging, development, testing, as well as CI workflows. You can learn more about each case in Common Use Cases.
Using Compose is basically a three-step process:

  1. Define your app’s environment with a Dockerfile so it can be reproduced anywhere.
  2. Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
  3. Run docker compose up and the Docker compose command starts and runs your entire app. You can alternatively run docker-compose up using the docker-compose binary.
    三步骤:
    1、Docker保证我们的项目可以运行在任何地方
    2、services什么是服务。docker-compose.yml这个文件怎么写
    3、启动项目

作用:批量容器编排。

理解:
compose是docker官方的开源项目。需要安装!
dockerfile让程序在任何地方运行。web服务。redis、mysql、nginx…多个容器。run

Compose

A docker-compose.yml looks like this:

version: "3.9"  # optional since v1.27.0
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

docker-compose up 100个服务
Compose:重要的概念。

  • 服务services,容器。应用。(web、redis、mysql…)
  • 项目project。一组关联的容器。博客。web、mysql。

安装Docker Compose
1、下载

方式一:GitHub下载
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
方式二:国内镜像下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-'uname -s'-'uname -m' > /usr/local/bin/docker-compose

在这里插入图片描述
2、授权

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

在这里插入图片描述
3、体验(Getting started)
https://docs.docker.com/compose/gettingstarted/

Step 1:Setup
1)、给项目创建一个文件夹

 mkdir composetest
 cd composetest

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)、创建一个requirements.txt文件,内容为:

flask
redis

Step 2:Create a Dockerfile (应用打包为镜像)

# syntax=docker/dockerfile:1
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
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

Step 3:Define services in a Compose file(定义整个服务,需要的环境。web/redis)完整的上线服务
创建一个docker-compose.yml文件

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

在这里插入图片描述
4、启动compose项目(docker-compose up)

流程:
1、创建网络
2、执行Docker-compose yaml
3、启动服务
Docker-compose yaml

Creating composetest_web_1 … done
Creating composetest_redis_1 … done
在这里插入图片描述
在这里插入图片描述
docker images:
在这里插入图片描述
docker service ls
在这里插入图片描述
默认的服务名 文件名_服务名_num
多个服务器。集群。A B _num 副本数量
服务redis服务=>4个副本。
集群状态。服务都不可能只有一个运行实例。弹性、10 HA 高并发。
kubectl service负载均衡。

3、网络规则
在这里插入图片描述
10个服务=> 项目(项目中的内容都在同一个网络下。域名访问)
在这里插入图片描述
如果在同一个网络下,我们可以直接通过域名访问。
HA!

停止:docker-compose down ctrl+c
在这里插入图片描述
docker-compose
以前都是单个docker run 启动容器
docker-compose。通过docker-compose编写yaml配置文件、可以通过compose一键启动所有服务,停止。!

docker小结:
1、Docker镜像。run=>容器
2、DockerFile构建镜像(服务打包)
3、docker-compose启动项目(编排、多个微服务/环境)
4、Docker网络

yaml规则
docker-compose.yaml 核心
https://docs.docker.com/compose/compose-file/compose-file-v3/

# 3层!

version: '' # 版本
services: # 服务
	服务1:web
		# 服务配置
		images
		bulid
		network
		。。。
	服务2:redis
		。。。
	服务3:redis
# 其他配置 网络/卷、全局规则
volumes:
networks:
configs:

在这里插入图片描述
部署
在这里插入图片描述
学习,要掌握规律!
只要多写,多看。compose.yaml配置
1、官网文档
2、开源项目compose.yaml
redis/mysql/mq

开源项目
博客
https://docs.docker.com/samples/wordpress/
下载程序、安装数据库、配置…
compose应用。=>一键启动
1、下载项目(docker-compose.yaml)
2、如果需要文件。Dockerfile
3、文件准备齐全(直接一键启动)

前台启动
docker -d
docker-compose up -d

掌握:docker基础,原理、网络、服务、集群、错误排查、日志。
Linux docker k8s

实战:
1、编写项目微服务
2、dockerfile构建镜像
3、docker-compose.yaml编排项目
4、丢到服务器 docker-compose up

小结:
未来项目只要有docker-compose文件。按照这个规则,启动编排启动
公司:docker-compose up .直接启动
网上开源项目:docker-compose一键搞定

项目要重新部署打包

docker-compose up --build #重新构建!

总结:
工程、服务、容器
项目compose:三层
工程project
服务 服务
容器 运行实例! docker k8s 容器

Docker Swarm

以集群的方式部署、4台阿里云服务器、2 4G。

购买服务器
在这里插入图片描述
在这里插入图片描述
用同一个网络
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
买完服务器后,连接所有服务器:
右键xshell 选择最下面的发送键到所有的会话,就可以将命令输入到所有的会话框

yum安装gcc相关环境(需要确保虚拟机可以上外网)

yum -y install gcc
yum -y install gcc-c++

下来就是docker的正常安装。
和我们单机安装一样。

https://docs.docker.com/config/daemon/prometheus/

在这里插入图片描述

10个节点一下用swarm(管理节点/工作节点),操作都在manager上
Raft一致性算法
在这里插入图片描述
docker swarm --help:与集群的命令
在这里插入图片描述
对外怎么连接:
在这里插入图片描述
私网、公网:(私网不要钱)
如何把当前的服务器操作位一个主节点(manager)

 docker swarm init --advertise-addr xxx.xxx.xxx.xxx


初始化节点: docker swarm init
docker swarm join 加入一个节点
将docker2加入docker1

# 获取令牌
docker swarm join-token manager(在docker中执行,生成一个主节点命令,在docker4中执行)
docker swarm join-token worker(在docker1中生成一个命令,然后在docker3中执行)

在这里插入图片描述
然后主节点上运行命令:docker node ls
在这里插入图片描述

把后面的节点都搭建进去!
在这里插入图片描述
100台
1、生成主节点init
2、加入(管理者、worker)

目标:双主双从

Raft协议
双主双从:假设一个节点挂了,其他节点是否可以用
Raft协议:保证大多数节点存活才可以用。只要>1,集群至少大于3台
实验:
1、将docker1机器停止。宕机!双主,另外一个主节点也不能使用了
在这里插入图片描述
2、可以将其他的节点离开
在这里插入图片描述

3、work就是工作的、管理节点操作!3台机器设置为了管理节点。

集群,可用!3个主节点。 >1台管理节点存活
Raft协议;保证大多数节点存活,才可以使用,高可用!

体会
弹性、扩缩容!集群!
以后告别docker run!
docker-compose up! 启动一个项目。单机!

集群:swarm docker service
容器=>服务
容器=>服务=>10个副本!(同时开启10个redis容器)
体验:创建服务、动态扩展服务、动态更新服务

在这里插入图片描述
灰度发布:金丝雀发布!

停止网站

docker run 容器启动! 不具有扩缩容
docker service 服务! 具有扩缩容,滚动更新

查看服务 REPLICS,只有一个副本
在这里插入图片描述
创建副本:
docker service update --relicas 3 my-nginx
动态扩缩容
在这里插入图片描述
用scale进行扩缩容,同update
在这里插入图片描述
可以动态更新
从5更新到1也可以
服务,集群中任意节点都可以访问。

弹性、扩缩容!
10台!10000台!卖给别人,虚拟化
服务的高可用

移除
在这里插入图片描述
docker swarm不难
只要会搭建集群、会启动服务、动态管理容器就可以了

Docker Stack

Docker Secret

Docker Config

容器单独没有什么意义,有意义的是容器编排!

k8s

未完待续。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值