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语言开发了。。。很坑爹啊

 

posted @ 2020-07-26 22:33  aBiu--  阅读(77)  评论(0)    收藏  举报