Docker进阶笔记(狂神说)

Docker Compose

1 ) 简介

狂神说:https://www.bilibili.com/video/BV1kv411q7Qc?share_source=copy_web

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:

  1. Define your app’s environment with a Dockerfile so it can be reproduced anywhere.
    Dockerfile保证我们的项目在任何地方都可以运行

  2. Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.

  • services什么是服务
  • docker-compose.yml这个文件怎么写
  1. 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.

    启动项目

    作用:批量容器编排

我自己的理解

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

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

Compose

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,一组关联的容器。

2 ) 安装

  1. 下载
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

image-20210509200851592

  1. 授权
sudo chmod +x /usr/local/bin/docker-compose

image-20210509201441920

3 ) 体验

官网地址

python应用,计数器,redis

1、应用app.py

- 为项目创建文件夹
mkdir composetest
cd composetest
  • 创建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)
- 创建`requirements.txt`文件
flask
redis

2、Dockerfile应用打包为镜像

创建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"]

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

image-20210509210414361

image-20210509210649773

docker images

image-20210509210748560

自动的默认规则

1、文件名 composetest

2、服务

默认的服务名 文件名_num

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

服务redis服务=>4个副本

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

3、网络规则

image-20210509211949998

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

image-20210509212211005

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

停止命令

docker-compose down
Ctrl+C

image-20210509212854704

docker-compose

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

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

Docker小结:

1、Docker镜像,run=>容器

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

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

4、Docker网络

4 ) yaml 规则

docker-compose.yaml 核心

官方例子链接

# 3层

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5 ) 实战

  1. 使用Compose一键部署WP博客
  2. 自己编写微服务上线

开源项目(博客)

在这里插入图片描述

https://docs.docker.com/compose/wordpress/

在这里插入图片描述

docker-compose up -d #后台启动
在这里插入图片描述

实战

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Docker Swarm(购买服务器)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

点 创建实例
在这里插入图片描述

按量付费:用时花钱,不用不收钱在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

分组可以不设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4台机器安装docker

在这里插入图片描述

工作模式

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

搭建集群

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

生成令牌在任何一个manager节点上就可以
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Raft协议

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

体会

命令只能在manager上执行

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

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

在这里插入图片描述

跑到了3上,docker-3也是manager节点
在这里插入图片描述
动态更新nginx成3个副本,1上没有,2、3、4都有nginx。但用1的ip访问也能访问到nginx

在这里插入图片描述

在这里插入图片描述

如果开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

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

在这里插入图片描述

笔记参考:https://blog.csdn.net/czj981014/article/details/116766286

ter)

超过10台用k8s不用swarm

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

在这里插入图片描述

笔记参考:https://blog.csdn.net/czj981014/article/details/116766286

笔记参考:https://blog.csdn.net/u014073556/article/details/109624184

posted @ 2021-10-21 13:30  你我不在年少  阅读(984)  评论(0编辑  收藏  举报