Docker 入门篇(八)-- Docker Compose 使用指南

一、Docker Compose 简介

Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。

  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

二、离线安装 docker-compose

1. 下载docker-compose

官方地址:

> https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64

2. 安装

将 docker-compose-linux-x86_64 文件上传到 /root 目录,执行下列命令

#移动文件到/usr/local/bin/,并重命名为docker-compose
sudo mv /root/docker-compose-linux-x86_64  /usr/local/bin/docker-compose
#赋予docker-compose 可执行权限。
sudo chmod +x /usr/local/bin/docker-compose

#查看版本 docker-compose version

docker-compose -v

在这里插入图片描述

三、yml 配置指令参考

1. version

指定本 yml 依从的 compose 哪个版本制定的。

2. build

指定为构建镜像上下文路径:

例如 webapp 服务,指定为从上下文路径 ./dir/Dockerfile 所构建的镜像:

version: "3.7"
services:webapp:build: ./dir

或者,作为具有在上下文指定的路径的对象,以及可选的 Dockerfile 和 args:

version: "3.7"
services:webapp:build:context: ./dirdockerfile: Dockerfile-alternateargs:buildno: 1labels:- "com.example.description=Accounting webapp"- "com.example.department=Finance"- "com.example.label-with-empty-value"target: prod
  • context:上下文路径。
  • dockerfile:指定构建镜像的 Dockerfile 文件名。
  • args:添加构建参数,这是只能在构建过程中访问的环境变量。
  • labels:设置构建镜像的标签。
  • target:多层构建,可以指定构建哪一层。

3. command

覆盖容器启动的默认命令。

command: ["bundle", "exec", "thin", "-p", "3000"]

4.container_name

指定自定义容器名称,而不是生成的默认名称。

container_name: my-web-container

5.depends_on

设置依赖关系。

  • docker-compose up :以依赖性顺序启动服务。在以下示例中,先启动 db 和 redis ,才会启动 web。

  • docker-compose up SERVICE :自动包含 SERVICE 的依赖项。在以下示例中,docker-- compose up web 还将创建并启动 db 和 redis。

  • docker-compose stop :按依赖关系顺序停止服务。在以下示例中,web 在 db 和 redis 之前停止。

version: "3.7"
services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres

6.expose

暴露端口,但不映射到宿主机,只被连接的服务访问。

仅可以指定内部端口为参数

expose:- "3000"- "8000"

7. image

指定容器运行的镜像。以下格式都可以:

image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd # 镜像id

更多配置参考:runoob:docker-compose

8.volumes

将主机的数据卷或者文件挂载到容器里。

version: "3.7"
services:db:image: postgres:latestvolumes:- "/localhost/postgres.sock:/var/run/postgres/postgres.sock"- "/localhost/data:/var/lib/postgresql/data"

9.networks

  1. 默认网络:默认情况下,Docker Compose 会为应用程序创建一个网络,名称为 Docker Compose 配置文件(docker-compose.yml)所在目录名称的小写形式加上 “_default”。例如,如果配置文件位于名为 “myapp” 的目录中,那么默认网络的名称就是 “myapp_default”。每个在 docker-compose.yml 文件中定义的服务(services)都会加入这个默认网络中,使得它们可以相互通信

  2. 自定义网络:除了默认网络之外,你还可以在 docker-compose.yml 文件中定义自定义网络。这样,你可以为应用程序创建具有特定名称和配置的网络。例如:

version: '3'  
services:  web:  build: .  ports:  - "80:80"  networks:  - mynetwork  db:  image: mysql:latest  networks:  - mynetwork  
networks:  mynetwork:  driver: bridge
  1. 使用已存在的网络:如果你已经使用 docker network create 命令创建了一个网络,并且希望 Docker Compose 的服务能够加入这个网络,你可以在 docker-compose.yml 文件中使用 external 关键字来引用这个网络。例如:
version: '3'  
services:  web:  build: .  ports:  - "80:80"  networks:  - myexistingnetwork  
networks:  myexistingnetwork:  external: true

在这个例子中,“web” 服务将加入名为 “myexistingnetwork” 的已存在网络。注意,在引用已存在网络时,你不需要指定网络驱动程序或其他配置选项,只需要设置 external: true 即可。

四、Docker Compose 实例

1. 配置 nginx 启动的 docker-compose.yml

version: '3'  
services:  nginx:  image: nginx:latest  container_name: my-nginxports:  - "80:80"  volumes:  - /home/docker_data/nginx/conf:/etc/nginx 	- /home/docker_data/nginx/html:/usr/share/nginx/html- /home/docker_data/nginx/logs:/var/log/nginx  environment:- NGINX_PORT=80# 如果有需要,可以添加其他的服务或配置

要启动由 docker-compose.yml 文件定义的服务,您可以在文件所在的目录下运行以下命令:

docker-compose up -d

-d 参数表示以“detached”模式运行容器,即在后台运行。

查看 nginx容器 状态

docker ps

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录接口请求偶发504 Gateway Time-out问题

项目场景: 我们将服务部署到A公司服务器中,使用了共五台服务器,分别是:1.NG服务器 2.日志服务器 3.缓存服务器 4.应用服务器1 5.应用服务器2 。而请求过来首先到达的是他们的物理代理服务器,然后再转发请求到我们的ng…

利用一段代码轻松绕过PHP授权系统

第一步&#xff1a;首先你需要改名全局文件 比如说全局文件 common.php&#xff0c;那么 你将他改为core.php 第二步&#xff1a;创建文件 创建一个文件&#xff0c;和改名前的全局文件名称一样&#xff0c;然后把以下代码复制进去就OK了 代码如下&#xff1a; <?php…

OFDM802.11a的FPGA实现(十四)data域的设计优化,挤掉axi协议传输中的气泡

原文链接&#xff08;相关文章合集&#xff09;&#xff1a;OFDM 802.11a的xilinx FPGA实现 目录 1.前言 2.data域的时序要求 3.Debug 1.前言 前面12篇文章详细讲述了&#xff0c;OFDM 802.11a发射部分data域的FPGA实现和验证&#xff0c;今天对data域的设计做一个总结。在…

【vue2项目经验总结:a标签干扰路由】

当我们点击页面中的a标签实现跳转时&#xff0c;会发现网页上方的路由也切换成了a标签的id值&#xff1a; 刷新后页面也会变成空白&#xff1a; 解决方法&#xff1a; 添加Click方法&#xff0c;传入的参数与id值保持一致 scrollIntoView() 方法&#xff0c;将该元素滚动到…

快解析Tplink端口映射如何设置

Tplink作为国内知名路由器品牌&#xff0c;有着广泛的用户群体。使用快解析端口映射是实现内网服务器被外网访问必须要做的设置&#xff0c;很多对网络不懂得小白不知道该到哪里去做&#xff0c;下面我就讲解一下tplink路由器如何做端口映射。 1&#xff1a;访问路由器 &#…

Peter算法小课堂—序列切割

讲序列切割之前&#xff0c;先来个铺垫 高手集训 题目描述&#xff1a; 课程表里有连续的n天可以供你选择&#xff0c;每天都有专题课程。其中第i天的专题趣味程度为h[i]。假设你选择了其中连续的若干天&#xff0c;从第l天到第r天。那么&#xff0c; 训练效果 h[l]*1 h[…

【实践】使用vscode来debug go程序的尝鲜

配置 首先&#xff0c;当然得配置好vscode 的go环境&#xff0c; 装个go插件就基本满足了 配置 launch.json, 可以配置多个环境的程序启动参数&#xff08;很友好&#xff09; {"version": "0.2.0","configurations": [{"name": &…

嵌入式CAN通信协议详解分析

CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。 CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线…

JavaSE——集合框架一(2/7)-Collection集合的遍历方式-迭代器、增强for循环、Lambda、案例

目录 Collection的遍历方式 迭代器 增强for循环&#xff08;foreach&#xff09; Lambda表达式遍历集合 案例 需求与分析 代码部分 运行结果 Collection的遍历方式 迭代器 选代器是用来遍历集合的专用方式&#xff08;数组没有选代器&#xff09;&#xff0c;在Java中…

初始Django

初始Django 一、Django的历史 ​ Django 是从真实世界的应用中成长起来的&#xff0c;它是由堪萨斯&#xff08;Kansas&#xff09;州 Lawrence 城中的一个网络开发小组编写的。它诞生于 2003 年秋天&#xff0c;那时 Lawrence Journal-World 报纸的程序员 Adrian Holovaty 和…

秒杀系统之设计方向

1 秒杀存在的问题 对于一个日常平稳的业务系统&#xff0c;如果直接开通秒杀功能的话&#xff0c;往往会出现很多问题—— 2 设计方向的思考 秒杀本质是要求一个瞬时高发下的承压系统&#xff0c;这也是其区别于其他业务的核心场景。对日常系统秒杀产生的问题逐一进行拆解分…

DTC 2024回顾丨zData X 多元数据库一体机:开创多元数据库时代部署新范式

导语 在2024“数据技术嘉年华”上&#xff0c;云和恩墨数据库一体机产品总经理刘宇在“数据库极致特性”专题论坛发表了题为《打造多元数据库部署新范式&#xff0c;引领一体化资源池创新之路》的演讲。他深入分析了国产数据库面临的挑战&#xff0c;并详细介绍了云和恩墨如何利…