首页 > 其他分享 >使用DockerCompose部署服务

使用DockerCompose部署服务

时间:2025-01-06 09:04:05浏览次数:7  
标签:容器 compose 服务 DockerCompose web 部署 Compose Docker docker

由于格式或图片解析问题,为了更好的阅读体验,可前往 阅读原文

以前我们总是用命令管理每个容器的启动、停止等等,若有多个容器时可能还存在启动优先级的问题,那就要等到指定的容器启动后再去启动另一个容器,对于整体的应用服务管理极其不方便,简单的docker run命令更适合初学者或者调试使用, docker提供docker compose来解决多容器部署。

Docker Compose是Docker官方提供的一个工具,它允许用户通过配置文件定义和运行多个 Docker 容器,以便更轻松地管理 Docker 应用程序的部署和运行。Docker Compose 可以让用户在单个主机上运行多个容器,也可以在多个主机上运行同一组容器,并且可以实现容器之间的相互通信和协作

扫码关注攻粽号,查看更多优质文章

image

优势

相比启动单个容器,使用docker compose有以下优势:

  • 简化多容器应用部署: Docker Compose 可以将多个容器的部署、启动、停止、删除等操作集成到一起,以便简化多容器应用的部署和管理。
  • 统一配置管理: Docker Compose 允许用户使用 YAML 文件定义容器的配置,从而实现容器的统一管理。这使得在多容器应用中对于环境变量、网络设置、端口映射等配置的管理更加方便和统一。
  • 容器之间的通信: Docker Compose 允许用户自定义容器之间通信的网络,容器之间可以直接通信,方便了应用程序的开发和部署。
  • 可重复性和可移植性: 使用 Docker Compose 可以将应用程序的部署过程进行标准化,降低了部署过程中的错误率。同时,Docker Compose 配置文件可以在不同的环境中使用,从而实现应用程序的可移植性。
  • 管理多个环境: Docker Compose 可以对不同的环境进行管理,比如开发环境、测试环境和生产环境,从而方便了应用程序的开发和测试。

初识DockerCompose

Docker Compose 配置文件是一个 YAML 格式的文件,用于定义多个 Docker 容器的配置和关系。下面是一个简单的 Docker Compose 配置文件示例:

version: '3'
services:
  web:
    build:
    	context: .
    	dockerfile: Dockerfile.web
    ports:
      - "8080:80"
    depends_on:
    	- redis
  redis:
    image: "redis:alpine"

在这个示例配置文件中,version 字段指定了 Docker Compose 的版本号,services 字段用于定义多个 Docker 容器。在 services 字段中,每个容器都是一个子字段,其键名是容器的名称,其值是一个包含容器配置的键值对。

在示例配置文件中,定义了两个容器 web 和 redis,其中:

  1. web 容器使用本地 Dockerfile.web 配置文件构建镜像,将容器的 80 端口映射到主机的 8080 端口,其依赖redis的启动后才会启动自己
  2. redis 容器使用 Redis 官方镜像,并使用 Alpine 版本,没有指定其他特殊的配置。

从以上可以看出docker compose是将整个应用的所有容器全部写在了同一个配置文件中,其也会自动管理容器的启动先后顺序,而对于配置文件的管理也更加方便,接下来看下其常用语法。

语法

docker compose的配置是个yaml文件,在配置文件中容器将作为服务部署,docker compose帮我们统一管理这些服务,包括镜像、启动顺序、网络、数据卷、端口、重启策略等等。配置中services、networks、volumes等这些都可以在最顶端定义表示需要创建的全局network、volume等等。

services

在Docker Compose中,services是定义容器的基本单位

语法:

services:
  <service_name>:
    <service_config>

其中,<service_name>是服务名称,可以任意命名,但建议使用有意义的名称。<service_config>是服务的配置信息,包含了运行服务所需的所有信息,如镜像、容器名称、端口映射、环境变量等。

例子:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"

image

services中的每个容器都是一个服务,其都会包含镜像文件。镜像可以指定第三方的,也可以使用本地Dockerfile进行构建

语法:

# 省略其他...
<service_config>
  # 使用第三方
  image: nginx:alpine

  # 本地构建
  build:
  	context: .
  	dockerfile: Dockerfile

你可以在容器中通过image指定第三方的镜像文件,也可以使用build来进行本地镜像的构建,build可以简写成build: your dir不需要指定上下文等等,其默认会使用当前目录下的Dockerfile文件进行构建

ports、networks、volumes

除了容器中的镜像外,其他如:端口、数据卷、网络其实都是类似,并且和直接用docker run启动容器时使用差不多

语法:

# 省略其他...
<service_config>
  image: nginx:alpine

  # 端口
  ports:
  	- "<host_port>:<container_port>/<protocol>"
  	- "1000"
  	- "8080:80"
  	- "443:443/tcp"

  # 数据卷
  volumes:
  	- myvolume:/etc/data
  	- /root/html:/etc/nginx/html

  # 网络
  networks:
  	- mynetwork

# 定义数据卷
volumes:
	myvolume:

# 定义网络
networks:
	mynetwork:

上面展示了端口、数据卷、网络的基本配置:

  • 端口:在容器中使用ports来定义端口的的映射,语法如上,当仅指定一个端口是<container_port>,这种就是告诉外面容器内使用了1000端口,你可以进行映射,实际上并没有和宿主机进行映射而是一种定义,可dockerfile中的expose类似;使用<host_port>:<container_port>时前面表示宿主机端口,后者表示容器端口,二者进行映射;除此还支持协议,直接在最后加上/<protocol>即可
  • 数据卷:容器中使用volumes列表进行卷的映射,你可以直接使用宿主机的目录进行映射,也可以使用docker创建的卷,并且你还可以使用没有创建的数据卷,但同时你必须在顶级定义指定的数据卷,这样docker会帮你自动创建数据卷
  • 网络:使用网络和数据卷类似,当使用不存在的自定义的网络时,也需要在顶级进行定义

depends_on

使用depends_on字段来定义容器之间的依赖关系,以确保在启动容器时,必须先启动其所依赖的容器

语法:

depends_on:
  - <service_name>
  - <service_name2>
  ...

其中,<service_name>是所依赖的服务名称,可以是单个服务或多个服务

例子:

version: '3'
services:
  db:
    image: mysql
  web:
    image: my-web-app
    depends_on:
      - db

在这个示例中,我们定义了两个服务:一个名为db的服务,使用了mysql镜像;一个名为web的服务,使用了自定义的web应用镜像,并在depends_on字段中指定了db服务,表示web服务依赖于db服务。

在启动这个Docker Compose文件时,Docker会先启动db服务,然后再启动web服务,以确保web服务可以连接到db服务并正常运行。

environment

可以使用environment字段来设置容器中的环境变量,其与docker run -e、Dockerfile中定义的ENV类似

语法:

environment:
  - <key>=<value>
  - <key2>=<value2>
  ...

其中,<key>是环境变量的名称,<value>是环境变量的值。可以设置多个环境变量,每个环境变量之间用-分隔

例子:

version: '3'
services:
  web:
    image: my-web-app
    environment:
      MYSQL_HOST: db
      MYSQL_USER: user
      MYSQL_PASSWORD: password

在这个示例中,我们定义了一个名为web的服务,使用了自定义的web应用镜像,并设置了三个环境变量:MYSQL_HOST、MYSQL_USER和MYSQL_PASSWORD。这些环境变量可以在容器内部使用,例如在web应用的配置文件中。

需要注意的是,如果在Docker Compose文件中定义了环境变量,而在Dockerfile中也定义了同名的环境变量,那么Docker Compose文件中的环境变量会覆盖Dockerfile中的环境变量。

除此之外还可以使用.env文件或命令行参数来设置环境变量。这样可以避免将敏感信息硬编码到Docker Compose文件中
:::warning 注意
Docker Compose文件中定义的环境变量会覆盖.env文件中的同名环境变量
:::

.env配置文件示例:

MYSQL_HOST=db
MYSQL_USER=user
MYSQL_PASSWORD=password

compose文件配置:

version: '3'
services:
  web:
    image: my-web-app
    environment:
      MYSQL_HOST: ${MYSQL_HOST}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}

使用docker-compose命令的--env-file参数来指定环境变量文件。

restart

使用restart字段来定义容器的重启策略,在容器异常退出或停止时,自动重新启动容器

语法:

restart: <restart_policy>

其中,<restart_policy>是重启策略,可以是以下几种之一:

  • no:不重启容器,默认值
  • always:总是重启容器,除非手动停止容器
  • on-failure:在容器异常退出时重启容器,可以使用-t选项指定重启次数
  • unless-stopped:除非手动停止容器,否则总是重启容器

例子:

version: '3'
services:
  web:
    image: my-web-app
    restart: always

在这个示例中,我们定义了一个名为web的服务,使用了自定义的web应用镜像,并设置了重启策略为always,表示总是重启容器。需要注意的是,restart字段只会在容器异常退出或停止时才会生效,而不会影响容器的启动顺序或依赖关系。

更多

关于docker compose配置的讲解就到这里,其配置和docker run很相似,关于更多配置可以查看

标签:容器,compose,服务,DockerCompose,web,部署,Compose,Docker,docker
From: https://www.cnblogs.com/98kk/p/18654293

相关文章

  • docker对外发布服务,docker compose使用
    一.对外发布服务 1.端口绑定,对外发布服务 dockerrun-itd-p宿主机端口:容器端口镜像:标签 2.容器存储卷,目录映射 dockerrun-itd-v宿主机对象:容器内对象镜像:标签 3.给容器修改配置文件 (1)把容器的配置文件拷贝出来 dockercpweb:/usr/loc......
  • Spring cloud 微服务 Gateway 项目中使用
    文章目录概述项目引入pom文件yaml文件配置全局过滤器跟局部自定义过滤器全局过滤器局部自定义过滤器概述SpringCloudGateway是SpringCloud生态系统中的一个关键组件,用于实现API网关功能。它基于SpringFramework5、ProjectReactor和SpringBoo......
  • 【Nginx开发】Nginx 性能优化全方案,打造一个高效服务器
    Nginx是一款高性能的Web服务器,广泛应用于互联网领域。然而在高并发、大流量的情况下,Nginx的性能可能会受到一定的影响。因此,对Nginx进行性能优化是非常必要的。本文将从多个方面介绍如何基于Nginx进行性能优化。一、调整工作进程数和线程数Nginx采用异步非阻塞的方式处理请求......
  • Redis 服务器的日志文件
    这段日志是Redis服务器的日志文件,记录了Redis在运行过程中的一些事件和警告。下面是对日志中关键信息的分析:AsynchronousAOFfsyncistakingtoolong(diskisbusy?):这个警告表明Redis的异步AOF(AppendOnlyFile)持久化操作中的fsync调用花费了太长时间。这......
  • python毕设 健身房会员服务管理系统r226ooxg程序+论文 可用于毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着健身行业的蓬勃发展,健身房已成为现代人追求健康生活的重要场所。然而,传统的健身房管理方式往往依赖于人工记录和服务,这不仅效率低下,而......
  • 基于java的SpringBoot/SSM+Vue+uniapp的德云社票务系统的详细设计和实现(源码+lw+部署
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • Linux服务器无Root权限安装Cuda方法及问题解决
    CUDA简介什么是CUDA?CUDA(ComputeUnifiedDeviceArchitecture)是由NVIDIA提供的一种并行计算平台和编程模型,用于加速计算密集型任务。CUDA允许开发者使用GPU的计算能力,通过并行处理来快速执行复杂的计算任务。CUDA包括以下主要组成部分:CUDAToolkit:为开发人员提供工......
  • 知识中台与人工智能:融合赋能企业智能化知识服务与决策
    在数字化、智能化的时代背景下,企业面临着前所未有的机遇与挑战。为了提升知识管理与服务的能力,推动企业的智能化转型与发展,知识中台与人工智能的融合应用正成为新的趋势。知识中台作为连接数据、知识与业务的核心平台,能够为企业提供统一、高效的知识管理与应用环境。而人工智能技......
  • 简单园区网的部署
    目录1、配置各主机的ip,可直接界面配置。2、配置交换机SW-1。3、配置交换机SW-2。4、配置路由交换trunk接口,并测试通信。5、配置路由交换三层路由接口。6、测试各主机通信情况。网络拓扑交换机Ethernet0/0/1和Ethernet0/0/2的VLANID为10,接口类型为access。Et......
  • 云服务器中代码版本管理与自动化构建
    0x01环境准备云服务器:阿里云服务器ECS2核2G安全组配置(入方向):目的源描述(可选)(其他项)80所有IPv4(0.0.0.0/0)HTTP(默认)3000所有IPv4(0.0.0.0/0)Gitea(默认)8080所有IPv4(0.0.0.0/0)Jenkins(默认)(其他)(默认)(系统添加的项保留)(默认)操作系统:Ub......