Docker Compose
简介:
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
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.
- Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
- 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.
三步骤:
1、Docker保证我们的项目可以运行在任何地方
2、services什么是服务。docker-compose.yml这个文件怎么写
3、启动项目
作用:批量容器编排。
理解:
compose是docker官方的开源项目。需要安装!
dockerfile让程序在任何地方运行。web服务。redis、mysql、nginx…多个容器。run
Compose
A docker-compose.yml looks like this:
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。一组关联的容器。博客。web、mysql。
安装Docker Compose
1、下载
方式一:GitHub下载
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.25.5/docker-compose-'uname -s'-'uname -m' > /usr/local/bin/docker-compose
2、授权
sudo chmod +x /usr/local/bin/docker-compose
3、体验(Getting started)
https://docs.docker.com/compose/gettingstarted/
Step 1:Setup
1)、给项目创建一个文件夹
mkdir composetest
cd composetest
2)、创建一个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)
3)、创建一个requirements.txt文件,内容为:
flask
redis
Step 2:Create a 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"]
Step 3:Define services in a Compose file(定义整个服务,需要的环境。web/redis)完整的上线服务
创建一个docker-compose.yml文件
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
4、启动compose项目(docker-compose up)
流程:
1、创建网络
2、执行Docker-compose yaml
3、启动服务
Docker-compose yaml
Creating composetest_web_1 … done
Creating composetest_redis_1 … done
docker images:
docker service ls
默认的服务名 文件名_服务名_num
多个服务器。集群。A B _num 副本数量
服务redis服务=>4个副本。
集群状态。服务都不可能只有一个运行实例。弹性、10 HA 高并发。
kubectl service负载均衡。
3、网络规则
10个服务=> 项目(项目中的内容都在同一个网络下。域名访问)
如果在同一个网络下,我们可以直接通过域名访问。
HA!
停止: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网络
yaml规则
docker-compose.yaml 核心
https://docs.docker.com/compose/compose-file/compose-file-v3/
# 3层!
version: '' # 版本
services: # 服务
服务1:web
# 服务配置
images
bulid
network
。。。
服务2:redis
。。。
服务3:redis
# 其他配置 网络/卷、全局规则
volumes:
networks:
configs:
部署
学习,要掌握规律!
只要多写,多看。compose.yaml配置
1、官网文档
2、开源项目compose.yaml
redis/mysql/mq
开源项目
博客
https://docs.docker.com/samples/wordpress/
下载程序、安装数据库、配置…
compose应用。=>一键启动
1、下载项目(docker-compose.yaml)
2、如果需要文件。Dockerfile
3、文件准备齐全(直接一键启动)
前台启动
docker -d
docker-compose up -d
掌握:docker基础,原理、网络、服务、集群、错误排查、日志。
Linux docker k8s
实战:
1、编写项目微服务
2、dockerfile构建镜像
3、docker-compose.yaml编排项目
4、丢到服务器 docker-compose up
小结:
未来项目只要有docker-compose文件。按照这个规则,启动编排启动
公司:docker-compose up .直接启动
网上开源项目:docker-compose一键搞定
项目要重新部署打包
用
docker-compose up --build #重新构建!
总结:
工程、服务、容器
项目compose:三层
工程project
服务 服务
容器 运行实例! docker k8s 容器
Docker Swarm
以集群的方式部署、4台阿里云服务器、2 4G。
购买服务器
用同一个网络
买完服务器后,连接所有服务器:
右键xshell 选择最下面的发送键到所有的会话,就可以将命令输入到所有的会话框
yum安装gcc相关环境(需要确保虚拟机可以上外网)
yum -y install gcc
yum -y install gcc-c++
下来就是docker的正常安装。
和我们单机安装一样。
https://docs.docker.com/config/daemon/prometheus/
10个节点一下用swarm(管理节点/工作节点),操作都在manager上
Raft一致性算法
docker swarm --help:与集群的命令
对外怎么连接:
私网、公网:(私网不要钱)
如何把当前的服务器操作位一个主节点(manager)
docker swarm init --advertise-addr xxx.xxx.xxx.xxx
初始化节点: docker swarm init
docker swarm join 加入一个节点
将docker2加入docker1
# 获取令牌
docker swarm join-token manager(在docker中执行,生成一个主节点命令,在docker4中执行)
docker swarm join-token worker(在docker1中生成一个命令,然后在docker3中执行)
然后主节点上运行命令:docker node ls
把后面的节点都搭建进去!
100台
1、生成主节点init
2、加入(管理者、worker)
目标:双主双从
Raft协议
双主双从:假设一个节点挂了,其他节点是否可以用
Raft协议:保证大多数节点存活才可以用。只要>1,集群至少大于3台
实验:
1、将docker1机器停止。宕机!双主,另外一个主节点也不能使用了
2、可以将其他的节点离开
3、work就是工作的、管理节点操作!3台机器设置为了管理节点。
集群,可用!3个主节点。 >1台管理节点存活
Raft协议;保证大多数节点存活,才可以使用,高可用!
体会
弹性、扩缩容!集群!
以后告别docker run!
docker-compose up! 启动一个项目。单机!
集群:swarm docker service
容器=>服务
容器=>服务=>10个副本!(同时开启10个redis容器)
体验:创建服务、动态扩展服务、动态更新服务
灰度发布:金丝雀发布!
docker run 容器启动! 不具有扩缩容
docker service 服务! 具有扩缩容,滚动更新
查看服务 REPLICS,只有一个副本
创建副本:
docker service update --relicas 3 my-nginx
动态扩缩容
用scale进行扩缩容,同update
可以动态更新
从5更新到1也可以
服务,集群中任意节点都可以访问。
弹性、扩缩容!
10台!10000台!卖给别人,虚拟化
服务的高可用
移除
docker swarm不难
只要会搭建集群、会启动服务、动态管理容器就可以了
Docker Stack
Docker Secret
Docker Config
容器单独没有什么意义,有意义的是容器编排!
k8s
未完待续。。。。。。