本文章根据 B 站狂神 Docker 视频教程整理而成,在之前的基础篇上进行加强学习。
Docker Compose
简介
之前的 docker 基础篇使用的是手动操作,单个容器!
比如微服务,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。
三步骤:
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 Compose starts and runs your entire app.- 启动项目。
作用:批量容器编排
我自己理解
Compose 是 Docker 官方的开源项目,需要安装!
Dockerfile 让程序在任何地方运行。 web 服务,redis,mysql,nginx … 多个容器,run
Compose
1 | version: '3.9' # optional since v1.27.0 |
docker-compose up 100 个服务
Compose:重要的概念。
- 服务 services,容器,应用。(web、redis、mysql ….)
- 项目 project,一组关联的容器。
安装
1、下载
1 | # 官方 |
2、授权
1 | [root@iz2ze4lfnjztrjppyfbqo1z bin]# chmod +x /usr/local/bin/docker-compose |
体验
官网快速开始地址:https://docs.docker.com/compose/gettingstarted/
1、进入 /home 目录,进行相关操作
1 | $ cd /home |
2、创建一个 app.py
文件,内容如下
1 | import time |
3、创建 requirements.txt
,内容如下
1 | flask |
4、创建 Dockerfile
,内容如下
1 | FROM python:3.7-alpine |
5、设置 pip 默认镜像源
我在配置的时候,出现了一些警告和错误,大多都是镜像源的问题!需要在Dockerfile
配置以及本地配置默认镜像源
1 | $ mkdir -p ~/.pip |
6、定义 services ,ca 创建 docker-compose.yml
1 | version: '3.3' |
6、运行
1 | $ docker-compose up |
如果 docker-compose up 报错
解决方法如下:
1 | # 1、如果还没有 docker group 就添加一个: |
感谢提供解决方案:“Couldn’t connect to Docker daemon at http+docker://“错误解决
启动结果:
启动的容器:
本机自测,每访问一次,会加 1
查看镜像:
1 | [root@iz2ze4lfnjztrjppyfbqo1z ~]# docker service ls |
网络规则:
10 个服务==>项目(项目中的内容都在同一个网络下,域名访问)
1 | # 网络细节 |
如果在同一个网络下,我们可以直接通过域名访问
停止: docker-compose down
或者 ctrl + c
总结:
yaml 规则
docker-compose.yaml 核心!
1 | # 3层 |
学习,要掌握规律!
只要多写,多看 yaml 配置!
1、官网文档:https://docs.docker.com/compose/compose-file/#specifying-durations
2、开源项目
开源项目 - 博客
官方文档:https://docs.docker.com/compose/wordpress/
下载程序、安装数据库、配置…..
compose 应用 –> 一键启动
1、进入 /home 目录,进行相关操作
1 | $ mkdir my_wordpress |
2、编写 docker-compose.yml
1 | version: '3.3' |
3、启动
1 | # 前台启动 |
即:
- 1、下载项目(docker-compose.yaml)
- 2、如果需要文件,Dockerfile
- 3、文件准备齐全(直接一键启动项目!)
实战
1、新建 springboot 模块,勾选 web 和 redis
1 | package com.itjing.controller; |
2、配置文件
1 | 8080 = |
3、编写 dDockerfile 构建镜像
1 | FROM java:8 |
4、编写 docker-compose.yaml 编排项目
1 | version: '3.3' |
5、将项目打成 jar 包,然后在服务器上新建目录,将 jar 包、Dockerfile 和 yaml 文件放到这个目录里,比如叫 jingapp
6、丢到服务器后, docker-compose up
即:
- 1、编写项目微服务
- 2、dockerfile 构建镜像
- 3、docker-compose.yaml 编排项目
- 4、丢到服务器 docker-compose up
小结:
未来项目只要有 docker-compose 文件,按照这个规则,启动编排容器!
公司: docker-compose,直接启动。
网上开源项目: docker-compose,一键搞定。
假设项目要重新部署打包:
1 | docker-compose up --build # 重新构建 |
工程、服务、容器
项目 compose :三层
- 工程 Project
- 服务 服务
- 容器 运行实例! docker k8s 容器。
Docker Swarm
集群
购买服务器
4 台服务器 1 核 2G!
分组设置直接下一步
到此服务器购买完毕! 1主,3从!
四台机器安装 Docker
使用 xshell 连接服务器
将窗口设置成瓷砖排列
多个窗口同时输入命令
安装 docker ,根据基础篇安装 docker 步骤来,镜像加速也要配置
1 | #1、卸载旧版本 |
工作模式
搭建集群
私网、公网!
用自己的 ip
1 | $ ip addr |
初始化节点 docker swarm init
1 | # docker1 执行以下操作,成为 manager |
加入一个节点 docker swarm join
1 | # docker2 执行以下操作,加入到 docker1 |
查看节点
1 | # docker1 |
用以下命令将其它节点搭建进去
1 | # docker1获取令牌,然后其它节点执行,成为 manager 或 worker |
即:
- 1、生成主节点 init
- 2、加入(manager、worker)
这里是双主双从! 一般至少三个主节点。
Raft 协议
双主双从:假设一个节点挂了!其他节点是否可以用!
Raft 协议:保证大多数节点存活才可以用。至少>1,集群至少大于 3 台!
实验:
1、将 docker1 机器停止。宕机!双主,另外一个主节点也不能使用了!
1 | # docker1 |
2、可以将其他节点离开
1 | # docker3 |
3、 worker 就是工作的、管理节点操作!3 台机器设置成了管理节点。
十分简单:集群,可用! 3 个主节点。 >1 台管理节点存活!
3个主节点,有1个主节点挂了,其它2个还能够使用,但是有2个主节点挂了,那么第3个也不能用了。
所以,集群情况下至少要有 3 个主节点。
Raft 协议:保证大多数节点存活,才可以使用,高可用!
体会
弹性、扩缩容、集群
以后告别 docker run !
docker-compose up ! 启动一个项目,单机!
集群:swarm docker service
容器 => 服务!
容器 => 服务! => 副本!
redis 服务 => 10 个副本!(同时开启 10 个 redis 容器)
体验
创建服务、动态扩展服务、动态更新服务。
灰度发布:金丝雀发布!
1 | # docker1 |
1 | docker run # 容器启动! 不具有扩缩容器 |
查看服务:REPLICAS(副本)
1 | # docker1 |
虽然是在 docker1 机器上创建的,但 1、2、4 上都没有这个 docker 容器,跑到了 3 上,docker3 也是 manager 节点,帮我们随机分布了
动态更新 nginx 成 3 个副本,其中有一个机器上没有启动 nginx 容器,但是用它的 ip 也能够访问到 nginx
1 | # docker1 |
动态扩容成 10 个副本,四个机器上分别跑 2、3、2、3 个 nginx 容器(这个数量不是固定的,随机分布)。
1 | # docker1 |
同样的命令也可以再设置成只有 1 个副本
1 | # docker1 |
服务,在集群的任意的结点都可以访问,服务可以有多个副本动态扩缩容实现高可用!
弹性、扩缩容!
scale
1 | $ docker service scale my-nginx=5 # 动态扩缩容,和 update 效果一样 |
移除服务
1 | # 移除服务 |
docker swarm 其实并不难
只要会搭建集群、会启动服务、动态管理容器就可以了!
概念总结
service
任务与调度
服务副本与全局服务
Docker Stack
docker-compose 单机部署项目!
Docker Stack 部署,集群部署!
1 | # 单机 |
Docker Secret
安全!配置密码,证书!
k8s 中也有这个概念,学 k8s 的时候再说。
Docker Config
配置
网上找案例跑起来试试! 查看命令帮助文档,官网学习!
拓展到 K8S
云原生时代
Go 语言!必须掌握!Java、Go!
Docker 是 Go 开发的!
K8S 也是 Go 的项目!
Etcd 都是 Go 的项目!
超过10台用k8s不用swarm
发布时间: 2021-01-03
最后更新: 2024-06-24
本文标题: Docker超详细通俗易懂进阶篇
本文链接: https://blog-yilia.xiaojingge.com/posts/5853eeae.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
