Docker Compose
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:
- services什么是服务
- docker-compose.yml这个文件怎么写
我自己的理解
Compose是Docker官方的开源项目,需要安装
Dockerfile
让程序在任何地方运行,web服务,redis、mysql、nginx…多个容器
Compose
version: "3.9" # optional since v1.27.0services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redisvolumes: logvolume01: {}
docker compose up 100个服务
Compose:重要的概念。
- 服务services,容器,应用(web、redis、mysql)
- 项目project,一组关联的容器。
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
python应用,计数器,redis
1、应用app.py
- 为项目创建文件夹mkdir composetestcd composetest
- 创建
app.py
文件
import timeimport redisfrom flask import Flaskapp = 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
文件flaskredis
2、Dockerfile应用打包为镜像
创建 Dockerfile
文件
syntax=docker/dockerfile:1FROM python:3.7-alpineWORKDIR /codeENV FLASK_APP=app.pyENV FLASK_RUN_HOST=0.0.0.0RUN apk add --no-cache gcc musl-dev linux-headersCOPY requirements.txt requirements.txtRUN pip install -r requirements.txtEXPOSE 5000COPY . .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 downCtrl+C
docker-compose
以前都是单个docker run启动容器
docker-compose通过docker-compose编写yaml配置文件、可以通过compose一键启动所有服务,停止
Docker小结:
1、Docker镜像,run=>容器
2、DockerFile构建镜像(服务打包)
3、docker-compose启动项目(编排、多个微服务/环境)
4、Docker网络
docker-compose.yaml 核心
3层version: '' # 版本services: # 服务 服务1: web # 服务配置 images build network ...... 服务2: redis ..... 服务3: mysql .....# 其他配置 网络/卷 全局规则volumes:networks:configs
开源项目(博客)
docker-compose up -d #后台启动
Docker Swarm(购买服务器)
点 创建实例
按量付费:用时花钱,不用不收钱
分组可以不设置
4台机器安装docker
生成令牌在任何一个manager节点上就可以
命令只能在manager上执行
虽然是在docker-1机器上创建的,但1、2、4上都没有这个docker进程
如果开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
ter)
超过10台用k8s不用swarm
Original: https://www.cnblogs.com/Argilgamesh/p/16339176.html
Author: ArGilgamesh
Title: docker进阶
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/592351/
转载文章受原作者版权保护。转载请注明原作者出处!