【2】Docker Compose编排

news2024/11/17 9:31:50

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.coloradmin.cn/o/1338882.html

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

相关文章

Python——yolov8识别车牌2.0

目录 一、前言 二、关于项目UI 2.1、修改界面内容的文本 2.2、修改界面的图标和图片 三、项目修改地方 四、其他配置问题 一、前言 因为后续有许多兄弟说摄像头卡顿,我在之前那个MATS上面改一下就可以了,MAST项目:基于YOLOv8的多端车流检…

51 单片机基础

一、51 单片机 开发环境配置,vscodeSDCC 编辑器、编译器 最常用的集成开发环境 keil c51 1、vscode SDCC 开发环境搭建 vscode 插件( 或者 PlatformIO IDE) EIDE 的使用:详细自学 PlatformIO IDE:详细自学 vsc…

C#高级 02异步编程

基础知识 1.什么是异步任务 包含了异步任务的各种状态的一个引用类型 1)正在运行、完成、结果、报错等 2)另有ValueTask值类型版本对于异步任务的抽象 1)开启异步任务后,当前线程并不会阻塞,而是可以去做其他事情 2)异步任务(默认&#xff…

HTTP是怎么泄露账户密码的?

近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。 那么HTTPS和HTTP的区别在…

2023年总结:反复纠结与成长的一年

前言 这是我第五年写年度总结: 《2022年总结:道阻且长,行则将至》 《2021年总结:前路有光,初心莫忘》 《2020年总结,所有努力只为一份期待》 《2019年总结,平凡的我仍在平凡的生活》 现在…

LeetCode206反转链表(java实现)

今天带来的题目解析是leetcode206,反转链表,我们来看下题目描述 如何实现链表的反转呢?我在这里提供的思路是双指针的思路。 具体的思路如下: 假设我们的原链表如下 首先定义一个指针pre,用于指向head之前的位置&am…

RHCE9学习指南 第7章 服务管理

刚装好Windows系统时,需要进行一些优化,如下图所示。 右键单击所得菜单,可以看到一些按钮包括重启、停止、启动该服务。这些管理的是这个服务的当前状态。 双击服务名,在启动类型中设置的是系统启动时,这个服务要不要…

【elk-day01】es和kibana搭建及验证---Mac-Docker

Mac系统使用Docker下载搭建和验证eskibana Docker下载安装es安装es验证kibana安装kibana验证 Docker下载安装 Docker Desktop官网安装下载地址 说明一下为什么要安装desktop版本的docker,因为docker作为工具使用,我们需要的是开箱即用,没有必…

基于Python的城市热门美食数据可视化分析系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从XX点评APP采集北京市的餐饮商铺数据,利用数据挖掘技术对北京美食的分布、受欢迎程度、评价、评论、位置等情况进行了深入分析,方便了解城市美食店…

sheng的学习笔记-【中】【吴恩达课后测验】Course 4 -卷积神经网络 - 第四周测验

课程4_第4周_测验题 目录 第一题 1.面部验证只需要将新图片与1个人的面部进行比较,而面部识别则需要将新图片与K个人的面部进行比较。 A. 【  】正确 B. 【  】错误 答案: A.【 √ 】正确 第二题 2.在人脸验证中函数d(img1,img2)起什么作用&a…

每周一算法:邻值查找

给定一个长度为 n n n的序列 A A A&#xff0c; A A A中的数各不相同。 对于 A A A 中的每一个数 A i A_i Ai​&#xff0c;求&#xff1a; m i n 1 ≤ j < i ∣ A i − A j ∣ min_{1≤j<i}|A_i−A_j| min1≤j<i​∣Ai​−Aj​∣&#xff0c;以及令上式取到最小值的…

2023版本QT学习记录 -8- HTTP获取图片并且显示(大数据)

———————HTTP获取图片——————— &#x1f384;效果演示 &#x1f384;HTTP请求图片思维导图 &#x1f384;添加组件 &#x1f384;添加头文件 #include "mainwindow.h" #include "ui_mainwindow.h" #include "qnetworkaccessmanager.h&qu…

【Unity入门】PlayerPrefs的简介与使用

目录 PlayerPrefs储存位置用例注意事项 PlayerPrefs PlayerPrefs 是Unity内置的一个静态类&#xff0c;可以用于存储一些简单的数据类型&#xff1a;int ,string ,float。 分别对应的函数为&#xff1a; SetInt()&#xff1a;保存整型数据GetInt()&#xff1a;读取整形数据Se…

css 超过一行/多行显示省略号... - 附示例

效果 1、超过一行 2、超过多行 - 以两行为例 二、示例代码 1、超过一行 margin: 20px; width: 50px; border: 1px solid red; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 2、超过多行 - 以两行为例 margin: 20px; width: 50px; border: 1px solid r…

Unity is running with Administrator privileges, which is not supported

Unity is running with Administrator privileges, which is not supported 如果还是弹出CMD窗口提示输入密码&#xff0c;但无法怎样都无法输入&#xff0c;请关闭窗口&#xff0c;然后右键快捷方式管理员运行一次。 ----------分割线---------- 为什么这样做&#xff1f; 很…

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-…

深入了解Python中文件IO的使用技巧,提高代码处理效率!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python提供了强大而灵活的文件I/O&#xff08;输入/输出&#xff09;工具&#xff0c;能够读取、写入和处理各种文件类型。本文将深入介绍Python文件I/O的技巧和示例代码&#xff0c;帮助大家更好地理解如何在Py…

Hive实战:词频统计

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据文件1、在虚拟机上创建文本文件2、将文本文件上传到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、基于HDFS文件创建外部表4、利用Hive SQL…

DRF从入门到精通五(路由组件、认证组件、权限组件、频率组件及认证、权限源码分析)

文章目录 一、路由组件REST framework提供了两个routeraction装饰器 二、认证组件(Authentication)三、权限组件(Permissions)内置权限类 四、频率组件(Throttling)五、权限组件源码分析六、认证组件源码分析 一、路由组件 对于视图集ViewSetMixin&#xff0c;我们除了可以自己…

Swift 周报 第四十二期

文章目录 前言新闻和社区苹果 CEO 库克透露接班计划&#xff0c;希望继任者来自公司内部消息称苹果自研 5G 调制解调器开发再“难产”&#xff0c;将推迟到 2026 年 提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组整理周报的第四十二期&…