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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM