docker-compose 服务编排及实战(五)

2024-06-16 10:38

本文主要是介绍docker-compose 服务编排及实战(五),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

docker-compose

  • docker compose 简介和安装
    • 简介
    • 安装 docker compose
  • docker compose 快速体验
  • 创建SpringBoot 项目自测
    • 项目放到容器上测试
    • 查看网络

docker compose 简介和安装

简介

官网:
https://docs.docker.com/compose/

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

使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。

官网的定义:
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。

Compose的三步最佳实战:

  1. 定义自己应用的 Dockerfile 文件。可以在任何地方构建。
  2. 使用 docker-compose.yml 定义我们的服务。这一整套服务可以一起在一个隔离环境运行。
  3. 运行 docker-compose up 就可以启动整个app。

安装 docker compose

安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

注意:
官网提供的安装地址非常的慢,不建议使用,用下面的方式安装。截至目前为止,官网最新版是 1.27.4 。

安装

curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

分配权限

chmod +x /usr/local/bin/docker-compose

查看信息

docker-compose --version

安装成功

docker compose 快速体验

我们用官网的示例,快速体验一下服务编排。

官方文档示例:
https://docs.docker.com/compose/gettingstarted/

准备工作:
如果要参照官网示例,先安装 python 工具包

sudo yum -y install epel-release
sudo yum install python-pip

安装相关镜像:

docker pull python:3.7-alpine
docker pull redis:alpine

1. 编写程序

创建工程目录

mkdir composetest
cd composetest

vi app.py

import timeimport redis
from flask import Flaskapp = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)@app.route('/')
def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.\n'.format(count)

vi requirements.txt

flask
redis

2. 编写 Dockerfile

vi Dockerfile

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

3. 编写 docker-compose.yml

version: '3'
services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"

上面步骤汇总

[root@localhost /]# mkdir composetest
[root@localhost /]# cd composetest/
[root@localhost composetest]# vi app.py
[root@localhost composetest]# vi requirements.txt
[root@localhost composetest]# vi Dockerfile
[root@localhost composetest]# vi docker-compose.yml
[root@localhost composetest]# ls
app.py  docker-compose.yml  Dockerfile  requirements.txt

注意:在复制粘贴时,一定要留意开头第一个英文单词是否完整,因为在 vi 编辑文件,复制进去的内容,开头第一个单词会不完整。

4. 发布

docker-compose up

效果如下:
在这里插入图片描述
总结:
a. 先执行:sudo yum -y install epel-release
b. 再执行:sudo yum install python-pip
c. 再安装两个相关镜像
d. 然后创建项目工程,按步骤创建文件
e. 最后 docker-compose up

需要注意的是,网络环境要很不错,不至于出现下载不了。

创建SpringBoot 项目自测

创建1
创建2
编写 controller:

package cn.com.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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/")
public class controller {@AutowiredRedisTemplate redisTemplate;@GetMapping("hello")public String hello(){Long views = redisTemplate.opsForValue().increment("views");return "welcome to homepage,views" + views;}
}

编写 application.properties:

spring.redis.host=127.0.0.1
#  端口号不写,默认6379
spring.redis.port=6379

启动本地的 redis:
启动
启动 springboot 工程:
启动

项目放到容器上测试

修改 application.properties,host 改为容器名(本地就不能再运行了)。

spring.redis.host=redis
spring.redis.port=6379

新建 dockerfile

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

新建 docker-compose.yml 文件

官网上查找对应的版本
https://docs.docker.com/compose/compose-file/
官方版本

version: '3.8'
services:springboot-master:build: .ports:- "8080:8080"image: springboot-masterdepends_on:- redisredis:image: "redis:alpine"

打包工程,并上传到服务器
在这里插入图片描述
创建工程文件
在这里插入图片描述
上传文件
上传
启动测试
可以在控制台看出执行步骤

启动
启动
测试成功。
在这里插入图片描述

注意:停止用 ctrl + c,如果用 docker-compose up 启动的话会阻塞控制台,用 docker-compose up -d 后台启动的方式。

docker-compose up --help:查看帮助命令(–help 万能)

查看网络

docker network ls

查看网络
查看网络细节:
语法:docker network inspect network_id
docker network inspect dff079aa02a5

这篇关于docker-compose 服务编排及实战(五)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1066237

相关文章

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库