DockerCompose的安装以及使用

2023-11-19

docker-compose的安装以及使用

docker-compose的定义

docker-compose是docker容器的单机编排工具,它是一个可以管理多容器的工具,比如可以解决多容器之间的依赖关系,比如启动nginx前端服务的时候会调用后端tomcat,这时候就需要先启动tomcat,但启动tomcat的时候需要依赖数据库,那就需要最先启动数据库,docker-compose就可以解决这样的依赖关系,其可以替代docker run来对容器进行管理

docker的安装

Docker的安装

安装docker-compose

运行安装命令(可能得翻墙)

curl -L "https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose

给予权限

chmod a+wrx /usr/local/bin/docker-compose

docker-compose常用服务配置

Compose文件是一个定义服务,网络和卷的YAML文件。 Compose文件的默认文件名为docker-compose.yml

version: '3'
services: 
	webapp:
		build: ./dir # build 可以指定包含构建文件的上下文路径 或者作为一个对象 该对象具有上下文路径指定的Dockerfile文件以及args参数值
		# webapp服务将会通过./dir目录下的Dockerfile-alternate文件作为构建容器的镜像 如果你同时指定image和build,则compose会通过build指定的目录构建容器镜像,而构建的镜像名为image中指定的镜像名和标签。
			context: ./dir  # 包含Dockerfile文件的目录路径 或者git仓库的URL 当提供的是相对路径时 他被解析为相对于当前compose文件的位置. 该目录也是发送到Docker守护程序构建镜像的上下文。
			dockerfile: Dockerfile-alternate # 备用Dockerfile文件。
			args:  # 添加构建镜像的参数 环境变量只能在构建过程中访问。
				buildno: 1
			context: 
		image: redis # 指定启动容器的镜像 可以是镜像仓库/标签或者镜像id(或者id的前一部分) 如果镜像不存在 compose将尝试从官方镜像仓库将其pull下来 如果你还指定了build 在这种情况下 他讲使用指定的build选项构建它 并使用image指定的名字和标记对其进行标记
		container_name: my-redis # 指定一个自定义的容器名称 而不是默认生成的名称 由于Docker容器名称必须是唯一的 因此如果指定了自定义名称 则无法将服务扩展到多个容器。
		volumes: 
        	- "./data/postgres/:/var/lib/postgresql/data" # 挂载 卷挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro),挂载数据卷的默认权限是读写(rw),可以通过ro指定为只读。 你可以在主机上挂载相对路径,该路径将相对于当前正在使用的Compose配置文件的目录进行扩展。 相对路径应始终以 . 或者 .. 开始。
        command: bundle exec thin -p 3000 # 覆盖容器启动后默认的执行命令 该命令也可以是一个类似于dockerfile的列表 command: ["bundle", "exec", "thin", "-p", "3000"]
        links: 
           - db
           - db:database
           - redis
           # 链接到另一个服务中的容器 请指定服务名称和链接名称 或者仅指定服务名称 在当前的web服务的容器中可以通过链接的db服务的别名database访问db容器中的数据库应用,如果没有指定别名,则可直接使用服务名访问。链接不需要启用服务进行通信 - 默认情况下,任何服务都可以以该服务的名称到达任何其他服务。 (实际是通过设置/etc/hosts的域名解析,从而实现容器间的通信。故可以像在应用中使用localhost一样使用服务的别名链接其他容器的服务,前提是多个服务容器在一个网络中可路由联通)links也可以起到和depends_on相似的功能,即定义服务之间的依赖关系,从而确定服务启动的顺序。
         external_links:
           - redis_1
           - project_db_1:mysql
           - project_db_1:postgresql
           # 链接到docker-compose.yml 外部的容器,甚至并非 Compose 管理的容器。参数格式跟 links 类似。
         expose:
            - "3000"
            - "8000"
		  # 暴露端口,但不映射到宿主机,只被连接的服务访问。 仅可以指定内部端口为参数。
		 ports:
             - "3000"
             - "3000-3005"
             - "8000:8000"
             - "9090-9091:8080-8081"
             - "49100:22"
             - "127.0.0.1:8001:8001"
             - "127.0.0.1:5000-5010:5000-5010"
             - "6060:6060/udp"
		# 暴露端口信息。 常用的简单格式:使用宿主:容器 (HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
		# 在v3.2中ports的长格式的语法允许配置不能用短格式表示的附加字段。 长格式:
		ports:
          - target: 80  # 容器内的端口 
            published: 8080  # 物理主机的端口 
            protocol: tcp # 端口协议(tcp或udp)
            mode: host # host 和ingress 两总模式,host用于在每个节点上发布主机端口,ingress 用于被负载平衡的swarm模式端口。
		restart: 
			restart: "no"
            restart: always
            restart: on-failure
            restart: unless-stopped
            # no是默认的重启策略,在任何情况下都不会重启容器。 指定为always时,容器总是重新启动。 如果退出代码指示出现故障错误,则on-failure将重新启动容器。
        environment:
          RACK_ENV: development
          SHOW: 'true'
          SESSION_SECRET:
 
        environment:
          - RACK_ENV=development
          - SHOW=true
          - SESSION_SECRET
          # 添加环境变量。 你可以使用数组或字典两种形式。 任何布尔值; true,false,yes,no需要用引号括起来,以确保它们不被YML解析器转换为True或False。 只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。 注意:如果你的服务指定了build选项,那么在构建过程中通过environment定义的环境变量将不会起作用。 将使用build的args子选项来定义构建时的环境变量。
        pid: "host" # 将PID模式设置为主机PID模式。 这就打开了容器与主机操作系统之间的共享PID地址空间。 使用此标志启动的容器将能够访问和操作裸机的命名空间中的其他容器,反之亦然。即打开该选项的容器可以相互通过进程 ID 来访问和操作。
        dns: 8.8.8.8
        dns:
          - 8.8.8.8
          - 9.9.9.9
          # 配置 DNS 服务器。可以是一个值,也可以是一个列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DockerCompose的安装以及使用 的相关文章

  • 如何从连接到外部网络的另一个组合访问容器?

    这是带有容器配置的撰写文件 我希望从外部容器连接到该容器 在另一个撰写文件中定义 version 3 5 services service to connect to build networks my external network n
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • Logrotate - nginx 日志不在 docker 容器内旋转

    我有一个运行 nginx 的 docker 容器 它正在将日志写入 var log nginxLogrotate 安装在 docker 容器中 并且 nginx 的 logrotate 配置文件已正确设置 尽管如此 logrotate 仍不
  • docker中CREATED容器是什么意思?

    我有点困惑docker容器的状态 尤其是与状态为已创建 我知道当容器正在运行状态如下所示 root labadmin VirtualBox RAGHU DOCKER docker ps CONTAINER ID IMAGE COMMAND
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • Docker - SequelizeConnectionRefusedError:连接 ECONNREFUSED 127.0.0.1:3306

    我正在尝试使用 Docker 容器启动并运行我的 Nodejs 应用程序 我不知道可能出了什么问题 当我使用控制台调试凭据时 凭据似乎已正确传递 另外启动sequel pro并使用相同的用户名和密码直接连接似乎也可行 当节点在容器中启动时
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • apt-get 无法在 ubuntu dockerfile 中工作

    我对 docker 相当陌生 正在尝试通过编写自己的镜像来学习 并且目前正在阅读 Docker 的实际操作 ISBN 1633430235 在我自己的代码和书中的示例 第 146 页 中 我想通过 dockerfile 安装 git My
  • 我可以从命令行打印 html 文件(带有图像、css)吗?

    我想从脚本中打印带有图像的样式化 html 页面 谁能建议一个开源解决方案 我使用的是 Linux Ubuntu 8 04 但也对其他操作系统的解决方案感兴趣 你可以给html2ps http user it uu se jan html2
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • sendfile64 只复制约2GB

    我需要使用 sendfile64 复制大约 16GB 的文件 到目前为止我所取得的成就是 include
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • 如何判断我是否通过脚本登录到私有 Docker 注册表?

    如何判断我是否通过脚本登录到私有 Docker 注册表服务器 换句话说 有docker login some registry com已成功运行 并且仍然有效 注意 我问的是任意私有注册表 而不是docker io注册表 如果 docker
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im

随机推荐

  • java公钥签名,ping++ java验签(签名,公钥,charge)怎么获取

    packageexample importjava io FileInputStream importjava security InvalidKeyException importjava security KeyFactory impo
  • Halcon模板匹配

    Halcon模板匹配 Halcon模板匹配的方法 模板匹配的流程 基于形状的模板匹配的思路 原理 Halcon模板匹配的方法 模板匹配的流程 基于形状的模板匹配的思路 读取图像 转灰度图 dev close window dev open
  • vue项目打包部署到linux tomcat服务器,解决一刷新就报错404问题

    1 部署到服务器前 更改webpack配置 修改index js中以下配置 2 运行npm run build 或者cnpm run build命令 打包完成后 在项目的根目录dist文件下生成了如下文件 3 tomcat的webapps创
  • 问题解决——使用串口调试助手发送控制字符 协议指令 <ESC>!?

    问题解决 使用串口调试助手发送控制字符 协议指令 参考文章 1 问题解决 使用串口调试助手发送控制字符 协议指令 2 https www cnblogs com wlsandwho p 4202094 html 备忘一下
  • 丁鹏:多角度回顾因果推断的模型方法

    来源 集智俱乐部 本文约23000字 建议阅读20 分钟 本文整理自丁鹏老师的8篇短文 从多角度回顾了因果推断的各种模型方法 导读 推断因果关系 是人类思想史与科学史上的重要主题 现代因果推断的研究 始于约尔 辛普森悖论 经由鲁宾因果模型
  • 云服务器是什么? 云服务器有哪些选择?

    欢迎前往我的个人博客云服务器查看更多关于云服务器和建站等相关文章 随着互联网技术的发展和云计算技术的应用 越来越多的企业倾向于使用云服务器来满足其不断增长的计算需求 云服务器是一种基于云计算技术的虚拟服务器 它能够为企业提供高性能 可靠 灵
  • 【算法竞赛】Python快速入门指南

    该指南由GPT4编写 用于快速入门蓝桥杯Python组 当然 仅限入门而已 本指南由GPT 4生成 我只是负责引导 并对内容进行整理和补充 一直以来我都是使用C 作为算法竞赛语言 但是奈何C 组太卷 自己又太菜 于是另谋他路 Prompt模
  • 【AD20】快速且只选中部分自己想要的同类型的元件

    在project属性框里面 可以选择所有如下图所示内容 这个是一个过滤器 里面有多种小选项 比如 Components 元件 Pads 焊盘 Texts 文本 选择哪个就只能选择对应的部分 比如 只选择文本 在画图区域 框选 发现只有文本才
  • 数位拆分

    4 数位拆分v1 0 现有一个4位数的正整数n 4321 即n是一个已知的数 固定为4321 编写程序将其拆分为两个2位数的正整数43和21 计算并输出拆分后的两个数的加 减 乘 除和求余的结果 例如n 4321 设拆分后的两个整数为a b
  • 【目标检测】OneNet: Towards End-to-End One-Stage Object Detection

    label assignment是指 在训练过程中如何将某个prediction指定给某个GT 用于计算损失 训练网络 对于上一篇文章 他们首先用one to one label assignment替换了one to many label
  • 生信学习——Linux必做20题(附详细答案解读)

    题目列表 1 在任意文件夹下面创建形如 1 2 3 4 5 6 7 8 9 格式的文件夹系列 2 在创建好的文件夹 home qiime2 Desktop test 1 2 3 4 5 6 7 8 9 下创建文本文件 me txt 3 在文
  • C#中unsafe的使用

    1 unsafe在C 程序中的使用场合 实时应用 采用指针来提高性能 引用非 net DLL提供的如C 编写的外部函数 需要指针来传递该函数 调试 用以检测程序在运行过程中的内存使用状况 2 使用unsafe的利弊 好处是 性能和灵活性提高
  • python 分段拟合 判别_利用Python检验你的策略参数是否过拟合(转)

    过拟合现象 一般来说 量化研究员在优化其交易策略参数时难免会面临这样一个问题 优化过后的策略在样本内表现一般来说均会超过其在样本外的表现 即参数过拟合 对于参数优化来说 由于优化时存在噪音 过拟合是不可避免的现象 然而为了追求策略的稳定性
  • unity期末作业-插针游戏

    unity期末作业 插针游戏 附下载链接 鼠标控制针的发射 圆盘可以显示接住的针数目 若两根针碰到则界面变红 游戏结束 详细情况如下动态图 点我下载 https download csdn net download weixin 43474
  • 从云到「链」,京东云成为中国第四朵云背后

    在产业加速到数实融合加速的今年 云计算不再是云厂商的唯一考校指标 作者 叶子 出品 产业家 京东云再次破圈 信号来自接连发布的几份报告 在国际权威研究机构Forrester发布的名为 The Forrester Wave Public Cl
  • maven官网下载bin.tar.gz和bin.zip以及src.tar.gz和src.zip的区别

    maven官网http maven apache org download cgi 去官网下载的时候不知道选哪个 现在记录一下 首先弄清楚各后缀的含义 1 bin代表二进制class文件 由java文件编译而成 src代表源码 java源码
  • 天池数据竞赛docker提交操作学习

    天池数据竞赛docker提交操作学习 由于最近天池的比赛都要求使用docker来提交结果 所以在此记录一下docker提交到天池的整个流程 目前正在做的 全球人工智能技术创新大赛 热身赛二 比赛链接 https tianchi aliyun
  • 高效计算基础与线性分类器

    七月算法5月深度学习班课程笔记 No 2 1 深度学习与应用 1 图像上的应用 可以根据图片 识别图片的内容 描述图像 模仿人的创造性生成画作 相册自动归类等 2 NLP上的应用 用RNN学习某作家的文笔风格进行写作 学习代码写作等 下图为
  • 使用 gperftools 分析程序cpu性能

    一 gperftools 简介 gperftools 是 google 开源的一组套件 提供了高性能的 支持多线程的 malloc 实现 以及一组优秀的性能分析工具 二 安装 gperftools 2 1 下载源码 从 gperftools
  • DockerCompose的安装以及使用

    docker compose的安装以及使用 docker compose的定义 docker compose是docker容器的单机编排工具 它是一个可以管理多容器的工具 比如可以解决多容器之间的依赖关系 比如启动nginx前端服务的时候会