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

完整开发实现公众号主动消息推送,精彩内容即刻到达
🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…...

获取ip(公网和内网) 前端通过高德api获取位置信息
获取ip(公网和内网) 前端通过高德api获取位置信息 获取ip //获取公网ip getIp() {this.$axios.get(http://api.ipify.org).then((res) > {if (res) {console.log(res, 公网ip);}}).catch((e) > {console.log(e, e);}); },//获取内网ip this.getIP(…...

linux打开端口命令是什么
linux打开端口命令是什么 linux开启端口的命令是 1 firewall-cmd --zonepublic --add-port端口/通讯协议 --permanent 需要注意的是,我们在开启指定端口后需要重启防火墙。 示例如下: 1、开启防火墙 1 systemctl start firewalld 2、开放指定端…...

从《孤注一掷》出发,聊聊 SSL 证书的重要性
你去看《孤注一掷》了吗?相信最近大家的朋友圈和抖音都被爆火电影《孤注一掷》成功刷屏。取材于上万真实案例的《孤注一掷》揭露了缅甸诈骗园区残暴的统治,以及电信诈骗中系统性极强的诈骗技巧,引发了大量讨论。 图片来源于电影《孤注一掷》…...

专题:曲面的切平面、法线
假设曲面方程为隐函数 F ( x , y , z ) 0 ,点 M ( x 0 , y 0 , z 0 ) 是其上一点 又在点 M 处任意引一条在曲面上的曲线,设该曲线参数方程为: { x φ ( t ) y ψ ( t ) z ω ( t ) ,且当 t t 0 时, x x 0 , y y…...

数据结构:排序解析
文章目录 前言一、常见排序算法的实现1.插入排序1.直接插入排序2.希尔排序 2.交换排序1.冒泡排序2.快速排序1.hoare版2.挖坑版3.前后指针版4.改进版5.非递归版 3.选择排序1.直接选择排序2.堆排序 4.归并排序1.归并排序递归实现2.归并排序非递归实现 5.计数排序 二、排序算法复杂…...

Revit SDK:AutoJoin 自动合并体量
前言 Revit 有一套完整的几何造型能力,每一个体量都是一个GenericForm,这些体量可以通过拉伸、扫掠等创建。这个例子介绍如何将他们合并成一个体量。 内容 合并体量的关键接口: // Autodesk.Revit.DB.Document public GeomCombination Com…...

MYSQL(索引、事务)
文章目录 一、索引二、事务 一、索引 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系 1. 概述 概念:相当于是一本书的目录,是以‘列’为维度进行建立的使用场景:如果我们要查询一个表中的某个…...

部署问题集合(二十三)设置Docker容器内的中文字符集,解决某些情况下中文乱码的问题
前言: 同事给了一个服务,在Windows环境下怎么跑都正常,但一到Linux虚拟机里就中文乱码起初就想到了可能是字符集的问题,但调整了半天也没见效果,最后隔了几天突然想到,我是构建Docker跑的,而且…...

Web AP—PC端网页特效
PC端网页特效 代码下载 元素偏移量 offset 系列 offset 翻译过来就是偏移量, 我们使用 offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等。 获得元素距离带有定位父元素的位置获得元素自身的大小(宽度高度&#x…...