【云原生 | 50】Docker三剑客之Docker Compose第一节

news2025/1/16 8:00:42

🍁博主简介
        🏅云计算领域优质创作者
        🏅2022年CSDN新星计划python赛道第一名

        🏅2022年CSDN原力计划优质作者
        🏅阿里云ACE认证高级工程师
        🏅阿里云开发者社区专家博主

💊交流社区:CSDN云计算交流社区欢迎您的加入!

目录

1、Compose简介 

2、安装于卸载 

2.1 pip安装 

2.2 二进制包 

2.3 容器中执行 

2.4 卸载 

  👑👑👑结束语👑👑👑​


编排(Orchestration)功能是复杂系统实现灵活可操作性的关键。特别是在Docker应用场景中,编排意味着用户可以灵活地对各种容器资源实现定义和管理。
作为Docker官方编排工具,Compose的重要性不言而喻,它可以让用户通过编写一个简单的模板文件,快速地创建和管理基于Docker容器的应用集群。
本篇博文将介绍Compose项目的具体情况,以及如何进行安装和使用,最后还通过两个具体案例来展示如何编写Compose模板文件。

1、Compose简介 

Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。从功能上看,跟OpenStack中的Heat十分类似。其代码目前在 https://github.com/docker/compose 上开源。
Compose定位是“定义和运行多个Docker容器的应用”,其前身是开源项目Fig,目前仍然兼容Fig格式的模板文件。
通过第一部分中的介绍,我们知道使用一个Dockerfile模板文 件,可以让用户很方便地定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

Compose恰好满足了这样的需求。它允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。

Compose中有两个重要的概念:

·服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
·项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose项目由Python编写,实现上调用了Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。

2、安装于卸载 

Compose目前支持Linux和Mac OS平台,两者的安装过程大同小异。
安装Compose之前,要先安装Docker(需要Docker Engine 1.7.1+),详细步骤请参考第一部分中的内容。
Compose可以通过Python的pip工具进行安装,可以直接下载编译好的二进制文件使用,甚至直接运行在Docker容器中。
前两种方式是传统方式,适合本地环境下安装使用;最后一种方式则不破坏系统环境,更适合云计算场景。

2.1 pip安装 

这种方式是将Compose当作一个Python应用来从pip源中安装。
执行安装命令:
$ sudo pip install -U docker-compose

可以看到类似如下输出,说明安装成功

Collecting docker-compose
Downloading docker-compose-1.8.0.tar.gz (149kB): 149kB downloaded
...
Successfully installed docker-compose cached-property requests texttable websocketclient docker-py dockerpty six enum34 backports.ssl-match-hostname ipaddress

安装成功后,可以查看docker-compose命令的用法:

$ docker-compose -h
Define and run multi-container applications with Docker.
Usage:
    docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
    docker-compose -h|--help
Options:
    -f, --file FILE             Specify an alternate compose file (default:docker-compose.yml)
    -p, --project-name NAME     Specify an alternate project name (default:directory name)
    --x-networking             (EXPERIMENTAL) Use new Docker networking 
                                functionality.
                                Requires Docker 1.9 or later.
    --x-network-driver DRIVER  (EXPERIMENTAL) Specify a network driver (default:"bridge").
                                Requires Docker 1.9 or later.
    --verbose                   Show more output
    -v, --version               Print version and exit
Commands:
    build             Build or rebuild services
    help              Get help on a command
    kill              Kill containers
    logs              View output from containers
    pause             Pause services
    port              Print the public port for a port binding
    ps                List containers
    pull              Pulls service images
    restart           Restart services
    rm                Remove stopped containers
    run               Run a one-off command
    scale             Set number of containers for a service
    start             Start services
    stop              Stop services
    unpause           Unpause services
    up                Create and start containers
    migrate-to-labels Recreate containers to add labels
    version           Show the Docker-Compose version information

之后,可以添加bash补全命令:

$ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

2.2 二进制包 

官方定义编译好二进制包,供大家使用。这些发布的二进制包可以在 https://github.com/docker/compose/releases 页面找到。
这些二进制文件,下载后直接放到执行路径下,并添加执行权限即可。例如,在Linux平台上:
$ sudo curl -L https://github.com/docker/compose/releases/download/1.8.0/dockercompose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod a+x /usr/local/bin/docker-comp

可以使用docker-compose version命令来查看版本信息,以测试是否安装成功

$ docker-compose version
docker-compose version 1.8.0, build 94f7016
docker-py version: 1.9.0
CPython version: 2.7.6
OpenSSL version: OpenSSL 1.0.1f 6 Jan 2014

2.3 容器中执行 

Compose既然是一个Python应用,自然也可以直接用容器来执行它:

$ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh >/usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

实际上,查看下载的run.sh脚本内容,如下所示:

set -e
VERSION="1.8.0"
IMAGE="docker/compose:$VERSION"
# Setup options for connecting to docker host
if [ -z "$DOCKER_HOST" ]; then
    DOCKER_HOST="/var/run/docker.sock"
fi
if [ -S "$DOCKER_HOST" ]; then
    DOCKER_ADDR="-v $DOCKER_HOST:$DOCKER_HOST -e DOCKER_HOST"
else
    DOCKER_ADDR="-e DOCKER_HOST -e DOCKER_TLS_VERIFY -e DOCKER_CERT_PATH"
fi
# Setup volume mounts for compose config and context
if [ "$(pwd)" != '/' ]; then
    VOLUMES="-v $(pwd):$(pwd)"
fi
if [ -n "$COMPOSE_FILE" ]; then
    compose_dir=$(dirname $COMPOSE_FILE)
fi
# TODO: also check --file argument
if [ -n "$compose_dir" ]; then
    VOLUMES="$VOLUMES -v $compose_dir:$compose_dir"
fi
if [ -n "$HOME" ]; then
    VOLUMES="$VOLUMES -v $HOME:$HOME -v $HOME:/root" # mount $HOME in /root to
share docker.config
fi
# Only allocate tty if we detect one
if [ -t 1 ]; then
    DOCKER_RUN_OPTIONS="-t"
fi
if [ -t 0 ]; then
    DOCKER_RUN_OPTIONS="$DOCKER_RUN_OPTIONS -i"
fi
exec docker run --rm $DOCKER_RUN_OPTIONS $DOCKER_ADDR $COMPOSE_OPTIONS $VOLUMES
-w "$(pwd)" $IMAGE "$@"

可以看到,它其实是下载了docker/compose镜像并运行。

2.4 卸载 

如果是二进制包方式安装的,删除二进制文件即可:

$ sudo rm /usr/local/bin/docker-compose

如果是通过Python pip工具安装的,则可以执行如下命令删除:

$ sudo pip uninstall docker-compose
下一篇文章将详细讲述Compose命令说明及用法,敬请期待!

  👑👑👑结束语👑👑👑

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

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

相关文章

pinia和vuex的区别

pinia和vuex的区别 什么是“状态管理模式”&#xff1f; const Counter {// 状态data () {return {count: 0}},// 视图template: <div>{{ count }}</div>,// 操作methods: {increment () { this.count}} }createApp(Counter).mount(#app)这个状态自管理应用包含…

字符串题记

经典字符串leetcode题 文章目录经典字符串leetcode题反转字符串第一种方法&#xff1a;使用string里的库函数reverse第二种方法&#xff1a;使用自己写的swap函数第一种swap函数第二种swap函数151.翻转字符串里的单词28. 实现 strStr()KMP算法459.重复的子字符串第一种&#xf…

UE4 后期材质节点学习

以下对应的效果&#xff1a; 材质后期在这里进行设置&#xff1a; 在这里调整场景的整体的饱和度 场景的对比度 灰度系数的调整 高光度/图像增益 灰阶偏移的设置 想了解这些专业名词可以看&#xff1a;相机gain lift gamma offset参数意义_baobei0112的博客-CSDN博客_相机gai…

Redis学习笔记(一)Linux下安装部署Redis

一、下载Redis 1、进入官网&#xff0c;进入download页面 https://redis.io/download&#xff0c;找到“List of all releases and hash digests”&#xff0c;点击“ listing of all previous Redis releases on the releases page”&#xff0c;可以进入所有版本下载页面。 …

STM32——DMA直接存储器访问

文章目录一、DMA直接存储器存取DMA简介二、存储器映像三、DMA框图四、DMA基本结构五、DMA请求&#xff08;触发源&#xff09;六、数据宽度与对齐七、存储器到存储器的DMA转运原理图关键代码八、外设到存储器的DMA转运原理图硬件链接图关键代码九、其他一、DMA直接存储器存取 …

【图像分类】4.ResNet残差模块卷积网络的神

ResNet重要性不必多说了吧&#xff0c;论文引用破10w&#xff0c;是我见过最多的&#xff0c;yyds&#xff01; 在对照博主霹雳吧啦和官方pytorch的代码下&#xff0c;手撸一个resnet。如果没有看着代码写&#xff0c;不确定自己是否能根据论文写出model&#xff0c;而且写优雅…

java学习day69(乐友商城)用户注册

今日目标&#xff1a; 创建用户中心 了解面向接口开发方式 实现数据校验功能 实现短信发送功能 实现注册功能 实现根据用户名和密码查询用户功能 1.创建用户中心 用户搜索到自己心仪的商品&#xff0c;接下来就要去购买&#xff0c;但是购买必须先登录。所以接下来我们编…

STM32MP157驱动开发——Linux IIO驱动(下)

STM32MP157驱动开发——Linux IIO驱动&#xff08;下&#xff09;0.前言一、IIO 触发缓冲区1.IIO 触发器2.申请触发器3.释放触发器4.注册触发器5.注销触发器6. IIO 缓冲区7.向驱动程序添加触发缓冲功能8.驱动编写9.触发缓冲测试10.缓冲区读取二、测试App三、测试结果0.前言 上一…

【C++高阶数据结构】B树、B+树、B*树

&#x1f3c6;个人主页&#xff1a;企鹅不叫的博客 ​ &#x1f308;专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接&#xff1a;代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

高等数学(第七版)同济大学 习题11-3 (前7题)个人解答

高等数学&#xff08;第七版&#xff09;同济大学 习题11-3&#xff08;前7题&#xff09; 函数作图软件&#xff1a;Mathematica 1.计算下列曲线积分&#xff0c;并验证格林公式的正确性&#xff1a;\begin{aligned}&1. \ 计算下列曲线积分&#xff0c;并验证格林公式的正…

PyTorch深度学习快速入门教程

PyTorch深度学习快速入门教程1、Pytorch加载数据2、Tensorbord的使用3、Transforms的使用4、常见的Transforms5、torchvision中的数据集使用6、DataLoader的使用7、神经网络的基本骨架—nn.module8、卷积操作9、神经网络—卷积层10、神经网络—池化层的使用11、神经网络—非线性…

靴子落地!Mobileye正式启动4D成像雷达量产进程

4D毫米波雷达赛道正在变得越来越拥挤。 在传统雷达时代&#xff0c;全球主要的市场参与者屈指可数&#xff0c;博世、大陆、安波福、海拉等少数几家巨头几乎垄断前装市场。如今&#xff0c;随着4D时代的开启&#xff0c;越来越多的新进入者希望能够实现换道超车&#xff0c;这…

Jar 组件自动化风险监测和升级实践

背景 以 Xstream、Jackson、Fasjson 等为代表的 Jar 组件高危漏洞层出不穷&#xff0c;安全组每年 N 次推动业务线进行第三方 Jar 组件升级&#xff0c;每次升级动辄涉及成百上千个应用服务&#xff0c;给双方都带来了沉重的负担。为了降低安全组在 Jar 组件升级期间的工作量&…

JS 如何利用浏览器的 cookie 保存用户名

前言 浏览器的cookie可以用来存储一些少量的网站信息,比如登录的用户名,用于提高用户体验非常有帮助 有的一些网站在第一次登录后,在指定的时间范围内容,下次在打开网站,再次登录时,不用每次都重新输入用户名的 或在做一些购物车效果时,也可以使用cookie,保持一个状态持续多…

【数据结构与算法——C语言版】3. 二分查找

前言 本文将介绍在线性表查找中非常常用的一种查找算法——二分法&#xff0c;先介绍二分查找法的核心思路&#xff0c;然后进行代码讲解&#xff0c;最终给出二分查找法的时/空复杂度&#xff0c;并比较其和上篇文章【数据结构与算法——C语言版】2. 数组介绍的顺序查找的区别…

神经网络漫谈(一)

神经网络漫谈(一) 发表时间&#xff1a; 2023年1月6日创作地点&#xff1a;湖北省武汉市作者&#xff1a;ixy_com&Bill Kromydas封面图片来源&#xff1a;Towards Data Science 1、背景 基本概念&#xff1a;神经网络&#xff0c;也称为人工神经网络 (ANN) 或模拟神经…

基础数据结构——二叉树

目录 一、二叉树性质 1、满二叉树、完全二叉树 2、平衡二叉树 3、不平衡二叉树 二、二叉树的存储 1、普通做法 2、竞赛做法 三、二叉树的遍历 1、宽度优先遍历 2、深度优先遍历 &#xff08;1&#xff09;先&#xff08;根&#xff09;序遍历 &#xff08;2&#x…

【java中的集合框架】学习接触java中的集合,走上学习数据结构道路

前言&#xff1a; 大家好&#xff0c;我是良辰呀&#x1f3eb;&#x1f3eb;&#x1f3eb;&#xff0c;从今天开始&#xff0c;我们一起来探索数据结构的知识海洋。期待与大家结伴同行&#xff0c;gogogo。&#x1f36c;&#x1f36c;&#x1f36c; &#x1f9d1;个人主页&…

【自学C++】C++命名空间

C命名空间 C命名空间教程 C 中的命名空间实际上就是一个由程序设计者命名的内存区域&#xff0c;程序设计者可以根据需要指定一些有名字的空间域&#xff0c;把一些全局实体分别放在各个命名空间中&#xff0c;从而与其他全局实体分隔开来。 命名空间是 ANSI C 引入的可以由…

前端入门笔记 03 —— Web(html CSS)布局

常用布局 包含两个定义&#xff1a; 尺寸 定位 定义通过CSS拾取网页元素&#xff0c;控制他们控制普通文档流&#xff0c;周边元素&#xff0c;父容器&#xff0c;浏览器窗口 覆盖默认布局行为盒子模型普通文档流 &#xff08;左到右&#xff0c;上到下&#xff09; 块级元素…