首页 > 其他 > 详细

第142天学习打卡(Docker yaml规则 开源项目 Docker Swarm)

时间:2021-05-31 12:15:01      阅读:13      评论:0      收藏:0      [点我收藏+]

yaml规则

docker-compose.yaml 核心

Reference documentation | Docker Documentation

 # 3层
 version: ‘‘ #版本
 services: #服务
  服务1:web
   # 服务配置
  images
  build
  network
  ....
  服务2:redis
  ...
  服务3:redis
   
 #其他配置 网络/卷、全局规则
 volumes:
 networks:
 configs:
 ?
 ?

此web项目依赖于redis 和postgres,所以启动的时候启动顺序很重要。

技术分享图片

 

学习,要掌握规律!

1.官网文档

Compose file | Docker Documentation

2.开源项目 compose.yaml

开源项目

Quickstart: Compose and WordPress | Docker Documentation

博客

下载程序,安装数据库, 配置...

compose应用。=>一键启动

1.下载项目(docker-compose.yaml)

2.如果需要文件Dockerfile

3.文件准备齐全(直接一键启动项目)

 

前台启动

docker-d

后台启动

docker-compose up -d

技术分享图片

 [root@kuangshen home]# mkdir my_wordpress
 [root@kuangshen home]# cd my_wordpress/
 [root@kuangshen my_wordpress]# ll
 total 0
 [root@kuangshen my_wordpress]# vim docker-compose.yml
 ?
 version: "3.9"
     
 services:
  db:
    image: mysql:5.7
    volumes:
       - db_data:/var/lib/mysql
     restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
     
  wordpress:
    depends_on:
       - db
    image: wordpress:latest
    ports:
       - "8000:80"
     restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
 volumes:
  db_data: {}
   
 [root@kuangshen my_wordpress]# docker-compose up
 ?

 

技术分享图片

 

技术分享图片

 

点击 安装文字新闻这个选项 ,然后安装成功后,登录就可以了

技术分享图片

 

实战

1.创建spring项目

技术分享图片

 

2.编写项目微服务

3.dockerfile构建镜像

4.docker-compose.yaml编排项目

5.丢到服务器中启动 docker-compose up

controller HelloController.java

 package com.kuang.demo1.controller;
 ?
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 ?
 @RestController
 public class HelloController {
    @Autowired
    StringRedisTemplate redisTemplate;
 ?
    @GetMapping("/hello")
    public String hello(){
        Long views = redisTemplate.opsForValue().increment("views");
        return "hello, kuangshen, thank you, views:" + views;
    }
 ?
 }
 ?

application.properties

 ?
 server.port=8080
 spring.redis.host=redis
 ?
 ?

Dockerfile

 FROM java:8
 ?
 COPY *.jar /app.jar
 ?
 CMD ["--server.port=8080"]
 ?
 EXPOSE 8080
 ?
 ENTRYPOINT ["java", "-jar", "/app.jar"]
 ?

 

docker-compose.yml

 version: ‘3.9‘
 services:
  kuangapp:
    build: .
    image: kuangapp
    depends_on:
      - redis
    ports:
    - "8080:8080"
  redis:
    image: "library/redis:alpine"
 ?

打包

技术分享图片

在Xftp7下创建一个文件"kuangapp"

技术分享图片

 

技术分享图片

 

技术分享图片

 

技术分享图片

 

小结:

未来项目只要有docker-compose 文件。按照这个规则,启动编排容器。

公司:有docker-compose文件, 直接启动

网上开源项目 :docker-compose 一键搞定

假设项目要重新部署打包

 docker-compose up --build #重新构建
 ?

项目启动成功的页面:

技术分享图片

 

技术分享图片

 

技术分享图片

总结:

工程、服务、容器

项目compose:三层

  • 工程Project

  • 服务

  • 容器 运行实例! docker直接管理 k8s

Docker Swarm

集群

购买服务器

4台服务器 2G

技术分享图片

 

技术分享图片

 

技术分享图片

 

技术分享图片

 

点击下一步:

技术分享图片

 

技术分享图片

 

技术分享图片

 

然后点击下一步

技术分享图片

 

技术分享图片

 

技术分享图片

 

技术分享图片

到此,服务器购买完毕! 1主 3 从

 

 

技术分享图片

填写名称和主机号之后, 点击连接

技术分享图片

 

技术分享图片

技术分享图片

 

技术分享图片

重复上面的步骤 配置剩余的三个

技术分享图片

技术分享图片

4台机器安装Docker

和单机一样

技巧:xshell直接同步操作,省时间!

技术分享图片

技术分享图片

1.yum安装gcc相关环境(需要确保虚拟机可以上外网)

 yum -y install gcc
 yum -y install gcc-c++

2.

 #1.卸载旧的版本
  yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
   # 2.需要的安装包
  yum install -y yum-utils
   # 3.设置镜像的仓库
  yum-config-manager \
     --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
   
  # 建议安装阿里云
  yum-config-manager \
     --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 #4更新yum软件包索引
  yum makecache fast
 ?
 ?
 # 5安装docker相关的内容   docker-ce 社区   ee企业版
  yum install -y docker-ce docker-ce-cli containerd.io
  #6 启动docker
  systemctl start docker
  #7.使用 docker version 查看是否安装成功
 ?
 ?
 # 8 配置镜像加速器
 sudo mkdir -p /etc/docker
 sudo tee /etc/docker/daemon.json <<-‘EOF‘
 {
   "registry-mirrors": ["https://g6yrjrwf.mirror.aliyuncs.com"]
 }
 EOF
 sudo systemctl daemon-reload
 sudo systemctl restart docker
 ?

 

技术分享图片

 

工作模式

技术分享图片

操作都在manager上

Raft一致性算法

搭建集群

技术分享图片

技术分享图片

 

技术分享图片

 

技术分享图片

初始化节点docker swarm init --advertise-addr

docker swarm join加入一个节点!

 #获取令牌
 docker swarm join-token manager #主节点令牌
 docker swarm join-token worker

技术分享图片

 

技术分享图片

 

技术分享图片

 

技术分享图片

 

技术分享图片

集群搭建完毕:

技术分享图片

1.生成主节点

2.加入(管理者、 worker 两种角色)

Raft协议

双主双从:假设一个节点挂了, 其他节点是否可用?

Raft协议:保证大多数节点存活才可用。只要 >1 集群至少大于3台!

实验:

1.将docker1机停止,相当于宕机!双主,另外一个节点也不能用了

 #停止的命令
 systemctl stop docker
 # 启动命令
 systemctl start docker
 # 离开集群
 docker swarm leave
 ?

技术分享图片

技术分享图片

技术分享图片

技术分享图片

2.可用将其他节点离开

技术分享图片

技术分享图片

3.worker就是工作的,管理节点里面使用的命令worker使用不了,管理命令只能在管理节点里面操作。

技术分享图片

 

技术分享图片

三台机器设置为了管理节点:

技术分享图片

把docker1停止之后,docker3,4都可以正常使用

技术分享图片

 

技术分享图片

技术分享图片

继续把docker3停止了, docker-4就使用不了了

技术分享图片

 

技术分享图片

 

集群要保证可用性, 必须有3个主节点。要有 > 1台管理节点存活!

Raft协议:保证大多数节点存活, 才可以使用,高可用!

体会

弹性 扩缩容 集群

docker-compose up !启动一个项目,单机

集群:swarm docker service

容器=> 服务

容器=> 服务 =>副本

体验:创建服务, 动态扩展服务,动态更新服务!

技术分享图片

灰度发布,金丝雀发布:升级不影响使用。

技术分享图片

 

 docker run 容器启动! 不具有扩缩容器功能
 docker service 服务!具有扩缩容器功能,滚动更新,灰度发布!
 ?
 ?

查看服务: REPLICAS 副本

 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]# docker service create -p 8888:80 --name my-nginx nginx
 ywksjagryj2n7mojxqeujyp9u
 overall progress: 1 out of 1 tasks
 1/1: running   [==================================================>]
 verify: Service converged
 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]# docker service ps my-nginx # 查看服务
 ID             NAME         IMAGE         NODE                     DESIRED STATE   CURRENT STATE           ERROR     PORTS
 dezedmyjs0u8   my-nginx.1   nginx:latest   iZ2vc9rba8rjfr8lqdfan7Z   Running         Running 2 minutes ago            
 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]# docker service ls
 ID             NAME       MODE         REPLICAS   IMAGE         PORTS
 ywksjagryj2n   my-nginx   replicated   1/1 (只启动了一个副本)     nginx:latest   *:8888->80/tcp
 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]#
 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]# docker service inspect my-nginx
 ?

动态扩缩容:

 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]# docker service update --replicas 3 my-nginx
 my-nginx
 overall progress: 3 out of 3 tasks
 1/3: running   [==================================================>]
 2/3: running   [==================================================>]
 3/3: running   [==================================================>]
 verify: Service converged
 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]# docker service ls
 ID             NAME       MODE         REPLICAS   IMAGE         PORTS
 ywksjagryj2n   my-nginx   replicated   3/3       nginx:latest   *:8888->80/tcp
 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]# docker ps
 CONTAINER ID   IMAGE         COMMAND                 CREATED             STATUS             PORTS     NAMES
 d5c3494b21c6   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp   my-nginx.3.jjqt8p1t5ry5bjz7e4l9tqkmc
 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]#
 ?

就是设置的4台服务器都可以访问

技术分享图片

设置了10个my-nginx 服务,集群中任意的节点都可以访问。服务可以有多个副本动态扩缩容实现高可用!

技术分享图片

回滚到一个:

 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]# docker service update --replicas 1 my-nginx
 my-nginx
 overall progress: 1 out of 1 tasks
 1/1: running   [==================================================>]
 verify: Service converged
 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]#
 ?
 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]# docker service scale my-nginx=5
 ?

 

技术分享图片

移除服务:

 [root@iZ2vc9rba8rjfr8lqdfan9Z ~]# docker service rm my-nginx  #移除服务
 my-nginx
 ?

docker swarm 只要会搭建集群,会启动服务,动态管理容器就可以了!

概念总结

swarm

集群的管理和编号。docker可以初始化一个swarm集群,其他节点可以加入(管理,工作者)

Node

就是一个docker节点。多个节点就组成了一个网络集群。

Service

任务,可以在管理节点或者工作节点来运行。核心,用户访问!

Task

容器内的命令,细节任务。

技术分享图片

命令->管理->api->调度->工作节点(创建Task容器维护创建)

服务副本与全局服务

技术分享图片

调整service以什么方式运行

 --mode string
 Service mode (replicated or global) (default "replicated")
 ?
 docker service create --mode replicated --name mytom tomcat:7 默认的
 ?
 docker service create --mode global --name haha alpine ping baidu.com
 #场景,日志收集
 每一个节点都有自己的日志收集器,过滤。把所有的日志最终再传给日志中心
 服务监控 状态性能
 ?

扩展:网络模式:"PublishMode":"ingress"

Swarm:

Overlay:

ingress:特殊的Overlay网络!负载均衡的功能! IPVS VIP

虽然docker在4台机器上,实际上网络是一同一个!ingress网络,是一个特殊的Overly网络!

B站学习网址:【狂神说Java】Docker进阶篇超详细版教程通俗易懂哔哩哔哩bilibili

第142天学习打卡(Docker yaml规则 开源项目 Docker Swarm)

原文:https://www.cnblogs.com/doudoutj/p/14829453.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!