docker进阶

Docker Compose

Docker

DockerFile build run 手动操作,单个容器

微服务,100个微服务,依赖关系

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 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:

  • services什么是服务
  • docker-compose.yml这个文件怎么写

我自己的理解

Compose是Docker官方的开源项目,需要安装

Dockerfile让程序在任何地方运行,web服务,redis、mysql、nginx…多个容器

Compose

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

docker compose up 100个服务

Compose:重要的概念。

  • 服务services,容器,应用(web、redis、mysql)
  • 项目project,一组关联的容器。
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.29.1/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

python应用,计数器,redis

1、应用app.py

- 为项目创建文件夹mkdir composetestcd composetest
  • 创建 app.py文件
import timeimport redisfrom flask import Flaskapp = 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)- 创建requirements.txt文件flaskredis

2、Dockerfile应用打包为镜像

创建 Dockerfile文件

syntax=docker/dockerfile:1FROM python:3.7-alpineWORKDIR /codeENV FLASK_APP=app.pyENV FLASK_RUN_HOST=0.0.0.0RUN apk add --no-cache gcc musl-dev linux-headersCOPY requirements.txt requirements.txtRUN pip install -r requirements.txtEXPOSE 5000COPY . .CMD ["flask", "run"]

3、Docker-compose yaml文件(定义整个服务于,需要的环境,web、redis)

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

4、启动compose

docker-compose up

docker-compose up的执行流程

1、创建网络
2、执行Docker-compose yaml
3、启动服务
Creating composetest_web_1 … done
Creating composetest_redis_1 … done

docker images

自动的默认规则

1、文件名 composetest

2、服务

默认的服务名 文件名_num

多个服务器,集群 A B_num 副本数量

服务redis服务=>4个副本

集群状态,服务都不可能只有一个运行实例。弹性、10 HA 高并发

3、网络规则

10个服务=>项目(项目中的内容都在同一个网络下,域名访问)

如果在同一个网络下, 我们可以通过域名进行访问

停止命令

docker-compose downCtrl+C

docker-compose

以前都是单个docker run启动容器

docker-compose通过docker-compose编写yaml配置文件、可以通过compose一键启动所有服务,停止

Docker小结:

1、Docker镜像,run=>容器

2、DockerFile构建镜像(服务打包)

3、docker-compose启动项目(编排、多个微服务/环境)

4、Docker网络

docker-compose.yaml 核心

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

开源项目(博客)

docker-compose up -d #后台启动

Docker Swarm(购买服务器)

点 创建实例

按量付费:用时花钱,不用不收钱

分组可以不设置

4台机器安装docker

生成令牌在任何一个manager节点上就可以

命令只能在manager上执行

虽然是在docker-1机器上创建的,但1、2、4上都没有这个docker进程

docker进阶

如果开10个时,四个节点上分别跑3、3、2、2个nginx容器。同样的命令也可以再设置成只有1个副本

k8s更难,功能更多。swarm相当于简单版的k8s

docker network inspect ingress

Overlay可使多个相互;ping不同的机器联通并变成一个整体

Docker Stack

Docker Secret

k8s中也有这个概念,学k8s的时候再说

Docker Config

超过10台用k8s不用swarm

ter)

超过10台用k8s不用swarm

Original: https://www.cnblogs.com/Argilgamesh/p/16339176.html
Author: ArGilgamesh
Title: docker进阶

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/592351/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Dapr 的 gRPC组件(又叫可插拔组件)的提案

    Dapr 在1.9 版本中的提案,计划在 Dapr Runtime 中组件采用 外部 gRPC 组件: https://github.com/dapr/dapr/issues/37…

    Java 2023年6月5日
    068
  • 关于非对称加密的一点解说

    非对称加密定义: 非对称加密算法又称 现代加密算&#x6CD5…

    Java 2023年6月16日
    098
  • Java实现两种队列(数组和链表)

    @date 2022-09-13 17:50*/public class QueueLinked{ private static class Node{E item;Node ne…

    Java 2023年6月15日
    069
  • MySQL8.0安装步骤

    在网上看了好多教程,终于安装成功,自己也写篇博客记录下 一、下载MySQL8.0 这个没啥好说的了吧,去官网下好,下下来解压 二、设置环境变量 本不想说明怎么设置环境变量,但是为了…

    Java 2023年6月9日
    076
  • Docker简介及安装

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化…

    Java 2023年6月8日
    063
  • mybatis-plus 动态数据源 clickHouse集群

    背景: 当前项目使用的 mybatis-plus 多数据源框架,使用方式可参考:https://mp.baomidou.com/guide/dynamic-datasource.h…

    Java 2023年6月16日
    090
  • [学习笔记] Java接口

    接口是Java中的一种抽象类型,是抽象方法的集合; 接口使用 interface关键字声明; 接口不是类,它们属于不同的概念,类描述对象的属性和方法,接口则包含要实现的方法; 一个…

    Java 2023年6月5日
    066
  • JDK成长记4:ArrayList常用方法源码探索(下)

    写在前面的话 写在前面的话 有的同学问我,开始讲的很基础,节奏比较慢,这个是因为一个为了让大家慢慢进入状态,后面的节奏会越来越快的,大家不要着急,另一个是因为简单的东西重复,温故而…

    Java 2023年6月5日
    0100
  • SpringWebflux中WebClient怎么打印日志

    一、背景 去年高峰压测的时候,有个服务是专门调用其它系统的,在测试接口http请求的时候,那TPS唰唰的往下掉,还专门用Arthas看了一下方法执行时间,那家伙,我sleep 2s…

    Java 2023年6月15日
    088
  • 设计模式之解释器模式

    解释器模式属于行为型模式;指给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达…

    Java 2023年6月5日
    069
  • 普通企业的规划类项目中,OptaPlanner更适合作为APS的规划优化引擎

    在企业的规划、优化场景中,均需要开发规划类的项目,实现从各种可能方案中找出相对最优方案。如排班、生产计划(包括高层次的供应链优化,到细粒度的车间甚至机台作业指令)、车辆调度等。因为…

    Java 2023年6月16日
    082
  • IDEA生成带参数和返回值注释

    步骤说明 打开IDEA进入点击左上角 – 文件 – 设置 – 编辑器 – 活动模板 新建活动模板 填写模板文本 编辑变量 添加变量表…

    Java 2023年6月15日
    0105
  • Elasticsearch Java API的基本使用

    在明确了ES的基本概念和使用方法后,我们来学习如何使用ES的Java API. 本文假设你已经对ES的基本概念已经有了一个比较全面的认识。 客户端 你可以用Java客户端做很多事情…

    Java 2023年5月29日
    053
  • 记一次redis 基于spring实现类对同一个KEY序列化内容不同导致一次事故

    我们的场景是这样的 我们对一个key:比如list.point.card:1 @Resourceprivate RedisTemplate redisTemplate;privat…

    Java 2023年6月15日
    085
  • Redis详解

    1.Redis 是一个基于内存的高性能 key-value 数据库。是完全开源免费的,用C语言编写的,遵守BSD协议 2.Redis 特点: 1)Redis 是基于内存操作的,吞吐…

    Java 2023年6月16日
    070
  • 关于Springboot配置多数据源,这篇笔记太详细了!

    关于springboot配置多数据源,整理了这篇笔记,分享给有需要的小伙伴们,视频看的动力节点王鹤老师讲的springboot 目录结构 1. DataSourceConfigur…

    Java 2023年6月7日
    072
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球