Docker 进阶
- 一、Docker Compose - 1.1 简介 - 1.2 Docker Compose 官方介绍 - 1.3 Docker-Compose 示例: - 1.4 安装 Docker Compose - 1.5 开始体验 - 1.6 yaml 规则 - 1.7 docker-compose 搭建开源博客 - 1.8 微服务实战 - 1.9 总结
- 二、Docker Swarm - 2.1 初始化 swarm - 2.2 Raft 协议 - 2.3 体会 - 2.4 概念总结 - 2.5 扩展命令
- 三、Docker Stack
- 四、Docker Secret
- 五、Docker Config
- 六、扩展到 K8S - 云原生
Author:Gorit
Refer:B站狂神说
2021年发表博文: 3/50
一、Docker Compose
没有学过 Dokcer 的同学,可以先看这篇 Docker 基础
1.1 简介
传统方式打包项目:
- Docker
- DockerFile build run 手动操作,单个容器
- 微服务,100个微服务,依赖关系
使用 Docker Compose 来轻松高效的管理容器 定义运行多个容器
1.2 Docker Compose 官方介绍
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.
- 使用 YAML 文件 来配置你的 app 服务
- 使用一个 single command
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 可以使你的 app 在任何地方运行
- Define the services that make up your app in
docker-compose.yml
so they can be run together in an isolated environment.- 定义一个 docker-compose.yml 文件
- Run
docker-compose up
and Compose starts and runs your entire app.- 运行 docker-compose 命令
- 启动项目
作用:项目编排
Compose 是 Docker 官方开源项目,需要安装!!!
1.3 Docker-Compose 示例:
代码语言:javascript复制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: {}
Compose: 重要概念
- 服务 service,容器,应用。(web,redis,mysql…)
- 项目 project,一组关联的容器,博客,web,mysql
1.4 安装 Docker Compose
- Linux 下载
# 下载
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 设置权限
sudo chmod x /usr/local/bin/docker-compose
- windows 下载, 下载 Docker Desktop 貌似就能自带了
官方安装步骤
安装好之后,在shell 窗口输入
docker-compose --version,可以看到安装信息就可以了
1.5 开始体验
官网做了一个统计页面访问次数的 python 应用,用到了
- python
- redis
- 启动 app.py
- Dockerfile 应用打包为镜像
- Docker-compose yaml 文件(定义整个服务,需要的环境 redis,web 等等)
- 启动 docker-compose up
docker-compose up # 启动
docker-compose down # 停止
docker-compose stop # 暴力停止
流程:
- 创建网络
- 执行 Docker-compose.yml
- 启动服务
- composetest_web_1 is up-to-date composetest_redis_1 is up-to-date
、docker images
代码语言:javascript复制REPOSITORY TAG IMAGE ID CREATED SIZE
composetest_web latest e7de448646d1 17 minutes ago 196MB
python 3.7-alpine 72e4ef8abf8e 29 hours ago 41.1MB
redis alpine c678242f9116 46 hours ago 31.6MB
docker-compose
以前都是单个 docker run 启动容器
docker-compose,通过 docker-compose 编写 YAML 配置文件,可以通过 compose 一键启动所有服务,停止
Docker 小结
- Docker 镜像,run => 容器
- DockerFile 构建镜像(服务打包)
- docker-compose、 启动项目(编排,多个微服务环境)
- Docker 网络
1.6 yaml 规则
docker-compose
代码语言:javascript复制# 3 层
version: "" # 版本
services: # 服务
服务1:web
# 服务配置
images
build
network
...
服务2: redis
...
服务3: redis
# 从下网上才为顺序
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
1.7 docker-compose 搭建开源博客
https://docs.docker.com/compose/wordpress/
博客
- 下载程序,安装数据库,配置…
- compose 应用,=> 一键启动
- 下载项目(docker-compose.yaml)
- 如果需要文件, Dockerfile
- 文件准备齐全(直接一键启动)
前台启动
docker -d
docker-compose -d
一切都很简单
1.8 微服务实战
- 编写自己的微服务
- dockerfile 构建镜像
- docker-compose.yml 编排项目
- 丢到服务器
- 启动
小结:
未来项目中只要有 docker-compose 文件,按照这个规则,启动编排容器
公司:docker-compose 直接启动
网上开源项目:docker-compose
假如项目要重新部署打包: docker-compose up --build # 重新构建
1.9 总结
工具、服务、容器
项目 compose:三层
- 工程:project
- 服务 服务
- 容器 运行实例! docker k8s, 容器
二、Docker Swarm
2.1 初始化 swarm
搭建集群服务 (k8s)
购买服务器 4台服务器
安装 Docker
xshell 同步操作
- docker swarm init (生成节点)
- 假如 (管理者,worker)
目标,双主,双重
2.2 Raft 协议
双主双从:假设一个节点挂了!其他节点是否可以用!
Raft协议:保证大多数存活才可以用,只要 > 1,集群至少大于 3 台。
Raft协议保证大多数节点都可用,高可用
2.3 体会
弹性,扩缩容,集群
以后告别了 docker run
docker-compose up! 启动一个项目,单机!
集群:swarm:docker service
容器 => 服务
redis! = 3 份,容器!
集群:高可用,web -> redis (3台,在不同机器)
服务:集群中任意节点都可以访问,服务可以有多个副本动态扩缩容实现高可用
弹性:扩缩容
10台!10000台! 卖给别人! 虚拟化
服务的高可用,任何企业,云计算
docker swarm 其实不难
会搭建集群,会启动服务,动态管理容器就可以了
2.4 概念总结
swarm
集群的管理和编号,docker 可以初始化一个 swarm集群,其他节点可以假如(管理,工作者)
Node
就是一个 docker 节点,多个节点就组成了一个 网络集群(管理,工作者)
Service
任务,可以在管理节点或者工作节点进行,核心:用户访问
Task
容器内的命令,细节任务!
2.5 扩展命令
docker network ls
三、Docker Stack
docker-compose 单机部署项目
docker stack 部署,集群部署
代码语言:javascript复制# 单机
docker-compose up -d wordpress.yaml
# 集群
docker stack deploy wordpress.yaml
# docker-cmopose
四、Docker Secret
安全!配置密码,证书!
- create
- inspect
- ls
- rm
五、Docker Config
六、扩展到 K8S
云原生
Go 语言
Docker 是 Go 开发的
并发语言
go 语言学习!!!
云应用
k8s!