【2】Docker Compose编排

Docker Compose 使用

Docker 帮助我们解决服务的打包安装的问题,随着而来的问题就是服务过多的带来如下问题:

  1. 多次使用 Dockerfile、Build、Image 命令或者 DockerHub 拉取 Image;
  2. 需要创建多个 Container,多次编写启动命令;
  3. Container 互相依赖的如何进行管理和编排。

Compose 是一个用于定义和运行多容器的 Docker 应用的工具。使用 Compose,你可以在一个配置文件(yaml格式)中配置你应用的服务,然后使用一个命令,即可创建并启动配置中引用的所有服务。
image.png

Compose 使用的三个步骤:

  1. 使用 Dockerfile 定义应用程序的环境
  2. 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行
  3. 最后,执行 docker compose up 命令来启动并运行整个应用程序

Docker Compose 管理容器的结构

Docker Compose 将所管理的容器分为三层,分别是工程( project),服务(service)以及容器(container)。Docker Compose 运行目录下的所有文件( docker-compose.yml、 extends 文件或环境变量文件等)组成一个工程(默认为 docker-compose.yml 所在目录的目录名称)。一个工程可包含多个服务,每个服务中定义了容器运行的镜像、参数和依赖,一个服务可包括多个容器实例。
同一个 docker compose 内部的容器之间可以用服务名相互访问,服务名就相当于 hostname,可以直接 ping 服务名,得到的就是服务对应容器的 ip,如果服务做了扩容,一个服务对应了多个容器,则 ping 服务名会轮询访问服务对应的每台容器 ip ,docker 底层用了 LVS 等技术帮我们实现这个负载均衡。

Docker Compose.yml 常用指令

  • image

指定镜像名称或者镜像 id,如果该镜像在本地不存在,Compose 会尝试 pull 下来。
示例:

image: java
  • build

指定 Dockerfile 文件的路径。可以是一个路径,例如:

build: ./dir

也可以是一个对象,用以指定 Dockerfile 和参数,例如:

build:
	context: ./dir
	dockerfile: Dockerfile-alternate
	args:
		buildno: 1
  • command

覆盖容器启动后默认执行的命令。
示例:

command: bundle exec thin -p 3000

也可以是一个 list,类似于 Dockerfile 中的 CMD 指令,格式如下:

command: [bundle, exec, thin, -p, 3000]
  • links

显示链接到其他服务中的容器。可以指定服务名称和链接的别名使用 SERVICE:ALIAS 的形式,或者只指定服务名称,示例:

web:
	links:
    - db
    - db:database
    - redis
  • external_links

表示链接到 docker-compose.yml 外部的容器,甚至并非 Compose 管理的容器,特别是对于那些提供共享容器或共同服务。格式跟 links 类似,示例:

external_links:
  - redis_1
  - project_db_1:mysql
  - project_db_1:postgresql
  • ports

暴露端口信息。使用宿主端口:容器端口的格式,或者仅仅指定容器的端口(此时宿主机将会随机指定端口),类似于 docker run -p ,示例:

ports:
  - "3000"
	- "3000-3005"
	- "8000:8000"
	- "9090-9091:8080-8081"
	- "49100:22"
	- "127.0.0.1:8001:8001"
	- "127.0.0.1:5000-5010:5000-5010"
  • expose

暴露端口,只将端口暴露给连接的服务,而不暴露给宿主机,示例:

expose:
	- "3000"
	- "8000"
  • volumes

卷挂载路径设置。可以设置宿主机路径(HOST:CONTAINER)或加上访问模式(HOST:CONTAINER:ro)。示例:

volumes:
	# Just specify a path and let the Engine create a volume
	- /var/lib/mysql

	# Specify an absolute path mapping
	- /opt/data:/var/lib/mysql

	# Path on the host, relative to the Compose file
	- ./cache:/tmp/cache

	# User-relative path
	- ~/configs:/etc/configs/:ro

	# Named volume
	- datavolume:/var/lib/mysql
  • volumes_from

从另一个服务或者容器挂载卷。可以指定只读或者可读写,如果访问模式没有指定,则默认是可读写。示例:

volumes_from:
	- service_name
	- service_name:ro
	- container:container_name
	- container:container_name:rw
  • environment

设置环境变量。可以使用数组或者字典两种方式。只有一个 key 的环境变量可以在运行 Compose 的机器上找到对应的值,这有助于加密的或者特殊主机的值。示例:

environment:
	RACK_ENV: development
	SHOW: 'true'
	SESSION_SECRET:

environment:
	- RACK_ENV=development
	- SHOW=true
	- SESSION_SECRET
  • env_file

从文件中获取环境变量,可以为单独的文件路径或列表。如果通过 docker-compose -f FILE 指定了模板文件,则 env_file 中路径会基于模板文件路径。如果有变量名称与 environment 指令冲突,则以 envirment 为准。示例:

env_file: .env

env_file:
	- ./common.env
	- ./apps/web.env
	- /opt/secrets.env
  • extends

继承另一个服务,基于已有的服务进行扩展。

  • net

设置网络模式。示例:

net: "bridge"
net: "host"
net: "none"
net: "container:[service name or container name/id]"
  • dns

配置 dns 服务器。可以是一个值,也可以是一个列表。示例:

dns: 8.8.8.8

dns:
	- 8.8.8.8
	- 9.9.9.9
  • dns_search

配置 DNS 的搜索域,可以是一个值,也可以是一个列表,示例:

dns_search: example.com

dns_search:
	- dc1.example.com
	- dc2.example.com
  • 其他

docker-compose.yml 还有很多其他命令,这里仅挑选常用命令进行讲解,其它不作赘述。如果感兴趣的,可以参考 docker-compose.yml 文件官方文档:https://docs.docker.com/compose/compose-file/

利用Docker Compose部署nacos环境

参考:https://nacos.io/zh-cn/docs/quick-start-docker.html

1)创建一个空目录 docker-mall

2)在 docker-mall 目录下新建一个编排文件 docker-compose-env.yml,内容如下:

version: '3'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    ports:
     - 3306:3306
		restart: always
  	volumes:
			- ./mysql:/var/lib/mysql
		environment:
  		- MYSQL_ROOT_PASSWORD=root
			- MYSQL_DATABASE=nacos
			- MYSQL_USER=nacos
			- MYSQL_PASSWORD=nacos
		command: --default-authentication-plugin=mysql_native_password
	nacos:
  	image: nacos/nacos-server:v2.1.0
  	container_name: nacos
		volumes:
			- ./nacos/logs/:/home/nacos/logs
			- ./nacos/init.d/:/home/nacos/init.d
		ports:
			- "8848:8848"
			- "9848:9848"
  		- "9555:9555"
		environment:
			- PREFER_HOST_MODE=hostname
			- MODE=standalone
			- SPRING_DATASOURCE_PLATFORM=mysql
			- MYSQL_SERVICE_HOST=mysql
			- MYSQL_SERVICE_DB_NAME=nacos
			- MYSQL_SERVICE_PORT=3306
			- MYSQL_SERVICE_USER=nacos
			- MYSQL_SERVICE_PASSWORD=nacos
			- MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
		depends_on:
			- mysql
		restart: always

3)启动 compose,在 docker-mall 目录执行如下命令:

docker compose -f docker-compose-env.yml up -d

执行成功后会启动 nacos 容器,可以通过[http://192.168.65.174:8848/nacos/index.html](http://192.168.65.174:8848/nacos/index.html)访问 nacos 控制台。

4)访问 nacos 控制台,并导入项目微服务相关配置。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探究Android DreamService的梦幻世界

探究Android DreamService的梦幻世界 引言 DreamService的概述 在Android开发中,DreamService是一种特殊类型的服务,它可以用于创建梦幻世界的屏保应用。梦幻世界是一种用户界面显示模式,当设备进入空闲状态时,系统会自动启动D…

qt项目-《图像标注软件》源码阅读笔记-类图

1. 开源项目链接 GitHub - jameslahm/labelme: A image annotation software for 2D or 3D images 2. 项目界面 3. 项目类图 全部类图: 3.1 Shape 形状的绘制及形状的存储 qt项目-《图像标注软件》源码阅读笔记-Shape类绘图及其子类-CSDN博客 负责形状的绘制及…

unknown variable ‘authentication_policy=mysql_native_password‘

unknown variable authentication_policymysql_native_password 背景解决尝试一尝试二(解决) 总结 背景 mac上安装多个版本数据库。我是通过dma安装的,先装的5.7,再装的5.8,然后5.8的能正常用,5.7的启动不起来。报错信息为如下 …

C++ Qt开发:QItemDelegate自定义代理组件

老规矩,首先推荐好书: Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍…

程序员如何高效学习技术?

我们相信努力学习一定会有收获,但是方法不当,既让人身心疲惫,也没有切实的回报。 不少朋友每天都阅读技术文章,但是第二天就忘干净了。工作中领导和同事都认可你的沟通和技术能力,但是跳槽面试却屡屡碰壁。面试官问技术…

龙芯loongarch64服务器编译安装scikit-learn

前言 根据我之前的文章介绍,龙芯loongarch64服务器中的很多python依赖包安装有问题,发现其中安装的"scikit-learn"就无法正常使用,会报如下错误No module named sklearn.__check_build._check_build: 解决办法 从第三方…

java keytool.exe ssl

JDK如果没有先安装 JDK8 install_jdk aleady install-CSDN博客 java keytool.exe ssl keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore D:\server.keystore -validity 3650 server.ssl.key-storeD:\server.keystore server.ssl.key-…

吉他初学者学习网站搭建系列(6)——如何根据歌名查歌词

文章目录 背景实现track.searchtrack.lyrics.get 效果存在问题 背景 当你想要扒歌时,第一件事就是如何先拿到一首歌的歌词。当然,你可以去复制粘贴,但是如果可以在网站中直接搜到,那就太棒了。 实现 这里用到了国外的API https…

【Redis刨析】知识图谱的构建与实现

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言引用构建过程Redis的知识图谱构建过程Redis介绍快的原因持久化 引用 对于编程的学习,过了初级阶段,我认为应该减少对视频的依赖&am…

主动学习如何解决数据标注的难题?主动学习和弱监督学习有何区别?

机器学习的成功与否取决于数据标注的质量和数量。利用主动学习的机器学习技术能加快模型训练的进度和减少数据获取的资金投入。依靠主动学习来得到有价值的数据,以便机器模型从中学习。如果一个模型被具有价值的数据加以训练,它将以较少的人工标注和更短…

istio 示例程序 bookinfo 快速部署

官网 文档位置 相关 yaml 资源下载 Bookinfo 应用分为四个单独的微服务: productpage:这个微服务会调用 details 和 reviews 两个微服务,用来生成页面details:这个微服务中包含了书籍的信息reviews:这个微服务中包含了…

【SpringCloud笔记】(11)消息驱动之Stream

Stream 技术背景 底层不同模块可能使用不同的消息中间件,这就导致技术的切换,微服务的维护及开发变得麻烦起来 概述 官网: https://spring.io/projects/spring-cloud-stream#overview https://cloud.spring.io/spring-cloud-static/spring…

springcloud微服务篇--6.网关Gateway

一、为什么需要网关? 网关功能: 身份认证和权限校验 服务路由、负载均衡 请求限流 在SpringCloud中网关的实现包括两种: gateway zuul Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的Web…

Java学习笔记(八)——面向对象编程(高级)

目录 一、类变量和类方法 (一)类变量/静态变量 类变量内存布局 类变量使用注意事项和细节 (二)类方法 类方法经典的使用场景 类方法使用注意事项和细节 二、理解main方法语法 三、代码块 代码块使用注意事项和细节 四、…

FQML_AXI_GPIO工程构建调试记录

FQML_AXI_GPIO工程构建调试记录 一、概述 此记录JFMQL15T开发板,实现ps通过axi接口控制pl 的EMIO接口led闪烁,添加EMIO PJTAG用于PS端调试,先创建vivado工程,最终生成bitstream,procise从vivado中导入工程&#xff0…

深度学习 | 基本循环神经网络

1、序列建模 1.1、序列数据 序列数据 —— 时间 不同时间上收集到的数据,描述现象随时间变化的情况。 序列数据 —— 文本 由一串有序的文本组成的序列,需要进行分词。 序列数据 —— 图像 有序图像组成的序列,后一帧图像可能会受前一帧的影响…

GA/T1400公安视图库在视频监控系统中对接及方案

公安视频图像信息应用系统系列标准,标号为GA/T 1400,现行版本为2017年版,由公安部发布。现较广泛地使用于平安城市安防监控系统、智慧城市安防监控系统、雪亮工程安防监控系统之中。 公安视频图像信息应用系统系列标准,共分为4个部…

java美容管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web美容管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

电路设计(8)——计时器的multism仿真

1.功能设计 这是一个计时电路,在秒脉冲的驱动下,计时器开始累加,6个数码管分别显示计时的 时:分:秒。 仿真图如下所示: 左边的运放构成了振荡电路,可以产生脉冲波。这个脉冲波给计时电路提供基准…