Docker--进阶
为了方便学习,把docker 先都给卸载干净
卸载:systemctl stop docker 重装阿里云镜像:yum -y remove docker-ce docker-ce-cli containerd.io 安装阿里云镜像以后,把docker 目录都给移除掉:rm -rf /var/lib/docker
卸载完以后,docker的命令就没有了,然后再安装:
先卸载旧版本软件包:
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logratate \ docker-engine
再安装需要的软件包:
yum install -y yum-utils
设置镜像仓库(使用国内的):
yum-config-manager --add-repo http://mirrors.aliyum.com/docker-ce/linux/centos/docker-ce.repo
更新一下,不然不是最新的docker
yum makecache fast
安装Docker 的CE,cli,IO(三个核心)
yum install docker-ce docker-ce-cli containerd.io
然后使用docker 的hello-world 测试
启动: systemctl start docker
测试: docker run hello-world

这就说明成功了
这时候配置加速,不然是非常慢的,把下面一块命令直接全部一下复制运行:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors":["https://qiyb9988.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload
然后重新启动docker: sudo systemctl restart docker
Docker 的基本命令:

Docker Compose
参考地址:https://docs.docker.com/compose/
简介
之前每次启动容器都是DockerFile,用的命令:build run xxx 这样子手动操作的,那么如果需要起100+个容器呢?
比如现在有100个微服务,就算全部启动了,中间万一有的卡住了,还要再去重启,非常非常麻烦!!这些100个微服务还有依赖关系等等一些问题。
Dokcer Commpose 就是来轻松高效的管理容器,定义运行多个容器。
官方文档解释:

这时候就知道了,Docker Compose 的作用就是批量容器编排。
自己理解:
Compose 是Docker 官方的开源项目,需要安装才可以用。
Dockerfile 让程序在任何地方都可以运行。
可以先看一下简单的Compose 的示例文件

就是通过这个文件来运行一个web项目,只要这个Compose文件没有写错,就是100个服务,都可以一键运行。
Compose 概念(重要)

一个项目由多个服务组成,多个服务就是多个容器。一个项目就是一组关联的容器。
安装:
最好使用国内的:
curl -L https://get.daocloud.io/docker/commpose/releases/download/1.2.5.5/docker-compose-'uname -s'-'uname -m' > /usr/local/bin/docker-compose

看到 /usr/local/bin 目录下的compose 文件,就说明下载ok 了!
接下来就是授权,在这个docker-compose 文件目录范围内执行: sudo chmod +x docker-compose

然后查看版本号,是否成功。
快速开始
参考地址: https://docs.docker.com/compose/gettingstarted/
跟着官网文档走,测试一下。
第一步:在/home 目录下一步一步执行

在创建的 app.py 的这个文件里复制官网的那个文件内容:

保存退出一下,第一个文件创建好了,然后还要导入依赖,写个依赖包的文件:

里面写内容,当然这还是官网给的,很简单的两个依赖,然后保存退出。

第二步:完了以后还需要写个Dockerfile 文件,一样的复制官网文档给的实例:

内容:

下面的这个是官网的,它执行的是用的框架,会比较慢,可能要从Linux 官网下载,不推荐~

保存退出。
第三步:写个docker-compose.yml 文件

一样的去跟着官网步骤走,去抄下来:

保存退出。大功告成。
确保这四个文件都有了以后:

执行命令: docker-compose up
这时候肯非常慢,慢慢等吧。。。
从执行命令以后打印出来的日志可以看到他的一个执行流程:

这两个名字是更具那个yml文件创建的默认的名字,这是自动的默认规则,为什么这么命名?有说法的哦~
至于默认的那个名字,不难看出是:默认服务名+文件名+服务名+数字
为什么要这样,因为我们的项目是个集群,在多个服务器上,后缀的那个数字就代表是副本的数量
扩展理解
首先来看一下镜像

发现有了redis 和 python的镜像,它自己把compose 的镜像给下载了,之前都是要自己手动先去下载,现在不用了,就是如果要起很多的服务,下载很多的镜像处理的问题。
执行成功以后,查看容器,服务启动成功,然后可以访问几次,服务正常。

再来了解这个执行命令流程的第一步,创建网络

就是说,在执行这个命令后: docker-compose up ,初始化创建的一个网络,让这些服务都在一个网络下,这样就可以用域名访问。为什么要这样,比如说,多个服务都有一个mysql,端口号是3306,这些服务都要在启动,如果相互之间都调用的话,肯定是不能填写ip来调用的,因为端口都一样了,那就用域名来访问,所以让这些服务在同一个网络下,就可以用域名来访问。
不信的话就执行命令: docker netword inspect composetest_default (那个网络的名字),来查看一下:

这个redis 和 web 都在同一个容器里面,并且也给做了地址绑定了。
现在回头看官方给的那个例子,写个那个app.py 的文件:

host 处一般都是写的ip,但人家是直接写的redis,说明就是通过域名访问的。
yml 编写规则:(Compose 核心)
参考地址: https://docs.docker.com/compose/compose-file/#compose-file-structure-and-examples
格式:

注意的依赖关系,决定于启动顺序:

实战测试:用compose一键部署WP(wordpress)博客
参考地址: https://docs.docker.com/compose/wordpress/
1、创建一个文件夹,进入到这个文件夹

2、编写一个docker-compose.yml 文件

把人家的复制过来

然后保存并退出
3、启动项目: docker-compose up -d
就这。。。完了,直接访问ip+端口号看效果!
实战测试:模仿官方的自己写一个计数器
随便创建一个springboot项目,依赖就添加一个web和redis 就好了

顺便写下配置文件

Dockerfile:

yml文件: docker-compose.yml

redis 就是那个通过域名访问的,在yml这里
准备工作已经做好,现在开干~
打包,和这几个文件一起上传到服务器
然后执行命令: docker-compose up 就直接好了
如果项目部署打包失败,试试: docker-compose up --build 重新构建!
总结:
准备号项目jar包,Dockerfile,yml 文件,然后一键启动
Docker Swarm
工作模式:

获取令牌命令:在主节点上执行命令,然后把生成的命令代码,复制到要成为节点的服务器上执行就行了,先别急执行这两个,看完下面
docker swarm join-token manager #生成主节点命令
docker swarm join-token worker # 生成worker 节点命令
不过要先找一个服务器当成主节点
首先初始化节点:在docker 1 执行,把docker 1当成主节点: docker swarm init --advertise-addr 自己的IP 
然后:docker swarm join 加入一个节点
意思是获取令牌,把一个服务器加入到另一个服务器,这里在docker 2 命令:
docker swarm join --token xxxxxx(就是把docker 1 执行命令以后出来的那句话拷过来,在docker 2执行)

docker 2执行加入节点命令后,人家也说了,这是一个worker,回到docker 1命令: docker node ls
可以看到,有两个节点了

如果要生成一个主节点关联到docker 1的主节点,在docker 1主节点执行命令: docker swarm join-token worker 把生成出来的命令复制到docker 3上面执行,


再回到docker 1查看节点,就会发现这也是一个主节点,关联到了docker 1

好了,了解到流程就是:生成主节点(init),然后加入管理者和 worker
Raft协议(一致性算法)
Raft协议:保证大多数节点存活才可以使用。
和哨兵模式差不多,就是存活的主节点要大于1台,所以集群最少大于三台,不然如果就两个主节点把docker 1挂掉,另一个主节点也不能用了。
所以,最少要三台服务器当作主节点,挂掉一台可以继续高可用,挂掉两台那就只剩下一台主节点了,一台主节点是不能用了的!!
了解 弹性扩缩容集群!告别 docker run!
docker service 的命令:创建服务,动态扩展服务,更新服务!

这些功能就可以 灰度发布:金丝雀发布!
举例:创建一个nginx 服务: docker service create -p 8888:80 --name my-nginx nginx

docker run #启动的容器,不具备扩缩容!
docker service #这是一个服务,具备扩缩容,滚动跟新!
输入命令查看:

看到服务已经启动可用,并且是一个服务,就是只有一个副本! 其实这个副本随机分布在了一个worker 上
比如说,现在一个服务不够用了,就像淘宝到了双十一,要多开几个副本,那就执行命令:
docker service update --replicas 3 my-nginx
就是把刚刚的my-nginx 服务开了3个副本

虽然3个服务都在worker 上,但是在任意节点的ip 也是同样可以访问到的!因为这是一个集群
另外一种写法: docker service scale my-nginx=5 #就是扩展成5个服务 这种写法更加方便,和上面一种写法是一模一样的!

移除服务命令: docker service rm my-nginx
概念总结
swarm
集群的管理和编导。docker 可以初始化一个swarm 集群,其他节点(管理、工作者)可以加入。
node
就是一个docker 节点,多个节点(管理、工作者) 组成一个网络集群。
service
一个任务。可以在管理节点或者工作节点来运行。核心!
task
容器内的命令,细节任务!
流程:命令->管理->api->调度->工作节点(创建Task容器维护创建)
这个逻辑是不变的,未来学习k8s 也是一样
Docker Stack
docker-compose 是单机部署项目! 示例: docker-compose up -d xxxxx.yml
docker Stack 部署,是集群部署! 示例: docker stack deploy xxxx.yml

用法和命令百度随便一找一大堆~
Docker Secret
就是做安全的,我们需要配置密码加密,证书什么的

无非就是几种方式,创建证书,删除证书,查看证书的细节内容什么的,比较简单
Docker Config

比较简单的,创建、删除、查看,也就这些命令~
学习方式就是:网上找案例跑起来试试,查看命令帮助文档 和 官网
以上的都是为了给学习k8s 做基础
扩展K8S
云原生时代,大趋势!
云原生时代 需要学习的的:GO语言!必须掌握!
因为Docker 是GO 开发的,K8S 也是GO 开发的。GO 是天生的并发语言!
GO语言要知道指针 概念
学习GO的:
入门
基础语法
高级对象
如何操作数据库
框架
----很多大厂面试进去的java 开发,转成了Go语言开发了。。。很坑爹啊

浙公网安备 33010602011771号