Docker Compose 安装使用 教程
Docker Compose
1.1 简介
- 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目 ( project ):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
1.2 安装与卸载
1.linux
- 在 Linux 上的也安装十分简单,从官方 GitHub Release 处直接下载编译好的二进制文件即可。例如,在 Linux 64 位系统上直接下载对应的二进制包。
# 下载docker-compose到/usr/local/bin$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose# 将docker-compose文件状态改为可执行文件$ sudo chmod +x /usr/local/bin/docker-compose
2.macos、window
- Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。 Docker Desktop for Mac/Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用。
3.bash命令补全
$ curl -L https://raw.githubusercontent.com/docker/compose/1.25.5/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
4.卸载
- 如果是二进制包方式安装的,删除二进制文件即可。
$ sudo rm /usr/local/bin/docker-compose
5.测试安装成功
$ docker-compose --versiondocker-compose version 1.25.5, build 4667896b#注意:如果没有显示版本试试docker-compose -v 或者 docker compose version
1.3 docker compose使用
- 服务 ( service ):一个应用容器,实际上可以运行多个相同镜像的实例。
- 项目 ( project ):由一组关联的应用容器组成的一个完整业务单元。∂一个项目可以由多个服务(容器)关联而成, Compose 面向项目进行管理。
- springboot应用
- mysql服务
- redis服务
- elasticsearch服务
- .......
#进入你的项目[root@centos ~]# cd 项目的目录#创建docker-compose.yml模板文件[root@centos ~]# touch docker-compose.yml
version: "3.2"services:tomcat01: #服务名称container_name: tomcat01 # 相当于run 的 --nameimage: tomcat:8.0-jre8 #使用哪个镜像 相当于run imageports: #用来完成host与容器的端口映射关系 相当于run -p- "8080:8080"volumes: #完成宿主机与容器中目录数据卷共享 相当于run -v#- /root/apps:/usr/local/tomcat/webapps #使用自定义路径映射- tomcatwebapps01:/usr/local/tomcat/webappsnetworks: #代表当前服务使用哪个网络桥 相当于run --networ- hellotomcat02: #服务名称container_name: tomcat02image: tomcat:8.0-jre8 #使用哪个镜像ports: #用来完成host与容器的端口映射关系- "8081:8080"volumes: #完成宿主机与容器中目录数据卷共享#- /root/apps:/usr/local/tomcat/webapps #使用自定义路径映射(绝对路径)- tomcatwebapps02:/usr/local/tomcat/webapps #别名方式networks: #代表当前服务使用哪个网络桥- hellomysql:image: mysql:5.7.32container_name: mysqlports:- "3307:3306"volumes:- mysqldata:/var/lib/mysql- mysqlconf:/etc/mysqlenvironment:- MYSQL_ROOT_PASSWORD=rootnetworks:- helloredis:image: redis:5.0.10container_name: redisports:- "6379:6379"volumes:- redisdata:/datanetworks:- hellocommand: "redis-server --appendonly yes" #run 镜像之后用来覆盖容器内容默认命令volumes: #声明上面服务所使用的自动创建的卷名tomcatwebapps01: #声明指令的卷名 compose自动创建该卷名但是会在之前加入项目名external: #使用自定义卷名(默认为false不使用外部数据卷,因为docker compose会自动创建的数据卷,名称是以项目名开头的)true #true确定使用指定卷名 注意:一旦使用外部自定义卷名启动服务之前必须手动创建,必须存在该数据卷tomcatwebapps02:mysqldata:mysqlconf:redisdata:networks: #定义服务用到桥hello: #定义上面的服务用到的网桥名称 默认创建就是 bridgeexternal: #使用自定义网桥(默认为false不使用外部网桥, 因为docker compose会自动创建的网桥,名称是以项目名开头的)true #使用外部指定网桥 注意:网桥必须存在
#启动[root@centos ~]# docker-compose up //前台启动一组服务[root@centos ~]# docker-compose up -d //后台启动一组服务#注意:执行docker-compose up命令必须在 docker-compose.yml文件所在目录执行

1.4 docker-compose 模板文件
version: "3"services:webapp:image: examples/webports:- "80:80"volumes:- "/data"
build
version: '3'services:webapp:build:context: ./dirdockerfile: Dockerfile-alternateargs:buildno: 1
command
command: echo "hello world"
container_name
container_name: docker-web-container
注意: 指定容器名称后,该服务将无法进行扩展(scale),因为 Docker 不允许多个容器具有相同的名称。
depends_on
version: '3'services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres
注意: web 服务不会等待 redis db 「完全启动」之后才启动。
env_file
env_file: .envenv_file:- ./common.env- ./apps/web.env- /opt/secrets.env
mysql:image: mysql:5.7.39ports:- "3306:3306"volumes:- /root/mysql:/var/lib/mysqlenv_file:- .env #在当前目录创建了一个文件名为.env,以点开头的原因是,这样不容易被发现,只有使用ll -a才能查看到networks:- xinke
# common.env: Set development environmentPROG_ENV=development
environment
environment:RACK_ENV: developmentSESSION_SECRET:environment:- RACK_ENV=development- SESSION_SECRET
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
healthcheck
healthcheck:test: ["CMD", "curl", "-f", "http://localhost"]interval: 1m30stimeout: 10sretries: 3
image
image: ubuntuimage: orchardup/postgresqlimage: a4bc65fd
networks
version: "3"services:some-service:networks:- some-network- other-networknetworks:some-network:other-network:
ports
ports:- "3000"- "8000:8000"- "49100:22"- "127.0.0.1:8001:8001"
sysctls
sysctls:net.core.somaxconn: 1024net.ipv4.tcp_syncookies: 0sysctls:- net.core.somaxconn=1024
ulimits
ulimits:nproc: 65535nofile:soft: 20000hard: 40000
volumes
volumes:- /var/lib/mysql- cache/:/tmp/cache- ~/configs:/etc/configs/:ro
version: "3"services:my_src:image: mysql:8.0volumes:- mysql_data:/var/lib/mysqlvolumes:mysql_data:

具体使用参考
1.5 docker-compose 常用命令
1. 命令对象与格式
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
2. 命令选项
- -f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml ,可以多次指定。
- -p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
- --x-networking 使用 Docker 的可拔插网络后端特性
- --x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge
- --verbose 输出更多调试信息。
- -v, --version 打印版本并退出。
3.命令使用说明
up
- 该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
- 链接的服务都将会被自动启动,除非已经处于运行状态。
- 可以说,大部分时候都可以直接通过该命令来启动一个项目。
- 默认情况, docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。
- 当通过 Ctrl-C 停止命令时,所有容器将会停止。
- 如果使用 docker-compose up -d ,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。
- 默认情况,如果服务容器已经存在, docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容
down
- 此命令将会停止 up 命令所启动的容器,并移除网络
exec
- 进入指定的容器。
ps
- -q 只打印容器的 ID 信息。
restart
- -t, --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)。
rm
- -f, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
- -v 删除容器所挂载的数据卷。
start
stop
- -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
top
unpause

相关文章:
Docker Compose 安装使用 教程
Docker Compose 1.1 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的 快速编排 。从功能上看,跟 OpenStack 中的 Heat 十分类似。 其代码目前在 https://github.com/docker/compose 上开源。 Compose 定位是 「定义和运行多个…...
睿趣科技:开抖音小店挣钱吗到底
在当今数字化时代,社交媒体平台成为了创业者们寻找商机和赚钱的新途径。而抖音作为一款风靡全球的短视频分享平台,自然也成为了许多人开设小店、进行创业的选择之一。那么,开抖音小店能否真正实现盈利,成为了一个备受关注的话题。…...
国际腾讯云账号云服务器网络访问丢包问题解决办法!!
本文主要介绍可能引起云服务器网络访问丢包问题的主要原因,及对应排查、解决方法。下面一起了解腾讯云国际云服务器网络访问丢包问题解决办法: 可能原因 引起云服务器网络访问丢包问题的可能原因如下: 1.触发限速导致 TCP 丢包 2.触发限速导致…...
Deepnote:为什么我停止使用 Jupyter Notebook
Jupyter 笔记本已经成为必不可少多年来用于众多数据科学工作流程的工具。其中包括执行数据挖掘、分析、处理、建模以及在每个数据科学项目的生命周期中执行的一般日常实验任务。 Jupyter(作者提供的图片) 尽管它很受欢迎,但许多数据科学家也指出了它的众多缺点,例如这里和...
山西省文物局与大势智慧签订战略合作协议
8月24日,由山西省文物局、中国文物信息咨询中心(国家文物局数据中心)主办的数字文博发展论坛在太原举行。武汉大势智慧科技有限公司(后简称“大势智慧”)受邀参与,与来自国内文博数字化领域的专家学者齐聚一堂,围绕“数…...
Java设计模式:一、六大设计原则-02:开闭原则
文章目录 一、定义:开闭原则二、模拟场景:开闭原则2.0 工程结构2.1 定义面积计算接口2.2 面积计算实现类 三、违背方案:开闭原则四、改善代码:开闭原则4.1 扩展继承4.2 单元测试 一、定义:开闭原则 开闭原则ÿ…...
DETRs Beat YOLOs on Real-time Object Detection
目录 1、模型架构1.1高效混合编码器1.1.1 尺度内特征交互模块AIFI1.1.2 跨尺度特征融合CCFM 1.2IoU感知查询选择总结 DETRs在实时目标检测中击败YOLO 问题:DETR的高计算成本,实时检测效果有待提高 解决:提出了一个实时的目标检测器 具体来说…...
【数据分享】1901-2022年1km分辨率的逐月降水栅格数据(免费获取/全国/分省)
气象指标在日常研究中非常常用,之前我们给大家分享过来源于国家青藏高原科学数据中心提供的气象指标栅格数据(均可查看之前的文章获悉详情): 1901-2022年1km分辨率逐月平均气温栅格数据1901-2022年1km分辨率逐年平均气温栅格数据…...
全网首发!奔驰宝马奥迪卡带机卡带通道激活模块,无损安装可以接2路AUX
文章目录 1.前言2.时序逆向分析2.1协议分析2.2卡带音频通道引出 3、PCB设计4、程序设计5、焊接调试6、结语 1.前言 之前写过四篇关于车机增加音频输入的方法。 1、07宝来经典车机CD收音机(RC668)改装增加蓝牙播放音乐 2、全网首发!老大…...
反弹shell总结
反弹shell总结 讲在前面说的话:反弹shell总结nc反弹shell正向shell反向shell正向shell(服务端被攻击):反向shell(客户端被攻击):无nc反弹shellpython反弹shellbash反弹shellPHP反向shellPerl反向shellJava反弹shellsocat 反弹shellRuby反弹shellLua反弹shellAwk 反弹she…...
[机缘参悟-103] :IT人关于接纳的思考与感悟
目录 前言: 一、接纳 1.1 什么是接纳 1.2 对接纳的误解 1.3 接纳的含义 1.4 "存在即合理" VS 接纳 1.5 接纳 VS 躺平 VS 随遇而安 1.6 为什么现实总是那么不尽人意 1.7 现实世界的多样性 1.8 接纳与认命 1.9 不接纳的表现 前言: …...
甄知携AIGC新升级产品参与首届人工智能生成内容国际会议,共探AIGC最前沿技术
首届人工智能生成内容国际会议(2023The 1st International Conference on AI-generated Content (AIGC2023)于2023年8月25-26日在中国上海举行。本次会议得到了复旦大学、中国科技大学、同济大学、上海交通大学、上海人工智能实验室、香港中文大学等知名院校和研究机构的大力支…...
4.9 已建立连接的TCP,收到SYN会发生什么?
1. 客户端的 SYN 报文里的端口号与历史连接不相同 此时服务端会认为是新的连接要建立,于是就会通过三次握手来建立新的连接。 旧连接里处于 Established 状态的服务端最后会怎么样呢? 服务端给客户端发消息了:客户端连接已被关闭ÿ…...
leetcode 365 水壶问题
有一个水壶容量或者两个水壶加起来总容量为目标容量 总共有八种选择:第一种倒满x,第二种倒满y,第三种清空x,第四种清空y,第五种x 倒给 y y能装满 ,第六种 x 倒给 y x倒完, 。。。。 这里用深度遍历,时间超时 class Solution {public boole…...
django/CVE-2017-12794XSS漏洞复现
docker搭建漏洞复现环境 漏洞原理看帮助文档 # Django debug page XSS漏洞(CVE-2017-12794)分析Django发布了新版本1.11.5,修复了500页面中可能存在的一个XSS漏洞,这篇文章说明一下该漏洞的原理和复现,和我的一点点评…...
【学习笔记】计算机视觉对比学习综述
计算机视觉对比学习综述 前言百花齐放InstDiscInvaSpreadCPCCMC CV双雄MoCoSimCLRMoCo v2SimCLR v2SwAV 不用负样本BYOLSimSiam TransformerMoCo v3DINO 总结参考链接 前言 本篇对比学习综述内容来自于沐神对比学习串讲视频以及其中所提到的论文和博客,对应的链接详…...
【Linux】fork函数的基础知识
文章目录 前言一、fork的返回值二、常见问题 1.为什么fork要给子进程返回0,给父进程返回子进程pid?2.一个函数返回两次值怎么理解? 3.一个变量怎么会有不同的内容? 4.fork函数干了什么? 前言 fork初识: …...
代码随想录算法训练营day48 | LeetCode 198. 打家劫舍 213. 打家劫舍 II 337. 打家劫舍 III
198. 打家劫舍(题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台) 思路:dp题除背包外的另外一类题目,重点不在于看前面的情况,而在于考虑本节点的情况。一种情况…...
【已解决】Java 后端使用数组流 Array.stream() 将数组格式的 Cookie 转换成字符串格式
🎉工作中遇到这样一个场景:远程调用某个接口,该接口需要用户的 Cookie 信息进行权限认证,认证通过之后才可以打通并返回数据。 在后端拿到 httpServletRequest 后,调用 getCookies() 方法,返回的是一个 Coo…...
Redis——》如何评估锁过期时间
推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
