• docker容器编排原来这么丝滑~


    前言:

    请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i

    概念介绍:

     Docker

    Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker创建,运行在Docker中,其他相关的容器技术都是以Docker为基础,它是我们使用其他容器技术的核心。

     Docker-Compose

    前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知

    优点:

    根据定义的docker-compose.yaml配置文件批量容器编排,轻松高效的管理容器定义,Docker就会按照你声明的配置去把所有的容器启动起来及运行

    缺点:

    但是Docker-Compose只能管理当前主机上的Docker,也就是说不能去启动其他主机上的Docker容器

    使用事项:

    compose是docker官方的开源项目,需要安装!与它配对使用的是一个docker-compose.yaml文件,docker-compose命令必须在一个包含docker-compose.yaml文件目录下才能使用。

     

    Compose 使用的三个步骤:

    • 使用Dockerfile定义应用程序的环境。

    • 使用 docker-cmpose.yaml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

    • 最后,执行 docker-cmpose up 命令来启动并运行整个应用程序。

    docker-cmpose.yaml的配置案例如下(配置参数参考下文):

    version: "3.0"  # 对于docker版本号
    services:  #定义服务
      web:    #web引用,自己编写的程序,下面是应用配置
        build: . #获取当前目录下Dockerfile文件编译
        depends_on: #代表启动顺序
          - db
          - redis 
        ports:
          - "5000:5000"  #端口暴露
        volumes:  #挂载路径
          - .:/code
          - logvolume01:/var/log
        links:
          - redis
      redis:   #redis应用
        image: redis
        deploy:
          replicas: 6 #副本数
     db: #db应用
      images:postgres
    volumes:
      logvolume01: {}

    实践

    一、环境准备

    在 Linux 系统上安装 Docker

    使用compose必然需要docker

    1.1 yum安装Docker

    yum install docker    #安装docker,需要root

    1.2 查看版本

    docker --version  #查看版本

    样例输出:

    1.3 启动docker

    sudo systemctl start docker.service    #启动 Docker
    
    sudo systemctl enable docker.service   #关闭Docker

    在 Linux 系统上安装 Compose 

    由于compose是docker官方的开源项目,需要安装!!!

    1.1 下载compose

    # 国外
     sudo curl -L "https://github.com/docker/compose/releases/download/v1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 
    # 国内(推荐)
     sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

    1.2 添加可执行权限

    sudo chmod +x /usr/local/bin/docker-compose #授权

    1.3 查看版本

    docker-compose --version #查看版本

    样例输出:

    二、项目实施

    2.1 创建项目

    此处以Springboot项目为例,其pom.xml依赖如下

       <dependencies>
            <!--web依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--测试依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!--redis-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
        </dependencies>

    2.2 新增application.properties配置

    注:在此示例中,redis是应用程序网络上的 redis 容器的主机名  

    #配置启动端口
    server.port=8888
    #配置redis地址,此处指定后续dockers镜像名称
    spring.redis.host=redis  

    2.3 编写程序计数器

    package com.example.compose;
    
    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 IndexController {
    
        /**
         * .
         * 注入redis
         */
        @Autowired
        private StringRedisTemplate redisTemplate;
    
    
        /**
         * .
         * 程序计数器,每访问一次就+1
         *
         * @return
         */
        @GetMapping("/hello")
        public String hello() {
            Long views = redisTemplate.opsForValue().increment("views");
            return "hello docker compose views:" + views;
        }
    }

    2.4  创建 Dockerfile 

    在你的项目目录中,创建一个Dockerfile。有关编写 Dockerfile 更多信息,请参阅 Docker 用户指南 和Dockerfile 参考

    #指定jdk1.8
    FROM java:8
    #当前jar拷贝到容器中指定名称
    COPY *.jar /app.jar
    #程序运行时指定程序端口
    CMD ["--server-port=8888"]
    #暴露端口
    EXPOSE 8888
    #运行
    ENTRYPOINT ["java", "-jar","/app.jar"]

    2.4 编排服务

    在你的项目目录中创建一个名docker-compose.yaml的文件。定义了两个服务:composeappredis.

    version: '3.0'  #对应版本号
    
    services:
      composeapp:
        build: . #表示获取当前目录下Dockerfile文件进行编译
          #dockerfile: Dockerfile #指定当前目录下的文件
        image: composeapp  #镜像名称
        depends_on:  #优先启动
          - redis
        ports:  #端口映射
          - "8888:8888"
    
      redis:  #拉取镜像
       image: "library/redis:alpine"

    友情提示:上述版本号对比示例图。官网对比链接

    2.5 将项目打包

     

    三、服务上传启动

    3.1 Linux创建一个目录

     mkdir my_composeapp  #创建目录
    
     cd my_composeapp  #进入

    3.2 上传相关文件

    上传项目打包后的jarDockerfiledocker-compose.yaml相关配置文件

     

    3.3 启动compose服务

    注:docker-compose命令必须在一个包含docker-compose.yaml文件目录下才能使用

    docker-compose up 
    
    docker-compose up -d #-d【后台启动】
    
    docker-compose down  #关闭 【ctrl + c】

    样例输出:

     项目启动,页面输出日志

    3.4 查看运行的容器

    此处可见已拉取redis镜像并生成了容器、及已生成java项目运行容器

    3.5 访问样例

    curl localhost:8888/hello  #访问测试

    样例输出:

    至此,docker-compose使用简直在方便了!!!大大简化了我们的部署工作。学废的小伙伴记得给自己加鸡腿~

    总结:

    我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!!

    参考链接参考链接


    __EOF__

  • 本文作者: 南国以南i
  • 本文链接: https://www.cnblogs.com/bgyb/p/16113709.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    网络编程——封装和分用(图解)
    Python:使用pynvml获取和监控 NVIDIA GPU 设备的信息
    Shell:正则表达式
    element-ui文件下载(单个)
    Ubuntu将图标放置于任务栏
    为什么Vue(默认情况下)比React性能更好
    【译】32位 .NET Framework 项目的 WinForm 设计器选择
    生意不好如何逆风翻盘 | 多门店经营必读技巧(1):导购管理 连锁店管理的技巧 连锁店生意经 如何做导购管理
    操作系统权限提升(二十九)之数据库提权-SQL Server xp_cmdshell 提权
    Python编程 元组的创建
  • 原文地址:https://www.cnblogs.com/bgyb/p/16113709.html