当前位置: 首页 > news >正文

Docker Compose

为什么需要使用Docker Compose

Docker Compose 容器编排技术

1、现在我们有一个springboot项目,需要依赖Redis、mysql、nginx。

如果使用docker原生部署的话,则需要安装Redis、mysql、nginx容器,才可以启动我们springboot项目,这样的话部署项目的流程非常复杂,所以需要引入我们的

Docker compose实现容器编排技术。

基本的概念

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。

Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

Compose 中有两个重要的概念:

服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

Docker-Compose 的配置文件

Docker-Compose 的工程配置文件默认为 docker-compose.yml,可通过环境变量COMPOSE_FILE 或 -f 参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器

Docker-Compose 配置常用字段

文档地址:https://docs.docker.com/compose/compose-file/compose-file-v3/

  • build 指定 Dockerfile 文件名,要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定

  • dockerfile 构建镜像上下文路径

  • context 可以是 dockerfile 的路径,或者是指向 git 仓库的 url 地址

  • image 指定镜像

  • command 执行命令,覆盖默认命令

  • container name 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法 scale

  • deploy 指定部署和运行服务相关配置,只能在 Swarm 模式使用

  • environment 添加环境变量

  • networks 加入网络

  • ports 暴露容器端口,与 -p 相同,但端口不能低于 60

  • volumes 挂载宿主机路径或命令卷

  • hostname 容器主机名

  • restart 重启策略,默认 no,always,no-failure,unless-stoped

1.no,默认策略,在容器退出时不重启容器

2.on-failure,在容器非正常退出时(退出状态非0),才会重启容器

3.on-failure:3,在容器非正常退出时重启容器,最多重启3次

4.always,在容器退出时总是重启容器

5.unless-stopped,在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器

安装docker-compose

从GitHub上下载

官网文档:https://docs.docker.com/compose/install/
https://github.com/docker/compose/releases
下载版本:docker-compose-linux-x86_64
放到目录:/usr/local/bin/ 修改文件名:docker-compose

这里已经上传到CSDN一份了

https://download.csdn.net/download/zhou9898/87490141

添加可执行权限

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

docker-compose常用命令

docker-compose -h                           # 查看帮助docker-compose up                           # 创建并运行所有容器
docker-compose up -d                        # 创建并后台运行所有容器
docker-compose -f docker-compose.yml up -d  # 指定模板
docker-compose down                         # 停止并删除容器、网络、卷、镜像。docker-compose logs       # 查看容器输出日志
docker-compose pull       # 拉取依赖镜像
dokcer-compose config     # 检查配置
dokcer-compose config -q  # 检查配置,有问题才有输出docker-compose restart   # 重启服务
docker-compose start     # 启动服务
docker-compose stop      # 停止服务docker-compose ps  列出项目中所有的容器
docker-compose logs  查看容器中日志信息

1. 需要定义一个docker-compose.yml文件----工程

2. 需要在docker-compose文件配置依赖服务

3. docker-compose up 执行该文件

1. 创建一个docker-compose.yml;

2. 定制docker-compose 内容;

3. 运行 docker-compose up ;

docker-compose 部署项目

创建docker-compose.yml

version: '3.3'
services:mp:build: .image: mp # Dockerfile构建的镜像ports:- "8080:8080"

启动

docker-compose up -d # 创建并后台运行所有容器

docker-compose配合Dockerfile使用

Dockerfile文件

FROM openjdk:11
MAINTAINER zqd   # 作者
ADD boot02-1.0-SNAPSHOT.jar /boot02.jar
ENTRYPOINT ["nohup","java","-jar","/boot02.jar","&"]
EXPOSE 8080
version: '3.3'
services:boot02:build: context: /home/dockerfile: Dockerfilecontainer_name: boot02ports:- "8080:8080"

docker-compose 安装redis

一、 docker 拉去最新版本的redis

docker pull redis:6.0.6 #后面可以带上tag号, 默认拉取最新版本

二、 docker安装redis

执行命令:

mkdir -p /data/redis/conf
cd /data/redis/conf

新增配置文件

vim /data/redis/conf/redis.conf

内容只有如下这些:

#开启保护
protected-mode yes
#开启远程连接 
#bind 127.0.0.1 
#自定义密码
requirepass 12345678 
port 6379
timeout 0
# 900s内至少一次写操作则执行bgsave进行RDB持久化
save 900 1 
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /data
appendonly yes
appendfsync everysec

保存退出

参数说明

1.修改保护模式protected-mode yes 默认为yes 可以跳过这一步

Redis protected-mode属性解读

设置外部网络连接redis服务,设置说明如下:

a.关闭protected-mode模式,此时外部网络可以直接访问

b.开启protected-mode保护模式,需配置bind ip 和设置访问密码 redis3.2版本后新增protected-mode配置,默认是yes,即开启。

2.把bind 127.0.0.1 注释掉 #bind 127.0.0.1, 这样所有的ip都可以访问了

3.设置密码(根据自己的需要)

4.appendonly yes #开启AOF模式

三、编写 docker-compose.yaml文件

cd /data/redis
vim docker-compose.yml

写入下面的内容

version: '3.8'
services:myredis:container_name: myredisimage: redis:6.0.6restart: alwaysports:- 6379:6379privileged: truecommand: redis-server /etc/redis/redis.conf --appendonly yesvolumes:- /data/redis/data:/data- /data/redis/conf/redis.conf:/etc/redis/redis.confnetworks:- mywebnetworks:myweb:driver: bridge

说明:

/etc/redis/redis.conf为容器里的目录

启动前的目录结构

yum -y install tree
[root@localhost redis]# pwd
/usr/local/docker/redis[root@localhost redis]# tree
.
├── conf
│   └── redis.conf
├── data
│   └── appendonly.aof
└── docker-compose.yml2 directories, 3 files

四、启动容器

docker-compose up -d

到这里就ok了,

启动后的目录结构

[root@localhost redis]# tree
.
├── conf
│   └── redis.conf
├── data
│   └── appendonly.aof
└── docker-compose.yml2 directories, 3 files

docker-compose 安装mysql

mkdir -p /data/mysql
cd /data/mysql

新建一个文件

vim docker-compose.yml
version: '3'
services:mysql:image: mysqlrestart: alwayscontainer_name: mysqlenvironment:MYSQL_ROOT_PASSWORD: 123456command:--default-authentication-plugin=mysql_native_password--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1--max_allowed_packet=128M;ports:- 3306:3306volumes:- /data/mysql/data:/var/lib/mysql- /etc/localtime:/etc/localtime:ro

默认数据库是账号是root

密码自己修改 MYSQL_ROOT_PASSWORD

保存

启动运行

docker-compose up -d

docker-compose 安装nginx

创建目录

根据自己的需要存放位置

mkdir -p /data/nginx
mkdir -p /data/nginx/conf.d
mkdir -p /data/nginx/log
mkdir -p /data/nginx/conf

docker-compose.yml

vim /data/nginx/docker-compose.yml

version: '3'
services:nginx:restart: alwaysimage: nginxports:- 80:80- 443:443volumes:- /data/nginx/conf.d:/etc/nginx/conf.d- /data/nginx/log:/var/log/nginx- /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf- /data/nginx/html:/usr/share/nginx/html- /etc/letsencrypt:/etc/letsencrypt

为应用存放位置(该目录下要有 index.html)

mkdir -p /data/nginx/html
vim /data/nginx/html/index.html

nginx相关配置

vim /data/nginx/conf.d/my.conf

server {  listen 80;server_name localhost;location / {root   /usr/share/nginx/html;index index.html index.htm;}
}

vim /data/nginx/conf/nginx.conf

user  root;
worker_processes  1;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}

启动

cd /data/nginx
docker-compose up -d

访问

主页可能是centos欢迎页,需要替换,或者访问具体index.html

docker-compose批量部署

1、在docker-compose中构建Dockerfile

cd /data
build: context: /home/df02 # 指定dockerfile目录dockerfile: Dockerfile # 指定dockerfile文件名

vim docker-compose.yml

version: '3'
services:boot02:build: context: /home/df02dockerfile: Dockerfilecontainer_name: boot02ports:- "8080:8080"myredis:container_name: myredisimage: redis:6.0.6restart: alwaysports:- 6379:6379privileged: truecommand: redis-server /etc/redis/redis.conf --appendonly yesvolumes:- /data/redis/data:/data- /data/redis/conf/redis.conf:/etc/redis/redis.confnetworks:- mywebmysql:image: mysqlrestart: alwayscontainer_name: mysqlenvironment:MYSQL_ROOT_PASSWORD: 123456command:--default-authentication-plugin=mysql_native_password--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1--max_allowed_packet=128M;ports:- 3306:3306volumes:- /data/mysql/data:/var/lib/mysql- /etc/localtime:/etc/localtime:ronginx:container_name: nginxrestart: alwaysimage: nginxports:- 80:80- 443:443volumes:- /data/nginx/conf.d:/etc/nginx/conf.d- /data/nginx/log:/var/log/nginx- /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf- /data/nginx/html:/usr/share/nginx/html- /etc/letsencrypt:/etc/letsencryptnetworks:myweb:driver: bridge

相关文章:

Docker Compose

为什么需要使用Docker ComposeDocker Compose 容器编排技术1、现在我们有一个springboot项目,需要依赖Redis、mysql、nginx。如果使用docker原生部署的话,则需要安装Redis、mysql、nginx容器,才可以启动我们springboot项目,这样的…...

【ARM架构】armv8 系统安全概述

ARMv8-A 系统中的安全 一个安全或可信的操作系统保护着系统中敏感的信息,例如,可以保护用户存储的密码,信用卡等认证信息免受攻击。 安全由以下原则定义: 保密性:保护设备上的敏感信息,防止未经授权的访问…...

数学小课堂:数学边界

文章目录 引言I 费马大定理1.1毕达哥拉斯定理的推广1.2 一波三折的定理证明过程1.3 希尔伯特第十问题II 数学的边界2.1 认识论问题2.2 在边界内做事情2.3 总结引言 了解数学本身的局限性,才能更好地使用它的原理和思维方式。 数学的边界,这是一个硬的边界,大家不要试图逾越…...

检测中断到来时,让LED灯状态取反,并且在串口工具上打印一句话

任务:检测中断到来时,让LED灯状态取反,并且在串口工具上打印一句话例如:当按键1按下之后,让LED1状态取反,并打印“LED1 down”当按键2按下之后,让LED2状态取反,并打印“LED2 down”当…...

2023年CDGA考试-第7章-数据安全(含答案)

2023年CDGA考试-第7章-数据安全(含答案) 单选题 1.数据安全不仅涉及防止不当访问,也涉及对数据的适当访问,下列理解不正确的是 ( ) A.强密码有助于提高破解风险 B.安全专家建议 45-180天修改一次密码 C.用户要尽量使用多套密码和账户 D.具有高度敏感信息权限的用户都应使…...

输出月份英文名称--C语言实现

任务描述 本关需要你编写一个用指针数组处理的c程序,然后从键盘输入月份时输出对应的英文名。 相关知识 指针 指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。就像其他变量或常量一样,你必须在使用指针存储其他变量地址之前,对其进行声明。 指针变量声明…...

6年测试经验老鸟:做不好自动化测试,还谈什么高薪?

提起自动化测试,可谓仁者见人,智者见智,心中五味杂陈啊!你从任何一个招聘渠道来看最近两年对测试岗位的要求,几乎都要求会自动化测试。而不少人一直认为手工测试才是王道,工作中有的时候也用不到程序&#…...

Java Web:开篇综述与第一章

前言 翻开这本书,又是一段新的学习路线,在学习的道路上是枯燥的,是乏味的,难免有放弃的想法。但回看曾经的学习笔记,自己也一步一步走过来了,即使会自我怀疑自我否定,但不坚持不努力是永远没有…...

ES6中对象的一些拓展

当对象键名与对应值名相等的时候,可以进行简写 const obj { name }允许字面量定义对象时,将表达式放在括号内 let lastWord last word;const a {first word: hello,[lastWord]: world };a[first word] // "hello" a[lastWord] // "wo…...

10分钟快速入门Pandas库

pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的,这篇文章主要介绍了10分钟快速入门Pandas库,重点介绍pandas常见使用方法,结合实例代码介绍的非常详细,需要的朋友可以参考下目录Pandas的介绍pandas 是基于Num…...

考研复试机试 | C++ | 王道机试课程笔记

目录Zero-complexity (上交复试题)题目&#xff1a;代码&#xff1a;括号匹配问题题目&#xff1a;代码&#xff1a;表达式解析问题 &#xff08;浙大机试题&#xff09;题目&#xff1a;代码&#xff1a;标准库里提供了栈 stack<typename> myStack .size() 栈的大小 .pu…...

【python科目一:生产线系统设计;激光刀切割材料】

工厂有若干条生产线&#xff0c;可以生产不同型号的产品&#xff0c;要求实现功能如下&#xff1a;1. ProductionLineMgmtSys 初始化生产线和产品的生产周期有num条生产线&#xff0c;编号从0开始periods[i]表示生产一个型号为i的产品所需的生产周期&#xff0c;单位为天2. Pro…...

Linux——进程概念(进程状态)

目录 进程状态 三态模型 五态模型 七态模型 Example eg1:阻塞态&#xff1a;等待某种资源的过程 eg2:挂起态 Linux内核源代码 Linux进程状态查看 Linux运行状态 R运行状态&#xff08;running&#xff09;: S睡眠状态&#xff08;sleeping)&#xff1a; D磁盘休眠状…...

超详细:正则表达式从入门到入门

文章目录匹配字符\d \D\s \S量词&#xff1a;匹配多个字符星号*加号问号&#xff1f;大括号{}集合字符[]明确字符范围字符补集字符常见字符集贪婪模式和非贪婪模式匹配开头和结尾贪婪模式和非贪婪模式常用函数re.findall()re.search()re.compile()re.split()re.sub()本文章首发…...

jupyter notebook小技巧

1、.ipynb 文件转word文档 将 jupyter notebook&#xff08;.ipynb 文件&#xff09;转换为 word 文件&#xff08;.docx&#xff09;的最简单方法是使用 pandoc。 首先安装pip install pandoc&#xff0c; 安装后&#xff0c;在将 Jupyter notebook文件目录cmd 然后输入打开…...

考研复试机试 | c++ | 王道复试班

目录n的阶乘 &#xff08;清华上机&#xff09;题目描述代码汉诺塔问题题目&#xff1a;代码&#xff1a;Fibonacci数列 &#xff08;上交复试&#xff09;题目代码&#xff1a;二叉树&#xff1a;题目&#xff1a;代码&#xff1a;n的阶乘 &#xff08;清华上机&#xff09; …...

js闭包简单理解

js里面的闭包是一个难点也是它的一个特色&#xff0c;是我们必须掌握的js高级特性&#xff0c;那么什么是闭包呢&#xff1f;它又有什么作用呢&#xff1f; 1&#xff0c;提到闭包我们这里先讲解一下js作用域的问题 js的作用域分两种&#xff0c;全局和局部&#xff0c;基于我…...

「JVM 编译优化」编译器优化技术

后端编译&#xff08;即时编译、提前编译&#xff09;的目标时将字节码翻译成本地机器码&#xff0c;而难点是输出优化质量较高的机器码&#xff1b; 文章目录1. 优化技术概览2. 方法内联&#xff08;Inlining&#xff09;3. 逃逸分析&#xff08;Escape Analysis&#xff09;4…...

回溯问题(子集型回溯、组合型回溯、排列型回溯)【零神基础精讲】

来源0x3f&#xff1a;https://space.bilibili.com/206214 回溯分为【子集型回溯】【组合型回溯】【排列型回溯】 文章目录回溯基本概念[17. 电话号码的字母组合](https://leetcode.cn/problems/letter-combinations-of-a-phone-number/)子集型回溯&#xff08;分割问题也可以看…...

源代码配置安装Apache

源代码配置安装Apache &#x1f4d2;博客主页&#xff1a; 微笑的段嘉许博客主页 &#x1f4bb;微信公众号&#xff1a;微笑的段嘉许 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐留言&#x1f4dd; &#x1f4cc;本文由微笑的段嘉许原创&#xff01; &#x1f…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...