【云原生-Docker】常用的 Docker Compose 配置项

news2024/12/23 22:48:37

在这里插入图片描述
🍁博客主页:👉@不会压弯的小飞侠
欢迎关注:👉点赞👍收藏留言
系列专栏:👉Docker学习专栏
学习社区:👉不会压弯的小飞侠
知足上进,不负野心。
🔥欢迎大佬指正,一起学习!一起加油!

在这里插入图片描述

目录

  • 🍁定义服务
  • 🍁指定镜像
  • 🍁依赖声明
  • 🍁文件挂载
  • 🍁使用数据卷
  • 🍁配置网络
  • 🍁端口映射


🍁定义服务

Docker Compose 文件:

version: "3"

services:

  redis:
    image: redis:3.2
    networks:
      - backend
    volumes:
      - ./redis/redis.conf:/etc/redis.conf:ro
    ports:
      - "6379:6379"
    command: ["redis-server", "/etc/redis.conf"]

  database:
    image: mysql:5.7
    networks:
      - backend
    volumes:
      - ./mysql/my.cnf:/etc/mysql/my.cnf:ro
      - mysql-data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=my-secret-pw
    ports:
      - "3306:3306"

  webapp:
    build: ./webapp
    networks:
      - frontend
      - backend
    volumes:
      - ./webapp:/webapp
    depends_on:
      - redis
      - database

  nginx:
    image: nginx:1.12
    networks:
      - frontend
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./webapp/html:/webapp/html
    depends_on:
      - webapp
    ports:
      - "80:80"
      - "443:443"

networks:
  frontend:
  backend:

volumes:
  mysql-data:

在 Docker Compose 的配置文件里,对服务的定义与创建和启动容器中的选项非常相似,Docker Compose 就是从配置文件中读取出这些内容,替我们创建和管理这些容器的。

在使用时,首先要为每个服务定义一个名称,用以区别不同的服务。

🍁指定镜像

容器最基础的就是镜像了,所以每个服务必须指定镜像。在 Docker Compose 里,可以通过两种方式为服务指定所采用的镜像。一种是通过 image 这个配置,给出能在镜像仓库中找到镜像的名称即可。

另外一种指定镜像的方式就是直接采用 Dockerfile 来构建镜像,通过 build 这个配置我们能够定义构建的环境目录,这与 docker build 中的环境目录是同一个含义。
在 docker build 里还能通过选项定义许多内容,这些在 Docker Compose 里依然可以。

## ......
  webapp:
    build:
      context: ./webapp
      dockerfile: webapp-dockerfile
      args:
        - JAVA_VERSION=1.6
## ......

在配置文件里,还能用 Map 的形式来定义 build,在这种格式下,能够指定更多的镜像构建参数,例如 Dockerfile 的文件名,构建参数等等。
对于一些可以不通过重新构建镜像的方式便能修改的内容,还是不建议重新构建镜像,而是使用原有的镜像做简单的修改。
例如上面的配置里,希望修改 Redis 的启动命令,加入配置文件以便对 Redis 服务进行配置,那么可以直接通过 command 配置来修改。而在 MySQL 的定义,通过 environment 配置为 MySQL 设置了初始密码。
由于 Docker Compose 的配置已经固化下来,所以不需要担心忘记之前执行了哪些命令来启动容器,当每次需要开启或关闭环境时,只需要 docker-compose up -d 和 docker-compose down 命令,就能轻松完成操作。

🍁依赖声明

在 Docker Compose 的配置文件里定义服务,在书写上有由上至下的先后关系,但实际在容器启动中,由于各种因素的存在,其顺序还是无法保障的。
所以,如果服务间有非常强的依赖关系,就必须告知 Docker Compose 容器的先后启动顺序。只有当被依赖的容器完全启动后,Docker Compose 才会创建和启动这个容器。

定义依赖的方式很简单,也就是 depends_on 这个配置项,只需要通过它列出这个服务所有依赖的其他服务即可。在 Docker Compose 启动项目的时候,会检查所有依赖,形成正确的启动顺序并按这个顺序来依次启动容器

🍁文件挂载

在 Docker Compose 里定义文件挂载的方式与 Docker Engine 里也并没有太多的区别,使用 volumes 配置可以像 docker CLI 里的 -v 选项一样来指定外部挂载和数据卷挂载。能够直接挂载宿主机文件系统中的目录,也可以通过数据卷的形式挂载内容。
在使用外部文件挂载的时候,可以直接指定相对目录进行挂载,这里的相对目录是指相对于 docker-compose.yml 文件的目录。
由于有相对目录这样的机制,可以将 docker-compose.yml 和所有相关的挂载文件放置到同一个文件夹下,形成一个完整的项目文件夹。
直接将代码挂载到容器里,而不是通过镜像构建的方式打包成镜像。
同时,在开发过程中,对于程序的配置等内容,也建议直接使用文件挂载的形式挂载到容器里,避免经常修改所带来的麻烦。

🍁使用数据卷

如果要在项目中使用数据卷来存放特殊的数据,也可以让 Docker Compose 自动完成对数据卷的创建,而不需要单独进行操作。

如果想把属于 Docker Compose 项目以外的数据卷引入进来直接使用,可以将数据卷定义为外部引入,通过 external 这个配置就能完成这个定义。

## ......
volumes:
  mysql-data:
    external: true
## ......

🍁配置网络

网络也是容器间互相访问的桥梁,所以网络的配置对于多个容器组成的应用系统来说也是非常重要的。在 Docker Compose 里,可以为整个应用系统设置一个或多个网络。
声明网络的配置同样独立于 services 存在,是位于根配置下的 networks 配置。
除了简单的声明网络名称,让 Docker Compose 自动按默认形式完成网络配置外,我们还可以显式的指定网络的参数。

networks:
  frontend:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 10.10.1.0/24
## ......

🍁端口映射

在 Docker Compose 的每个服务配置里,看到了 ports 这个配置项,它是用来定义端口映射的。
可以利用它进行宿主机与容器端口的映射,这个配置与 docker CLI 中 -p 选项的使用方法是近似的。
由于 YAML 格式对 xx:yy 这种格式的解析有特殊性,在设置小于 60 的值时,会被当成时间而不是字符串来处理,所以我们最好使用引号将端口映射的定义包裹起来,避免歧义


在这里插入图片描述

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

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

相关文章

Animation Rigging 如何让你的Avatar人物更具灵活性

文章目录🎈 简介🎈 基本组件🎈 应用Aim ConstraintTwo Bone IK Constraint🎈 简介 Animation Rigging是Unity官方发布的可以对Avatar人物骨骼进行约束的工具,已经有稳定的经过验证的Vertified包体,可以将其…

认知无线电网络的服务质量——蜻蜓算法的应用(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

【深入浅出Spring6】第七期——使用JDBC模板与代理模式

一、JDBCTemplate JdbcTemplate 是Spring提供的一个JDBC模板类,是对JDBC的封装,简化JDBC代码Spring也继承了其他持久化的框架,比如 MyBatis 等本篇我们从简单的增删改查角度介绍如何使用Spring提供的这个模板类 $ 准备工作 创建一个新的模块…

livekit 简单上手教程

什么是livekit? livekit是一个开源的webrtc项目,基于pion实现了SFU架构的go程序。 它主要有以下几个特性: 可以水平扩展的sfu架构。有完整的sdk程序接口供开发人员使用。基于JWT进行身份验证,可与大部分系统进行权限集成。内置Tur…

SpringCloud学习笔记 - 分布式配置中心 - config

1. 简介 Spring Cloud Config是用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持的。 它由服务端和客户端构成: 其中,服务端也称为分布式配置中心,是一个独立的微服务应用,用来连接配置仓库、为客户端提供支持…

32.nacos配置文件中心,使用实例(springcloud)

1.为什么使用Nacos 配置文件中心1.如果在生产情况下,修改了配置文件,项目需要下架,重新打包,重新发布。这在单机模式下影响不会太大,但如果过在一个集群项目中就会照成很大的影响,需要停掉多个项目。因此&a…

字节研发之道

前言 字节的迅速崛起缔造了一个互联网的神话,堪称火箭般的蹿升。当阿里来到第十八个年头时,员工人数还不足6万。老牌互联网腾讯现在也不过11万左右人数。但字节发展到七个年头时,人数就突破了10万。曾经入职阿里是一票难求,但现在…

基于51单片机的音乐盒播放器proteus仿真

资料编号:092 下面是相关功能视频演示: 92-基于51单片机的音乐盒播放器proteus仿真(源码仿真全套资料)功能介绍:使用51单片机,采用蜂鸣器进行音乐播放,提供了音乐代码生成器软件,可…

JavaWeb运行环境安装教程以及各个安装包

文章目录安装包下载安装教程一、JDK安装1、下载2、安装3、配置环境4、验证环境配置二、IDEA安装下载链接三、MySQL安装1、下载2、安装四、Navicat安装五、Tomcat安装1、下载2、环境配置3、修改编码4、启动六、Maven安装1、下载2、环境配置3、新建本地仓库4、修改镜像5、添加IDE…

Design Compiler工具学习笔记(1)

本人做过FPGA设计的项目,后面想转 IC 设计方向。现在从 DC 工具的使用开始学起,DC 是新思科技的EDA软件,具体的安装见下面的文章: Synopsys EDA Tools 安装问题记录https://blog.csdn.net/qq_43045275/article/details/127630241…

5G无线技术基础自学系列 | CloudRAN架构

素材来源:《5G无线网络规划与优化》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 5G在核心网实现云化之后,更…

2.旋转的骰子(1)

1.动画——旋转的骰子 我们想用纯html 和CSS, 做一个旋转的筛子,骰子要有立体感,每个面上要有圆点,表示点数,并且骰子可以原地旋转。 2.分析需求——庖丁解牛

【DELM回归预测】基于matlab多元宇宙优化算法改进深度学习极限学习机数据回归预测【含Matlab源码 2230期】

⛄一、多元宇宙优化算法 MVO是Seyedali Mirjalili受到多元宇宙理论的启发提出来的元启发式优化算法。主要根据多元宇宙理论的3个主要概念-白洞、黑洞和虫洞,来建立数学模型。 MVO算法中的可行解对应宇宙,解的适应度对应该宇宙的膨胀率,在每…

【第三部分 | 移动端开发】2:流式布局

目录 | 移动端布局 | 流式布局(百分比布局) | 案例:京东搜索页相关知识点 | 移动端布局 | 流式布局(百分比布局) 介绍 核心思想:不使用固定布局,而是使用百分比 为了保护盒子的内容不因拉伸…

Spring AOP使用与原理

AOP介绍 SpringAOP核心概念 上述中已经出现的关键词有Advice(顶级的通知类/拦截器)、MethodInvocation(方法连接点)、MethodInterceptor(方法拦截器) SpringAOP在此基础上又增加了几个类,丰富了AOP定义及使用概念,包括 Advisor:包含通知(拦截…

基于密度的划分、DBSCAN(机器学习)

目录 居于密度的划分 DBSCAN算法 居于密度的划分 基于划分聚类和基于层次聚类的方法在聚类过程中根据距离来划分类簇,因此只能够用于挖掘球状簇。 为了解决这一缺陷,基于密度聚类算法利用密度思想,将样本中的高密度区域(即样本点分布稠密的…

图的概念(1)

图是什么? 首先,我们导入需要的包? import numpy as np import random import networkx as nx from IPython.display import Image import matplotlib.pyplot as plt 图的定义? 图表示物件与物件之间关系的数学对象,…

Metasploit入门用法

靶机介绍 Difficult: As always, it’s a very easy box for beginners. Goal: Get flag Download:https://www.vulnhub.com/entry/funbox-scriptkiddie,725/ 解题过程: 1.使用nmap进行端口扫描:Nmap -sV IP 2.使用search命令查…

yolov5加入分割头,多任务头

Yolov5同时进行目标检测和分割分割_MidasKing的博客-CSDN博客_yolov5分割 用YOLOv5ds训练自己的数据集,注意点!_用猪头过日子.的博客-CSDN博客 基于pytorch用yolov5算法实现目标检测与分割_无损检测小白白的博客-CSDN博客 原理 代码:

一种三自由度机器人的设计(CAD+Solidworks+文档)

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1课题研究背景及其意义 1 1.2三自由度机器人的发展与现状 1 1.3三自由度机器人的原理和介绍 3 1.4三自由度机器人目前存在问题 4 1.5三自由度机器人的力控制问题 4 1.6三自由度机器人的发展趋势 5 第2章 总体技术方案及系统组成 7 2.…