1. 程式人生 > 其它 >Docker進階筆記(狂神說)

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
  1. 授權
sudo chmod +x /usr/local/bin/docker-compose

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

docker images

自動的預設規則

1、檔名 composetest

2、服務

預設的服務名 檔名_num

多個伺服器,叢集 A B_num 副本數量

服務redis服務=>4個副本

叢集狀態,服務都不可能只有一個執行例項。彈性、10 HA 高併發

3、網路規則

10個服務=>專案(專案中的內容都在同一個網路下,域名訪問)

如果在同一個網路下,我們可以通過域名進行訪問

停止命令

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網路

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