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