十七、Docker Compose容器编排第二篇

news2024/10/6 2:31:10

在上一篇中我们讲解了容器编排是什么、能干什么、怎么安装、使用步骤,如果没有看的大家可以先看下:https://blog.csdn.net/u011837804/article/details/128335166,然后继续看这一篇,好了,我们继续。

 

1、Docker Componse常用命令

命令描述
docker compose --help查看容器编排命令帮助文档
docker compose up创建并启动编排的所有容器
docker compose up -d 创建并启动编排的所有容器并后台运行
docker compose down停止并删除容器、网络、卷、镜像
docker compose exec docker-compose.yml文件中写的服务id /bin/bash 进入容器实例内部
docker compose ps展示当前docker-compose编排过的运行的所有容器
docker compose top  展示当前docker-compose编排过的容器进程 
docker compose logs  yml里面的服务id 查看容器输出日志
docker compose config检查docker-compose.yml 配置是否正确
docker compose config -q  检查配置,有问题才有输出
docker compose restart重启服务
docker compose start启动服务
docker compose stop停止服务 
docker compose rm移除已停止的服务容器
docker compose kill 服务id强制停止服务容器
docker compose images 服务id      列出创建服务容器用到的镜像
docker compose pause 服务id     暂停服务容器
docker compose unpause 服务id暂停后,恢复容器

经常用的就是这些命令,我们在编排微服务项目中,看看这些命令怎么用

2、componse文件编写规范

最新官网编写规范:https://github.com/compose-spec/compose-spec/blob/master/spec.md

官网文档:Compose specification | Docker Documentation

Compose文件是一个YAML文件,在这个文件中定义了services (这个是必须的,说白了就是需要哪些镜像), networks(网络), volumes(容器卷), configs(配置) and secrets(秘钥)。

Compose文件名可以是compose.yamlcompose.ymldocker-compose.yamldocker-compose.ymlcompose.yaml但是首选的是compose.yaml ,可以多个同时存在,但时候需要设置执行先后顺序。在下面微服务项目中我们就用compose.yml 作为文件名字。

实例:我们再编写微服务项目的时候,以这个参考改写即可

# 定义服务
services:
  # 这个是我们微服务项目
  goods_test:
    # 使用那个镜像
    image: goods:1.0
    # 端口映射
    ports:
      - "8080:8080"
    # 使用网络
    networks:
      - my-net
    # 配置
    configs:
      - httpd-config
    # 秘钥
    secrets:
      - server-certificate
    # 依赖服务,这里表示  需要先启动 redis01 服务然后再启动 咱们的微服务项目 goods_test
    depends_on:
      - redis01
    # 在什么环境下启动本服务 这个和我们微服务yml文件比较类似,这里表示 在test环境下启动goods_test服务        
    profiles:
      - test
  # redis服务
  redis01:
    # redis服务使用镜像
    image: redis:6.0.8
    # 容器卷
    volumes:
      - /usr/local/tool/volumn/redis/node-2:/data
    networks:
      - my-net
# 容器卷
volumes:
  db-data:
    driver: flocker
    driver_opts:
      size: "10GiB"
# 配置
configs:
  httpd-config:
    external: true
# 定义秘钥
secrets:
  server-certificate:
    external: true
# 定义网络
networks:
  my-net: {}

3、使用Docker Componse 编排微服务项目

概述:我们创建jdk1.8的springboot项目hello_docker,并且连接redis,提供redis crud接口

2.1、开发springboot项目

  • 项目整体结构

  • pom
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.liuchao</groupId>
    <artifactId>hello_docker</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>hello_docker</name>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.0</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--spring cloud alibaba-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <!--deploy 时忽略-->
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
  • yml
## 激活对应的profile
spring:
  application:
    name: hello_docker
---
#################################本地环境##########################
server:
  port: 6001
spring:
  redis:
    host: redis01
    port: 6379
  config:
    activate:
      on-profile: local
---
#################################测试环境##########################
server:
  port: 7001
spring:
  redis:
    host: redis01
    port: 6379
  config:
    activate:
      on-profile: test
---
#################################生产环境##########################
server:
  port: 8001
spring:
  redis:
    host: redis01
    port: 6379
  config:
    activate:
      on-profile: prod
---

注意:这里连接redis是以服务名称来连接的,应为docker中容器IP可能变化,实际生产中需要以服务名称连接各项中间件。

  • 启动类
package com.liuchao.liuchao;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author liuchao
 * @date 2022/12/13
 */
@SpringBootApplication
public class DockerApplication {
    public static void main(String[] args) {
        SpringApplication.run(DockerApplication.class, args);
    }
}
  • controller
package com.liuchao.liuchao.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author liuchao
 * @date 2022/12/13
 */
@RestController
@RequestMapping("/test")
public class TestController {

    @Autowired
    RedisTemplate redisTemplate;

    /**
     * 存储至redis
     *
     * @param key
     * @param val
     * @return java.lang.String
     * @author liuchao
     * @date 2022/12/16
     */
    @GetMapping("/save/{key}/{val}")
    public String save(@PathVariable String key, @PathVariable String val) {
        redisTemplate.opsForValue().set(key, val);
        return "ok";
    }

    /**
     * 从redis获取
     *
     * @param key
     * @return java.lang.String
     * @author liuchao
     * @date 2022/12/16
     */
    @GetMapping("/get/{key}")
    public String get(@PathVariable String key) {
        return redisTemplate.opsForValue().get(key) + "";
    }

}

2.1、编写Dockerfile文件并构建镜像

  • Dockerfile内容
# 基础镜像使用java
FROM java:8
 
# 作者
MAINTAINER liuchao
 
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
 
# 将jar包添加到容器中并更名为hello_docker.jar
ADD hello_docker-1.0-SNAPSHOT.jar hello_docker.jar

# 运行 这里指定启动环境
RUN bash -c 'touch /hello_docker.jar'
ENTRYPOINT ["java","-jar","/hello_docker.jar", "--spring.profiles.active=test"]

# 暴露端口
EXPOSE 7001 
  • 构建镜像

构建命令:”docker build -t hello_docker:1.0 .“

2.2、编写docker-componse.yml文件

# 定义服务
services:
  # 服务项目
  hello_docker:
    # 使用那个镜像
    image: hello_docker:1.0
    # 端口映射
    ports:
      - "7001:7001"
    # 使用网络
    networks:
      - my-net
    depends_on:
      - redis01
  # redis服务
  redis01:
    # redis服务使用镜像
    image: redis:6.0.8
    # 端口映射
    ports:
      - "6379:6379"
    # 容器卷
    volumes:
      - /usr/local/tool/volumn/redis/node-001:/data
    networks:
      - my-net
# 定义网络
networks:
  my-net: {}

2.3、创建并启动容器

涉及命令:

  • 创建并前台启动容器:docker compose up  
  • 创建并后台启动容器:docker compose up  -d

调用接口向redis存储数据

 调用接口从redis中获取数据

 以:” docker compose exec redis01 /bin/bash“ 命令进入redis验证数据是否已存储成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gl-Camera

我的服务原文访问&#xff1a;Camera 1.创建摄像机的坐标系&#xff0c;&#xff08;创建原理&#xff0c;两条直线求其法向量&#xff09; Z轴:在世界坐标中指向摄像机的向量&#xff08;D&#xff09; X轴&#xff1a;随便找一个向上量和Z向量求出的法向量就是X轴&#xf…

PostgreSQL数据库TableAM——Table scan callbacks

TableAM Table scan TableAM提供了如下4个接口用于实现表数据的扫描功能。scan_begin函数的形参nkeys不为零&#xff0c;则扫描结果需要根据scan keys先进行过滤&#xff1b;pscan如果不为null&#xff0c;说明该结构体已经由parallelscan_initialize初始化过了(仅仅在table_b…

初识Docker:(5)Docker自定义镜像

初识Docker&#xff1a;&#xff08;5&#xff09;Docker自定义镜像镜像结构Dockerfile语法什么是Dockerfile构建Java项目案例1&#xff1a;基于ubuntu镜像构建一个新镜像&#xff0c;运行一个java项目案例2&#xff1a;基于java:8-alpine镜像&#xff0c;将一个java项目构建为…

Java+JSP机房课表管理系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用技术CSSJavaScriptMySQLServlet、MySQL数据库、项目含有源码、配套开发软件、软件安装教程、项目发布教程等 项目功能介绍&#xff1a; 系统管理&#xff1a;包含用户的注册&#xff0c;管理&#xff0c;信息修改 课程管理&#xff1a;包含课程录入、维…

IT大侦“碳”:VxRail的可持续法宝

环境Environmental      社会责任Social Responsibility      企业治理Corporate Governance      随着碳达峰、碳中和的逐步推进,越来越多的“大厂”或各行业的明星企业都开始重视自己的ESG报告,已然成为了商界新风尚。      可持续发展战略也与前沿技术密切相…

matlab神经网络求解最优化,matlab神经网络训练数据

1、神经网络的准确率是怎么计算的&#xff1f; 其实神经网络的准确率的标准是自己定义的。 我把你的例子赋予某种意义讲解&#xff1a; 1&#xff0c;期望输出[1 0 0 1]&#xff0c;每个元素代表一个属性是否存在。像着4个元素分别表示&#xff1a;是否肺炎&#xff0c;是否肝…

哈希知识点

目录对比map/set1. unordered系列关联式容器1.1 unordered_map2. 底层结构2.1 哈希概念2.2 哈希冲突2.3 哈希函数2.4 哈希冲突解决2.4.1 闭散列线性探测和二次探测扩容&#xff08;负载因子&#xff09;闭散列实现的hash2.4.2 开散列概念开散列思考实现模拟实现模板参数列表的改…

Java项目:springboot农业物资管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 农业物资管理系统&#xff0c;管理员可以对角色进行配置&#xff0c;分配用户角色&#xff1b; 主要功能包含&#xff1a;登录、注册、修改密码…

并查集解决重复员工问题

简介 工作一年多了&#xff0c;天天CRUD&#xff0c;终于以前学习的算法排上用场了。 背景 我们的系统在用户注册时没有校验身份id&#xff08;身份证&#xff09;和电话号码的唯一&#xff0c;可能使用相同的身份id或者电话号码创建多个账号&#xff0c;导致有些人开多个账…

面试者推荐 |【Redis面试专题】「常见问答系列」透析Redis常见技术相关的问题1~10题(进阶)

&#x1f4da; 前提回顾 首先如果没有阅读【面试者推荐 |【Redis面试专题】「常见问答系列」透析Redis常见技术相关的问题1~10题&#xff08;基础&#xff09; 】&#xff0c;简易先去看看基础10题&#xff0c;因为循序渐进才是正道&#xff0c;哈哈。 &#x1f4da; 1. Redis…

WebRTC源码之RTCPReceiver源码分析

WebRTC源码之RTCPReceiver源码分析 WebRTC源码之RTCPReceiver源码分析WebRTC源码之RTCPReceiver源码分析前言一、 RTCP接受数据的流程的堆栈信息的1、网络io 线程读取数据2、 线程切换的代码3、 线程切换 gcc二、 RTCPReceiver::IncomingPacket方法读取RTCP数据的格式1、 Parse…

【PyTorch深度学习项目实战100例】—— 基于DPCNN实现电商情感分析任务 | 第79例

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

随机种子 3407 is all you need

文 | 天于刀刀你最常用的随机种子是哪个&#xff1f;在刀刀的团队里&#xff0c;关于随机种子的设置主要分化为两派~玄学派&#xff0c;可能设置为自己的纪念日&#xff0c;又或者是星座预测中的本月幸运数字&#xff1b;以及&#xff0c;自然派&#xff0c;随机种子是啥其实无…

Java项目:springboot健身房管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为后台管理系统&#xff1b; 主要功能如下&#xff1a; 管理员登录模块 会员管理模块 教练管理模块 课程管理模块 器材管理模块 物品遗失…

一些常见的移动端适配方案,你了解吗?

前言 移动端设备的尺寸很多&#xff0c;而 UI 设计稿一般只会基于一个尺寸&#xff08;一般是 375px 或 750px &#xff09;进行设计。 目前移动端适配方案有多种&#xff0c;本文将介绍一些具有代表性的适配方案。 媒体查询 media CSS3 中的媒体查询属性 media 分别为不同…

量子计算(十七):量子计算机硬件

文章目录 量子计算机硬件 一、量子芯片支持系统 二、量子计算机控制系统 量子计算机硬件 量子计算机的核心——量子芯片&#xff0c;具有多种不同的呈现形式。绝大多数量子芯片&#xff0c;名副其实地&#xff0c;是一块芯片&#xff0c;由集成在基片表面的电路结构构建出包…

关于 Camera 开始 Tuning 时的一些注意事项

1、问题背景&#xff1a; 最近有调试一个体感游戏机上带 Camera 的项目&#xff0c;原定搭配 ov13855 这颗 sensor, 但由于各种各样的问题&#xff0c;导致做了很多无用功&#xff0c;且各种延期。 本文主要总结下此次项目遇到的问题&#xff0c;及产品开始 tuning 时的一些注意…

【折腾服务器 4】ESXi 中 Ubuntu 安装 NPS 客户端 ( NPC )

Catch Up 书接上回&#xff0c;上一章中&#xff0c;群晖已经能定期给 Windows 物理机服务器做备份了&#xff0c;但是依然无法从外网访问服务器上的内容&#xff0c;本篇讲述如何在 Ubuntu 中安装 NPS 客户端&#xff0c;也就是所谓的 NPC ( Client )。 Chapter 1 准备一个 …

C#语言实例源码系列-实现FTP下载文件

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

SpringSecurity(十)【CSRF 漏洞保护】

十、CSRF 漏洞保护 简介 CSRF&#xff08;Cross-Site Request Forgery 跨站请求伪造&#xff09;&#xff0c;也可称为一键式攻击&#xff08;one-click-attack&#xff09;通常缩写为 CSRF 或者 XSRF。CSRF 攻击是一种挟持用户在当前已登录的浏览器上&#xff0c;发送恶意请求…