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:
-
Define your app’s environment with a Dockerfile so it can be reproduced anywhere.
Dockerfile保證我們的專案在任何地方都可以執行 -
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這個檔案怎麼寫
-
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 ) 安裝
- 下載
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
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 ) 實戰
- 使用Compose一鍵部署WP部落格
- 自己編寫微服務上線
開源專案(部落格)
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