Docker高级篇之Docker-compose容器编排

2024-06-10 12:04

本文主要是介绍Docker高级篇之Docker-compose容器编排,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1. Docker-compse介绍
    • 2. Docker-compse下载
    • 3. Docker-compse核心概念
    • 4. Docker-compse使用案例

1. Docker-compse介绍

Docker-compose时Docker官方的一个开源的项目,负责对Docker容器集群的快速编排。Docker-compose可以管理多个Docker容器组成一个应用,你需要定义一个YAML格式的配置文件,docker-compose.yml,写好多个容器之间的调用关系,然后,只需要一个命令,就能同时启动/关闭这些容器。

docker建议我们每个容器中只运行一个服务,因为docker容器本身占用的资源比较少,所以是将每个服务单独的分割开来,但是这样我们又面临一个问题?

如果我们需要同时部署多个服务,难道我们要给每个服务单独写Dockerfile然后构建镜像,构建容器,这样是很麻烦的,所以docker官方为我们提供了docker-compos多服务部署的工具。例如现在我们需要实现一个web微服务项目,除了web服务容器本身,往往还需要加上后端的mysql服务器,redis服务器,注册中心,甚至还包括nginx负载均衡容器等。Compose运行用户通过docker-compose.yml来定义一组相关联的应用容器为一个项目,这样就可以很容器地用一个配置文件定义一个多容器应用,然后使用一条指令安装这个应用的所有依赖,完成构建。docker-compose解决了容器和容器之间如何编排的问题。

2. Docker-compse下载

官网下载的位置为:https://docs.docker.com/compose/install/

安装Docker Compose最简单也是最推荐的方法是安装Docker Desktop。Docker Desktop包括Docker Compose、Docker Engine和Docker CLI,它们是Docker Compose的先决条件。这里我Mac电脑上面是直接安装了docker desktop,自带按照了docker compose,所以如何安装我就不演示了,网上也有很多教程。
在这里插入图片描述
我们可以查看docker compose的版本:

docker-compose --version

在这里插入图片描述

3. Docker-compse核心概念

docker-compose的核心概念就是一个文件,两个要素。其中一个文件是docker-compose.yml。两个要素分别是服务和工程。服务指的是一个个应用容器的实例,比如订单微服务、库存微服务、mysql容器、nginx容器或者redis容器。工程就是由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。

使用docker-compose的步骤如下:

  • 编写dockerfile定义各个微服务应用并构建出对应的镜像文件
  • 使用docker-compose.yml定义一个完整业务单元,安排好整体应用中的各个容器服务
  • 最后,执行docker-compose up命令来启动并运行整个应用程序,完成一键部署上线

docker-compose的常见命令如下:

命令解释
docker-compose -h查看帮助
docker-compose up启动所有docker-compose服务
docker-compose up -d启动所有docker-compose服务并在后台运行
docker-compose down停止并删除容器、网络、卷以及镜像
docker-compose exec yml里面的服务id进入容器实例内部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 config -q检查配置,有问题才有输出
docker-compose restart重启服务
docker-compose start启动服务
docker-compose stop停止服务

4. Docker-compse使用案例

改造前面使用过的docker_boot案例:

  • SQL建表建库
CREATE TABLE `t_user` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`username` varchar(50) NOT NULL DEFAULT '' COMMENT '用户名',`password` varchar(50) NOT NULL DEFAULT '' COMMENT '密码',`sex` tinyint(4) NOT NULL DEFAULT '0' COMMENT '性别 0=女 1=男',`deleted` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '删除标志,默认0不删除,1删除',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1114 DEFAULT CHARSET=utf8 COMMENT='用户表';
  • 下载项目

链接:https://pan.baidu.com/s/1f2aMCKGToDp6DwPLKMJUXw
提取码:cbwn

  • 编写Dockerfile
#基础镜像使用java
FROM java:8#作者
MAINTAINER jackiechai#VOLUE指定临时文件夹为/tmp。在主机指定目录下创建一个临时文件并链接到容器的/tmp
VOLUME /tmp#将jar包添加到容器并更名
ADD docker_boot-0.0.1-SNAPSHOT.jar jackiechai_docker.jar#运行jar包RUN bash -c 'touch /jackiechai_docker.jar'
ENTRYPOINT ["java","-jar","/jackiechai_docker.jar"]
#暴露端口6001作为微服务EXPOSE 6001
  • 运行docker file构建镜像
docker build -t jackiechai_docker.jar:1.6 .

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们首先不使用docker-compose来运行这个项目:

  • 是先创建mysql容器实例
docker run -p 3308:3306 --name mysql57 --privileged=true -v /Users/jackchai/Desktop/复习/Docker/boot_mysql/conf:/etc/mysql/conf.d -v /Users/jackchai/Desktop/复习/Docker/boot_mysql/logs:/logs -v /Users/jackchai/Desktop/复习/Docker/boot_mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d e00adb645cb5

在这里插入图片描述

修改mysql然后让navicat连接到mysql服务(操作流程看这篇博客:https://blog.csdn.net/a1023266384/article/details/119455841)同时创建数据库和表:

不进行这步操作可能报错:1130 - Host ‘172.17.0.1’ is not allowed to connect to this MySQL server

在这里插入图片描述

  • 然后创建redis实例
docker run -p 6379:6379 --name redis608 --privileged=true -v /Users/jackchai/Desktop/复习/Docker/boot_redis/redis.conf:/etc/redis/redis.conf -v /Users/jackchai/Desktop/复习/Docker/boot_redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
  • 启动镜像
docker run -d -p 6001:6001 [镜像id]

在这里插入图片描述

  • 进行swagger测试

在这里插入图片描述
在这里插入图片描述

数据插入成功

在这里插入图片描述

数据查找成功

上面我没使用docker-compose玩成了服务的部署。但是会存在下面这些问题:

  • 先后顺序要求固定,先mysql+redis部署,才能进行微服务的部署
  • 运行了多个run命令
  • 容器间的启停或宕机,有可能导致ip地址对应的容器实例变化,映射出错,要么生产ip写死,要么通过服务调用

使用docker-compose来运行这个项目:

  • 编写docker-compose.yml文件
version: "3"
services:microService:image: jackiechai_docker.jar:1.6container_name: ms01ports:- "6001:6001"volumes:- /Users/jackchai/Desktop/复习/Docker/boot/microService:/datanetworks:- jack_netdepends_on:- redis- mysql
redis:image: redis:6.0.8ports:- "6379:6379"volumes:- /Users/jackchai/Desktop/复习/Docker/boot_redis/redis.conf:/etc/redis/redis.conf - /Users/jackchai/Desktop/复习/Docker/boot_redis/data:/datanetworks:- jack_netcommand: redis-server /etc/redis/redis.confmysql:image: mysql/mysql-server:5.7environment:MYSQL_ROOT_PASSWORD: '123456'MYSQL_ALLOW_EMPTY_PASSWORD: 'no'MYSQL_DATABASE: 'db2024'MYSQL_USER: 'jackiechai'MYSQL_PASSWORD: '123456'ports:- "3307:3306"volumes:- /Users/jackchai/Desktop/复习/Docker/boot_mysql/db:/var/lib/mysql- /Users/jackchai/Desktop/复习/Docker/boot_mysql/conf/my.cnf:/etc/my.cnf- /Users/jackchai/Desktop/复习/Docker/boot_mysql/init:/docker-entrypoint-initdb.dnetworks:- jack_netcommand: --default-authentication-plugon=mysql_native_password
networks:jack_net

在这里插入图片描述

  • 然后修改微服务的配置,将固定地址访问改成服务名访问
server.port=6001
# ========================alibaba.druid????=====================
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://mysql:3307/db2024?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.druid.test-while-idle=false
# ========================redis????=====================
spring.redis.database=0
spring.redis.host=redis
spring.redis.port=6379
spring.redis.password=
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0
# ========================mybatis????===================
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.wang.docker.entities
# ========================swagger=====================
spring.swagger2.enabled=true

然后重新打包

  • 然后运行docker-compose

首先我们需要坚持docker-compose是否出现语法错误:

docker-compose config -q

如果docker-compose.yml没有任何错误,它不会出现任何提示

然后我们可以运行docker-compose了

docker-compose up -d

在这里插入图片描述
然后我们进入mysql建库建表:

docker exec -it c265227ba92a bash

在这里插入图片描述

  • 最后我们使用swagger进行测试

同样可以执行成功,这里就不演示了。

这篇关于Docker高级篇之Docker-compose容器编排的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF