当前位置: 首页 > news >正文

Docker Compose的使用

文章首发于我的博客:https://blog.liuzijian.com/post/docker-compose.html

目录

    • Docker Compose是什么
    • Docker Compose安装
    • Docker Compose文件
    • Docker Compose常用命令
    • 案例:部署WordPress博客系统

Docker Compose是什么

Docker Compose是Docker官方的开源项目,负责实现对Docker容器的快速编排,Docker建议每个容器只运行一项服务,因为容器运行的开销很小,但是同时部署多个应用需要每个容器都单独编写Dockerfile会显得非常复杂,因而Docker官方提供了多容器部署的编排工具Docker Compose

Docker Compose允许用户通过一个单独的配置文件来定义一组相关联的应用容器为一个项目,Docker Compose可以管理多个Docker容器组成的一个应用,只需要定义好一个yaml格式的配置文件docker-compose.xml,写好多个容器之间的调用关系,然后只要一个命令就可以实现一键部署和一键启动和关闭这些容器。

Docker Compose文件格式版本有多种,这里以最为主流的3.x为例

Docker Compose安装

先去下载docker-compose的可执行文件,Docker Compose发布在GitHub上面(https://github.com/docker/compose/releases/),我下载的版本是linux64位的v2.30.3,下载地址:

  • docker-compose-linux-x86_64

安装很简单,只要将下载下来的可执行文件赋予执行权限,并链接即可,先将下载下来的文件docker-compose-linux-x86_64放到/opt目录下,然后作为可执行文件,并建立软链接

chmod +x ./docker-compose-linux-x86_64
ln -s /opt/docker-compose-linux-x86_64 /usr/local/bin/docker-compose

之后,就可以在任意目录执行docker-compose的命令了

Docker Compose文件

一个DockerCompose文件就是一个工程,工程由服务组成,服务就是一个个的应用实例,由一组关联的容器组成一个完整的业务单元就是工程。

文件内包含以下顶级元素:

  • version docker-compose文件版本,大多用3
  • name 应用部署的名称
  • services 服务,下面可以定义多个部署的应用
  • networks 自定义网络,供services下的应用使用
  • volumes 卷,应用用到的卷配置
  • configs 配置
  • secrets 密钥

每个顶级元素下又有以下常用配置项:

  • services.$service-name.image 使用的镜像和TAG
  • services.$service-name.privileged 设置容器权限
  • services.$service-name.container_name 容器名
  • services.$service-name.environment 环境变量
  • services.$service-name.restart 自启动,常见配置:总是always,出错时自启on-failure/on-failure:3
  • services.$service-name.command 自定义命令行参数
  • services.$service-name.ports 端口映射
  • services.$service-name.volumes 数据卷挂载
  • services.$service-name.depends_on 依赖哪个服务,在哪些服务启动后再启动
  • services.$service-name.networks 使用的自定义网络
  • networks.$network-name.driver 自定义网络的类型,不设置的话默认是bridge
  • networks.$network-name.ipam.config IP地址管理,用于管理网络的IP地址分配,不设置则Docker自动分配
  • networks.$network-name.ipam.config.subnet 自定义网络的网段,例如192.168.1.0/24
  • networks.$network-name.ipam.config.gateway 自定义网络的网关,例如192.168.1.1

例:

version: '3'name: my-demoservices:app_1:# 镜像:TAGimage: demo:1.0# 容器名container_name: demo# 提升容器内权限privileged: true# 环境变量environment: - NAME1=VALUE1- NAME2=VALUE2restart: alwayscommand: ["-c nginx.conf"]# 宿主机端口:容器内端口ports:- "80:80"# 扩展语法设置卷,允许更详细的配置,如设置卷驱动和选项volumes:# 绑定挂载,将主机上的一个具体目录或文件直接挂载到容器中- type: bindsource: /var/lib/datatarget: /data# volume是由Docker管理的存储区域,通常在/var/lib/docker/volumes/下- type: volumesource: my-datatarget: /datavolume: nocopy: truesubpath: subnetworks:- my-networkapp_2:image: mysql:8 depends_on:- app_1# 绑定挂载,直接将主机路径映射到容器路径volumes: #宿主机路径:容器内路径- /data:/var/data #只读卷- /host/path:/container/path:ro app_3:# 命名卷,由用户指定名称,Docker 管理其存储位置volumes: - my-data2:/var/lib/mysqlapp_4:# 匿名卷,由Docker自动生成,不指定主机路径或命名卷volumes: - /var/lib/mysql#多容器共享卷app_5:image: mysql:8volumes: - my-data3:/var/lib/mysqlapp_6:image: mysql:8volumes: - my-data3:/var/lib/mysqlnetworks:my-network:driver: bridgeipam:config:- subnet: 192.168.1.0/24gateway: 192.168.1.1volumes:my-data:my-data2: my-data3: 

Docker Compose常用命令

docker-compose.yml文件路径下执行以下命令,如果docker-compose.yml文件的路径不是./或文件名不是默认的docker-compose.yml,你可以使用-f参数来指定文件路径和文件名。这样,DockerCompose会使用你指定的文件来运行命令。

  • 帮助
docker-compose -h
  • 上线所有的服务
docker-compose up docker-compose  -f ./compose.yml up
  • 上线所有的服务并后台运行
docker-compose up -d docker-compose  -f ./compose.yml up -d
  • 上线某一服务
docker-compose up <service>docker-compose [-f ./compose.yml] up <service> 
  • 下线并删除容器、网络、数据卷和镜像
docker-compose down 
  • 停止某一服务
docker-compose stop <service>
  • 删除某服务容器
docker-compose rm -f <service>
  • 进入容器实例内部
docker-compose exec <service> /bin/bash
  • 展示当前docker-compose文件编排过的运行的所有容器
docker-compose ps 
  • 展示当前docker-compose文件编排过的容器进程
docker-compose top 
  • 查看容器输出的日志
docker-compose logs  <service> 
  • 检查配置是否有语法错误
docker-compose config  
  • 检查配置,有问题的才输出
docker-compose -q  
  • 重启服务
docker-compose restart    <service> 
  • 启动服务
docker-compose start   <service> 
  • 扩容,将服务名为app的应用扩容3份
docker-compose scale <service>×3

案例:部署WordPress博客系统

1.编辑compose.yml

name: by_blogservices:mysql:privileged: trueimage: mysql:8.0ports:- "3306:3306"environment: - MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpressvolumes:- mysql-data:/var/lib/mysql- /app/myconf:/etc/mysql/conf.dnetworks:- blog-networkrestart: alwayswordpress:privileged: trueimage: wordpressports:- "8080:80"restart: alwaysdepends_on:- mysqlenvironment: - WORDPRESS_DB_HOST=mysql- WORDPRESS_DB_USER=root- WORDPRESS_DB_PASSWORD=123456- WORDPRESS_DB_NAME=wordpressvolumes:- wordpress-data:/var/www/htmlnetworks:- blog-networkvolumes:mysql-data:wordpress-data:networks:blog-network:

2.执行docker-compose命令启动服务

docker-compose -f ./compose.yml up -d

命令行输出

[root@localhost opt]# docker-compose  -f ./compose.yml up -d
[+] Running 35/24✔ wordpress 22 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                66.2s ✔ mysql 11 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                               93.2s [+] Building 0.0s (0/0)                                                                                                                     
[+] Running 5/5✔ Network by_blog_blog-network     Created                                                                                            0.4s ✔ Volume "by_blog_mysql-data"      Created                                                                                            0.0s ✔ Volume "by_blog_wordpress-data"  Created                                                                                            0.0s ✔ Container by_blog-mysql-1        Started                                                                                            2.6s ✔ Container by_blog-wordpress-1    Started                                                                                            3.6s 
[root@localhost opt]# 

编排完成,服务成功启动,可以看到docker-compose先是创建了自定义的网络,然后是创建和挂载数据卷,然后在按顺序启动容器。

打开浏览器,简单进行初始化的操作后,WordPress博客系统便进入可用状态了😊。

image

相关文章:

Docker Compose的使用

文章首发于我的博客&#xff1a;https://blog.liuzijian.com/post/docker-compose.html 目录 Docker Compose是什么Docker Compose安装Docker Compose文件Docker Compose常用命令案例&#xff1a;部署WordPress博客系统 Docker Compose是什么 Docker Compose是Docker官方的开源…...

[STM32 HAL库]串口空闲中断+DMA接收不定长数据

一、空闲中断 STM32的串口具有空闲中断&#xff0c;什么叫做空闲呢&#xff1f;如何触发空闲中断呢&#xff1f; 空闲&#xff1a;串口发送的两个字符之间间隔非常短&#xff0c;所以在两个字符之间不叫空闲。空闲的定义是总线上在一个字节的时间内没有再接收到数据。触发条件…...

三、华为交换机 Hybrid

一、Hybrid功能 Hybrid口既可以连接普通终端的接入链路&#xff08;类似于Access接口&#xff09;&#xff0c;又可以连接交换机间的干道链路&#xff08;类似于Trunk接口&#xff09;。它允许多个VLAN的帧通过&#xff0c;并可以在出接口方向将某些VLAN帧的标签剥掉&#xff0…...

如何通过 Apache Airflow 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排&#xff08;schedule&#xff09;和监控工作流的平台。它用于编排 ETL&#xff08;Extract-Transform-Load&#xff0…...

Android Studio:Linux环境下安装与配置

更多内容&#xff1a;XiaoJ的知识星球 Android Studio&#xff1a;Linux环境下安装与配置 1.安装JDK2.安装Android Studio2.1 获取安装包2.2 安装&#xff08;1&#xff09;配置环境变量&#xff1a;&#xff08;2&#xff09;运行安装&#xff1a;&#xff08;3&#xff09;配…...

token是用来鉴权的,那session是用来干什么的?

在Web应用和API设计中&#xff0c;鉴权与会话管理是两个核心概念&#xff0c;它们对于确保用户身份的安全性和维护用户会话状态至关重要。Token和Session是两种常用的鉴权与会话管理机制&#xff0c;它们各自具有独特的工作原理和适用场景。下面是对Token和Session的详细解析及…...

基于 WEB 开发的二手车辆销售管理系统设计与实现

标题:基于 WEB 开发的二手车辆销售管理系统设计与实现 内容:1.摘要 摘要&#xff1a;随着互联网技术的不断发展&#xff0c;电子商务在各个领域得到了广泛的应用。本文以二手车辆销售管理系统为例&#xff0c;探讨了基于 WEB 开发的销售管理系统的设计与实现。通过对系统需求的…...

wordpress的火车头商品发布接口

<?php require ../wp-load.php; ini_set(memory_limit, 1024M); set_time_limit(180);$top_cat ; # 图片链接域名替换 $image_host ;$start_time microtime(true);$counter 0; // 临时缓存 $products $skus $categories []; $var_sku_index 1;$rowData$_POST;// if…...

浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索

安科瑞吕梦怡 18706162527 摘 要&#xff1a;分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上&#xff0c;利用太阳能进行发电的一种可再生能源利用方式&#xff0c;与传统的大型集中式光伏电站相比&#xff0c;分布式光伏发电具有更灵活…...

总结3..

#include<stdio.h> int n,m; int a[1002][1002]; int b[1002][1002];//判断该空的八连通图是否被走过 int gg0; int dd0; int xz[8]{-1,-1,-1,0,0,1,1,1},yz[8]{-1,0,1,-1,1,-1,0,1};//八个方向 void dfs(int x,int y) { int dx,dy; for(int i0;i<8;i) { …...

信息奥赛一本通 1168:大整数加法

这道题是一道大整数加法&#xff0c;涉及到高精度的算法&#xff0c;比如说有两个数要进行相加&#xff0c;1111111111111111111111111111111111111112222222222222222222222222222222&#xff0c;那么如果这两个数很大的话我们常用的数据类型是不能进行计算的&#xff0c;那么…...

3.3 OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南

OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南 OpenAI 的 GPT 系列语言模型,包括 GPT-4、GPT-3.5 和 GPT-3,已经成为自然语言处理领域的标杆。无论是文本生成、对话系统,还是自动化任务,开发者都可以通过 API 调用这些强大的模型来增强他们的应用。本文将为您详细介…...

横盘出击的三种经典走势形态,买点以及需要注意的问题技术详解

龙头股在横盘整理过程中&#xff0c;也会出现几种不同的形态&#xff0c;比如矩形整理形态&#xff0c;或者在某一趋势线下方运行。 第一种形态&#xff1a;突破横盘趋势线 突破横盘趋势线时识别横盘龙头启动的关键点位。股价经过一段时间的横盘后&#xff0c;突然出现快速上…...

处理没有提示的字符串、计算相隔天数应用题

正常情况下&#xff0c;小云每天跑 1 千米。如果某天是周一或者月初&#xff08;1 日&#xff09;&#xff0c;为了激励自己&#xff0c;小云要跑 2 千米。如果同时是周一或月初&#xff0c;小云也是跑 2 千米。 小云跑步已经坚持了很长时间&#xff0c;从 1990 年 1 月 1 日周…...

【LeetCode】力扣刷题热题100道(31-35题)附源码 搜索二维矩阵 岛屿数量 腐烂的橙子 课程表 实现 Trie (前缀树)(C++)

一、搜索二维矩阵 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 可以使用 从右上角开始搜索 的方法来有效地找到目标值。 选择起始位置&#xff1a; 从矩…...

react使用react-redux状态管理

1、安装 npm install react-redux2、创建store.js import { createStore } from redux;// 定义初始状态 const initialState {counter: 888 };// 定义 reducer 函数&#xff0c;根据 action 类型更新状态 function reducer(state initialState, action) {switch (action.ty…...

04_角色创建窗口

将上文的登录窗口隐藏 创建空节点 作为创建角色窗口 命名为CreateWnd 创建输入的名字的输入框 再创建一个按钮用来随机角色名字 创建开始游戏按钮 End....

Dockerfile -> Docker image -> Docker container

1. Dockfile -> Docker image docker build -t shuai_image -f xxx/xxx/Dockerfile . (.不能少)出现&#xff1a; [] Building xxx(10/17) > [internal] load build definition from Dockerfile > > transferring dockerfile: … > > transferring context …...

LDN的蓝牙双模键盘帮助文档

文档索引 已支持的PCB列表(仅列出少部分)&#xff1a;键盘特性硬件软件键盘以及驱动蓝牙模式USB模式 驱动功能介绍主界面键盘列表页面键盘配置&#xff08;使用双模键盘的请务必细看本说明&#xff09;功能层配置(改键)触发层配置(改FN键等触发功能)功能选择&#xff08;重要&a…...

搭建一个基于Spring Boot的驾校管理系统

搭建一个基于Spring Boot的驾校管理系统可以涵盖多个功能模块&#xff0c;例如学员管理、教练管理、课程管理、考试管理、车辆管理等。以下是一个简化的步骤指南&#xff0c;帮助你快速搭建一个基础的系统。 1. 项目初始化 使用 Spring Initializr 生成一个Spring Boot项目&am…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...