5.4、docker-compose

news2024/12/23 22:33:37
h ttps://www.runoob.com/docker/docker-compose.html  Docker Compose
docker-compose.yml 配置文件编写详解_docker-compose.yml 编写_种子选手的博客-CSDN博客 docker-compose.yml 配置文件编写详解
1.dockerfile: 构建镜像;
2.docker run: 启动容器;
3.docker-compose: 启动服务( 一次性启动多个容器 );

一、Docker Compose介绍

Compose用于定义和运行多容器Docker应用程序的工具,负责实现对Docker容器集群的快速编排。通过Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose项目由python编写,实现上调用Docker服务提供的API对容器进行管理。
Compose中重要概念:
  • 服务:一个应用的容器,实际上可以包括若干相同镜像的容器实例 
  • 项目:由一组关联的应用容器组成的一个完整业务单元
使用它时,首先编写定义多容器(多服务)应用的 YAML 文件,然后将其交由 docker-compose 命令处理,Docker Compose就会基于 Docker 引擎 API 完成应用的部署。
Compose 使用的三个步骤:
    1、使用 Dockerfile 定义应用程序的环境。
    2、使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
    3、最后,执行 docker-compose up 命令来启动并运行整个应用程序。

二、Docker Compose安装

2.1、Compose安装--二进制包安装

下载安装sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
添加执行权限sudo chmod +x /usr/local/bin/docker-compose
查看安装版本docker-compose --version

2.2、Compose安装--pip安装(推荐

apt install python-pip            # centos使用命令yum -y install python-pip安装pip
pip install docker-compose
apt install docker-compose   # ubuntu下安装docker-compose

三、常用命令

docker-compose命令格式:
    docker-compose [-f=<arg>...][options][COMMAND][ARGS...]
参数:
  • -f,--file FILE:指定模板文件,默认为docker-compose.yml,可以多次指定
  • -p,--project-name NAME:指定项目名称,默认将使用所在目录名称作为项目名
  • --x-networking:使用Docker的可插拔网络后端特性
  • --x-network-driver DRIVER:指定网络后端的驱,默认为bridge
  • --verbose:输出更多调试信息
  • -v,--version:打印版本并退出
  • --log-level LEVEL:设置日志级别DEBUG/INFO/WARNING/ERROR/CRITICAL
Commands:
docker-compose config      # Validate and view the Compose file
docker-compose create        # Create services
docker-compose down          # Stop and remove containers, networks, images, and volumes
docker-compose down exec  # Execute a command in a running container
docker-compose images        # List images,需在yaml文件目录下执行
docker-compose version       # Show the Docker-Compose version information
docker-compose ps           # 列出项目中所有运行容器;-q只打印容器的ID需在yaml文件目录下执行
docker-compose logs         # 查看服务日志输出;--no-color关闭颜色区分;-f参数实时输出需在yaml文件目录下执行
docker-compose build        # 构建或者重新构建服务;--force-rm 删除构建过程中的临时容器;--no-cache构建或者重新构建服务的过程中不使用cache;--pull通过pull获取更新版本的镜像
docker-compose run web bash # 在一个服务上执行一个命令
docker-compose start/restart eureka # 启动指定服务已存在的容器;-t,--timeout指定超时时间10s
docker-compose stop/pause eureka    # 停止已运行的服务的容器,但不会删除资源
docker-compose kill eureka          # 通过发送 SIGKILL 信号来停止指定服务的容器
docker-compose rm eureka            # 删除指定(停止状态)服务的容器,会删除应用相关的容器和网络,但是不会删除卷和镜像;-f,--force强制直接删除;-v删除容器挂载的数据卷
docker-compose port web1 50         # 打印绑定的公共端口,输出web1服务50端口所绑定的公共端口
docker-compose up                   # 构建、启动容器;-d后台启动.需在yaml文件目录下执行
docker-compose scale user=3 movie=3 # 设置指定服务运行容器的个数,以 service=num 形式指定,user容器3个,movie容器3个
docker-compose pull[options] [SERVICE] # 拉取服务依赖的镜像
docker-compose push                    # Push service images
docker-compose top                  # 命令列出各个服务(容器)内运行的进程

四、docker-compose.yml

4.0、docker-compose.yml

模板文件是使用Compose的核心。默认的模板文件名为docker-compose.yml
注意每个服务都必须通过image指令指定镜像或build指令(需Dockerfile)等来自动构建生成镜像
如果使用build指令,在Dockerfile中设置的选项(例如:CMD,EXPOSE,VOLUME,ENV等)将会自动被获取,无需在docker-compose.yml中再次设置。

实例

# yaml 配置实例,指定了3个web服务:web1、web2、web3
version: '2'
services:
  web1:
    image: nginx
    ports:
      - "6061:80"
    container_name: "web1"
    networks:
      - dev
  web2:
    image: nginx
    ports:
      - "6062:80"
    container_name: "web2"
    networks:
      - dev
      - pro
  web3:
    image: nginx
    ports:
      - "6063:80"
    container_name: "web3"
    networks:                       
      - pro
networks:
  dev:
    driver: bridge
  pro:
    driver: bridge

4.1、version:指定 docker-compose.yml 文件的写法格式
4.2、services:多个容器集合
4.3、build:配置构建时,Compose 会利用它自动构建镜像,该值可以是一个路径,也可以是一个对象,用于指定 Dockerfile 参数
    
    context:指定dockerfile所在文件夹的路径,也可以是到链接到 git 仓库的 url
    dockerfile:指定dockerfile文件名
    args:指定构建镜像时的变量,这些参数是仅在构建过程中可访问的环境变量
   
4.4、command:覆盖容器启动后默认执行的命令
    
4.5、container_name:指定容器名称,默认使用"项目名称_服务名称_序号"
    因为 docker 容器名称必须是唯一的,所以如果指定了一个自定义的名称,不能扩展一个服务超过 1 个容器
container_name: my-web-container

4.6、devices:指定设备的映射关系

devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
4.7、dns:自定义DNS服务器,可以是一个值,也可以是一个列表
    
4.8、dns_search:自定义 DNS 搜索域。可以是单个值或列表
dns_search: example.com

dns_search:
    - dc1.example.com
    - dc2.example.com
4.9、environment:设置环境变量。使用数组或字典两种格式。只给定名称的变量会自动获取运行Compose主机上对应变量的值,可以用来防止泄露不必要的数据。
    
4.10、expose:暴露端口,只将端口暴露给连接的服务,而不暴露给主机。仅可以指定内部端口为参数
    
4.11、ports:暴露端口信息。使用宿主端口:容器端口(HOST:CONTAINER)格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
    
4.12、extra_hosts类似Docker中的--add-host参数,指定额外的host名称映射信息。会在启动后的服务容器中/etc/hosts文件中添加一条条目8.8.8.8  googledns
extra_hosts:
- "googledns:8.8.8.8"
4.13、healthcheck:通过命令检查容器是否健康运行。
    
4.14、image:指定为镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉去这个镜像
    image:session-web:latest
4.15、labels:为容器添加Docker元数据(metadata)信息。例如可以为容器添加辅助说明信息。
   
4.16、volumes:数据卷所挂载路径设置,可以设置宿主机路径,同时支持相关路径。
    volumes:
        - /var/lib/mysql
        - cache/:/tmp/cache
        - ~/configs:/etc/configs/:ro
4.17、ulimits:指定容器的ulimits限制值例如,指定最大进程数为65535,指定文件句柄数为20000(软限制,应用可以随时修改,不能超过硬限制)和40000(系统硬限制,只能root用户提高)。
nproc: 65535
nofile:
soft: 20000
hard: 40000
4.18、network_mode:设置网络模式
    
4.19、logs:日志输出信息
    
4.20、links:服务之间使用服务名称相互访问,links允许定义一个别名,从而使用该别名访问其他服务
    这样 Web 服务就可以使用 db 或 database 作为 hostname 访问 db 服务了
    
4.21、cgroup_parent:为容器指定父 cgroup 组,意味着将继承该组的资源限制。
cgroup_parent: m-executor-abcd

4.22、entrypoint:覆盖容器默认的 entrypoint

entrypoint: /code/entrypoint.sh

4.23、restart

  • no:是默认的重启策略,在任何情况下都不会重启容器。
  • always:容器总是重新启动。
  • on-failure:在容器非正常退出时(退出状态非0),才会重启容器。
  • unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
restart: "no"
restart: always
restart: on-failure
restart: unless-stopped
注:swarm 集群模式,请改用 restart_policy。

4.24、secrets存储敏感数据,例如密码:

version: "3.1"
services:
    mysql:
        image: mysql
        environment:
            MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my_secret
        secrets:
            - my_secret

secrets:
    my_secret:
        file: ./my_secret.txt

五、docker-compose使用

1、准备

创建一个测试目录:
$ mkdir composetest
$ cd composetest
在测试目录中创建一个名为 app.py 的文件,并复制粘贴以下内容:

composetest/app.py 文件代码:

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)


def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)


@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)
在此示例中,redis 是应用程序网络上的 redis 容器的主机名,该主机使用的端口为 6379。
在 composetest 目录中创建另一个名为 requirements.txt 的文件,内容如下:
flask
redis

2、创建 Dockerfile 文件

在 composetest 目录中,创建一个名为的文件 Dockerfile,内容如下:
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
Dockerfile 内容解释:
  • FROM python:3.7-alpine: 从 Python 3.7 映像开始构建镜像。
  • WORKDIR /code: 将工作目录设置为 /code。
  • 设置 flask 命令使用的环境变量。
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
  • RUN apk add --no-cache gcc musl-dev linux-headers: 安装 gcc,以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速
  • 复制 requirements.txt 并安装 Python 依赖项。
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
  • COPY . .: 将 . 项目中的当前目录复制到 . 镜像中的工作目录。
  • CMD ["flask", "run"]: 容器提供默认的执行命令为:flask run。

3、创建 docker-compose.yml

在测试目录中创建一个名为 docker-compose.yml 的文件,然后粘贴以下内容:

docker-compose.yml 配置文件:

# yaml 配置
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

该 Compose 文件定义了两个服务:web 和 redis。

  • web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 。
  • redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像。

4、使用 Compose 命令构建和运行您的应用

在测试目录中,执行以下命令来启动应用程序:
docker-compose up
如果你想在后台执行该服务可以加上 -d 参数:
docker-compose up -d

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

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

相关文章

upyter Notebook:内核似乎挂掉

项目场景&#xff1a;提示&#xff1a;这里简述项目相关背景&#xff1a;项目场景&#xff1a;深度强化学习在中国股票量化交易上的应用&#xff0c;要求跑赢大盘问题描述提示&#xff1a;这里描述项目中遇到的问题&#xff1a;使用Jupyter Notebook运行时&#xff0c;跑到绘图…

瑞萨RA系列mcu学习笔记--RTT-pwm驱动

方案1&#xff1a;Studio 2.2.6和使用了RASC3.5下使用pwm驱动 开发环境必须说一下&#xff0c;本人在在开发环境的问题上栽了一个跟头&#xff0c; 使用最新版的RTT Studio 2.2.6和使用了RASC4.0的版本生成的公共编译ok&#xff0c;但是一下载到mcu就直接不能运行&#xff1a…

浅谈Java的IO与Netty

一、Java的IO((Input/Output))模型 传统IO和Java NIO最大的区别是传统的IO是面向流&#xff0c;NIO是面向Buffer Socket之间建立链接及通信的过程&#xff01;实际上就是对TCP/IP连接与通信过程的抽象: 1.服务端Socket会bind到指定的端口上&#xff0c;Listen客户端的”插入”…

如何迁移现有应用和数据到阿里云服务器?有哪些迁移工具和方法?

如何迁移现有应用和数据到阿里云服务器&#xff1f;有哪些迁移工具和方法&#xff1f;   随着云计算技术的不断发展&#xff0c;越来越多的企业和个人开始将应用和数据迁移到云服务器上。阿里云作为国内领先的云服务提供商&#xff0c;为用户提供了一系列方便可靠的应用和数据…

2023开放原子全球开源峰会参会感受:英特尔开源技术合作与产品创新

2023开放原子全球开源峰会参会感受&#xff1a;英特尔开源技术合作与产品创新 文章目录 2023开放原子全球开源峰会参会感受&#xff1a;英特尔开源技术合作与产品创新一. 引言二. 6.11参会感受2.1 英特尔基础软件开放生态合作2.2 Celadon加速安卓在英特尔架构上的产品创新2.3 面…

ASEMI代理光宝高速光耦LTV-5341参数,LTV-5341应用

编辑-Z LTV-5341参数描述&#xff1a; 型号&#xff1a;LTV-5341 储存温度Tstg&#xff1a;-55~125℃ 工作温度Topr&#xff1a;-40~110℃ 总输出电源电压(VCC –VEE)&#xff1a;35V 平均正向输入电流IF&#xff1a;20mA 峰值瞬态输入电流IF(TRAN)&#xff1a;1A 输入…

【面试中的网络知识】DNS原理-如何实现域名和IP地址的查询转换

接上一篇&#xff0c;理解 浏览器是如何生成HTTP消息的 &#xff0c;最好是按照顺序来读。  从上一篇博客我们得知浏览器是如何生成了HTTP消息了&#xff0c;但是浏览器作为应用程序&#xff0c;是不具备向网络中发送请求的能力&#xff0c;而是需要委托给操作系统的内核协议栈…

淘宝详情页分发推荐算法总结:用户即时兴趣强化

转子&#xff1a;https://juejin.cn/post/6992169847207493639 商品详情页是手淘内流量最大的模块之一&#xff0c;它加载了数十亿级商品的详细信息&#xff0c;是用户整个决策过程必不可少的一环。这个区块不仅要承接用户对当前商品充分感知的诉求&#xff0c;同时也要能肩负起…

必学KVM技术详解包括所有技能

KVM虚拟化进阶学习 一&#xff0c;KVM命令行安装 图形化安装教程&#xff1a;https://blog.csdn.net/weixin_53678904/article/details/125950867?spm1001.2014.3001.5501 1.存储池管理 ​ KVM必须要配置⼀个⽬录当作他存储磁盘镜像(存储卷)的⽬录&#xff0c;我们称这个⽬…

通达信筹码单峰密集选股公式,突破筹码密集区发出信号

筹码密集是相对筹码发散而言的&#xff0c;筹码分布在宽广的价格区间&#xff0c;这种状态就是筹码发散&#xff08;如下图&#xff09;&#xff0c;而且筹码峰像群山一样&#xff0c;有多个高峰&#xff0c;属于多峰形态。 与之相对的&#xff0c;筹码分布在比较窄的价格区间&…

Armbian安装1panel教程

文章目录 一 1panel简介二 检测是否安装1Panel三 环境要求四 安装操作指导4.1 确定系统类型4.2 执行安装命令4.3 访问1panel面板4.4 设置1panel访问配置4.5 查看访问1panel面板入口 五 常用命令总结 一 1panel简介 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。 二…

New Bing使用教程

New Bing使用教程 New Bing简介前提条件使用技巧 New Bing简介 New Bing是微软推出的一款基于GPT4模型的智能搜索引擎&#xff0c;它不仅可以提供高质量的搜索结果&#xff0c;还可以与用户进行自然语言交互。 用户只需安装Edge浏览器即可使用&#xff0c;但现实使用中会出现…

驱动操作 驱动移植试验和Source Insight添加项目

目录 驱动移植 》1.需要有一个驱动对应的 .c代码 》2.将.c文件放入到对应的文件夹内 》3.修改Makefile文件 》4.修改Kconfig菜单 》5.到顶层目录配置自己驱动 》6.编译成模块 》7.此时用的开发板上内核的编译器&#xff0c;安装得到开发板上进行安装 》8.在开发板上进…

标准IO和文件IO分别实现cp功能(嵌入式学习)

标准IO和文件IO分别实现cp功能 标准IO实现cp功能标准IO概念代码实现 文件IO实现cp功能文件IO概念代码实现 标准IO实现cp功能 标准IO概念 想了解标准IO的概念&#xff0c;请点击这里——》IO进程——标准IO&#xff08;嵌入式学习&#xff09; IO进程——标准IO&#xff08;嵌…

【C语言】三子棋详解(包教包会的那种)

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 三子棋及五子棋详解 前言三子棋的实现1. 打印菜单2.初始化并打印棋盘棋盘初始化函数功能的实现打印棋盘 3.玩家下棋与模拟电脑下棋玩家下棋电脑下棋随机数的生成 4.判断输赢我们的game函数 源码game.hgame.ctest.c 总结 …

PMP课堂模拟题目及解析(第18期)

171. 一个项目已经结束&#xff0c;然而&#xff0c;项目经理和项目团队成员仍然被要求解决技术问题&#xff0c;进行一些变更&#xff0c;并评估新的需求。若要保证项目开发的产品或服务现在具有运营支持&#xff0c;项目经理应该执行下列哪些工作&#xff1f; &#xff08;选…

Nacos配置中心交互模型是push还是pull?

对于Nacos大家应该都不太陌生&#xff0c;出身阿里名声在外&#xff0c;能做动态服务发现、配置管理&#xff0c;非常好用的一个工具。然而这样的技术用的人越多面试被问的概率也就越大&#xff0c;如果只停留在使用层面&#xff0c;那面试可能要吃大亏。 比如我们今天要讨论的…

44从零开始学Java之详解容易让初学者懵圈的abstract抽象类、抽象方法

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 经过前面几篇文章的讲解&#xff0c;我们现在已经对面向对象有了基本的认知&#xff0c;掌握了面向对…

基于Java员工信息管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

2.04_基于矩阵分解的协同过滤推荐

矩阵分解发展史 Traditional SVD: 通常SVD矩阵分解指的是SVD(奇异值)分解技术,在这我们姑且将其命名为Traditional SVD(传统并经典着)其公式如下: Traditional SVD分解的形式为3个矩阵相乘,中间矩阵为奇异值矩阵。如果想运用SVD分解的话,有一个前提是要求矩阵是稠密…