docker系列(9) - docker-compose

9. compose编排

9.1 介绍

多服务部署工具,通过一个docker-compose.yml模板文件,定义一组关联的应用容器为一个项目。
简单来说,就是当我们一个项目有多个服务需要启动时,通过docker-compose直接一键启动,就可以将所有相关的服务同时启动或者停止。

9.2 安装

参考官方安装文档:https://docs.docker.com/compose/install/linux/
以下两种方式都可以:
第一种:包管理器安装

sudo yum install docker-compose-plugin

第二种:手工安装

curl -SL https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 通常不需要执行这句
#sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

#查看版本
docker-compose --version

#卸载方法
sudo rm /usr/local/bin/docker-compose

9.3 compose常用命令

说明命令
docker-compose -h帮助
docker-compose up启动所有docker-compose服务
docker-compose up -d启动所有docker-compose服务并后台运行
docker-compose down停止并删除容器,网络,卷,镜像
docker-compose exec yml里面的服务id进入容器内部,停止并删除容器,网络,卷,镜像
docker-compose ps展示当前运行的所有容器
docker-compose top展示当前运行的容器进程
docker-compose logs yml的服务id查看容器输出日志
docker-compose config检查配置
docker-compose config -q检查配置,有问题才输出
docker-compose restart重启服务
docker-compose start启动服务
docker-compose stop停止服务

9.4 实战Springboot部署

使用docker-compose来启动springboot项目。
使用到springboot、redis、mysql组件。

9.4.1 准备组件配置文件

9.4.1.1 redis的配置文件

redis配置文件: /docker/redis/redis.conf

# 开启 AOF 持久化
appendonly yes

# 指定 AOF 文件名
appendfilename "appendonly.aof"

# 指定 AOF 文件保存目录
dir /data

# 关闭 RDB 持久化
save ""
# 开启 RDB 持久化
#save 900 1
#save 300 10
#save 60 10000

# 禁用 Redis 的保护模式,允许外部连接
protected-mode no

# 允许其他服务访问
bind 0.0.0.0

# 指定 Redis 监听的端口
port 6379

# 指定日志生成的文件
logfile redis.log
9.4.1.2 MySQL的配置文件

mysql的配置文件:/docker/mysql/conf/my.cnf

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

init_connect='SET collation_connection = utf8_unicode_ci'

init_connect='SET NAMES utf8'

character-set-server=utf8

collation-server=utf8_unicode_ci

skip-character-set-client-handshake

skip-name-resolve
9.4.1.3 SpringBoot打包文件

springboot: 使用7.6.3中打包的镜像springboot:1.0
参考本系列连接跳转

9.4.2 准备docker-compose.yml

version: "3"

services: 
  bootService:
    build: .
    image: springboot:1.0
    container_name: springboot
    environment:
      SPRING_PROFILES_ACTIVE: prod
    ports:
      - "9002:9002"
    volumes:
      - /app/microService:/data
    networks:
      - bridge
    depends_on:
      - redis
      - mysql

  redis:
    image: redis:6.2.13
    container_name: redis
    privileged: true
    ports:
      - 6379:6379
    environment:
      - TZ=Asia/Shanghai
      - TAKE_FILE_OWNERSHIP=true
    volumes:
      - /docker/redis/data:/data 
      - /docker/redis/redis.conf:/etc/redis/redis.conf
    networks:
      - bridge
    command: redis-server /etc/redis/redis.conf 
  
  mysql:
    image: mysql:5.7
    container_name: mysql
    privileged: true
    ports:
      - "3306:3306"
    networks:
      - bridge
    volumes:
      - /docker/mysql/log:/var/log/mysql 
      - /docker/mysql/data:/var/lib/mysql
      - /docker/mysql/conf/:/etc/mysql/conf.d
    environment:
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_ALLOW_EMPTY_PASSWORD: "no"
    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问

networks:
  bridge: 

9.4.3 启动服务

# 先检查配置是否有异常
docker-compose config -q

# 启动所有容器
#第一次测试可以不使用-d
docker-compose up   

在这里插入图片描述

在这里插入图片描述

一切正常,转为后台运行

# 先移除所有的
docker-compose down

# 再后台运行
docker-compose up -d

9.4.4 测试验证

Commands:
  build       Build or rebuild services
  config      Parse, resolve and render compose file in canonical format
  cp          Copy files/folders between a service container and the local filesystem
  create      Creates containers for a service.
  down        Stop and remove containers, networks
  events      Receive real time events from containers.
  exec        Execute a command in a running container.
  images      List images used by the created containers
  kill        Force stop service containers.
  logs        View output from containers
  ls          List running compose projects
  pause       Pause services
  port        Print the public port for a port binding.
  ps          List containers
  pull        Pull service images
  push        Push service images
  restart     Restart service containers
  rm          Removes stopped service containers
  run         Run a one-off command on a service.
  start       Start services
  stop        Stop services
  top         Display the running processes
  unpause     Unpause services
  up          Create and start containers
  version     Show the Docker Compose version information
  wait        Block until the first service container stops

例如重启服务:

# 查看服务
docker-compose ls

#重启服务
docker-compose restart bootService

# 启动服务
docker-compose start bootService

# 停止服务
docker-compose stop bootService

在这里插入图片描述

9.5 实战Elasticsearch+Kibana案例

9.5.1 准备组件配置文件

9.5.1.1 Elasticsearch配置

配置文件:/docker/elasticsearch/config/elasticsearch.yml

network.host: 0.0.0.0
discovery.type: single-node
9.5.1.2 Kibana配置

配置文件: /docker/kibana/config/kibana.yml

server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]  #
elasticsearch.username: "admin"
elasticsearch.password: "admin"
i18n.locale: "zh-CN"

[“http://elasticsearch:9200”]这里elasticsearch是指容器的服务名,不设置这个,会导致kibana连接不上elasticsearch。

9.5.2 docker-compose配置

docker-compose.yml

version: '3.3'
services:
  elasticsearch:
    image: elasticsearch:7.17.7    # 使用的镜像名称
    container_name: elasticsearch	# 容器名称
    ports:	# 指定暴露的端口
      - 9200:9200
      - 9300:9300
    environment: 
      - ES_JAVA_OPTS= -Xms2g -Xmx2g # 指定 JVM 内存大小
    volumes:	# 指定挂载目录
      - /docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /docker/elasticsearch/data:/usr/share/elasticsearch/data
      - /docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins
      - /docker/elasticsearch/logs:/usr/share/elasticsearch/logs
    networks:	
       - bridge
  kibana:
    image: kibana:7.17.7
    container_name: kibana
    ports:
     - 5601:5601
    depends_on:	# 服务依赖
      - elasticsearch
    volumes:
      - /docker/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
    networks:
      - bridge
networks:
  bridge:

9.5.3 验证测试

#启动:
docker-compose up -d

# 卸载
docker-compose down

在这里插入图片描述

http://bidata:5601 访问

<think>好的,我现在要帮用户解决如何使用docker-compose -f指令启动指定的docker-compose-energy.yml文件中的服务。首先,我需要回忆一下docker-compose的基本命令结构。 用户提到了使用-f选项,所以根据Docker Compose的文档,-f是用来指定自定义的compose文件的。默认情况下,docker-compose会找当前目录下的docker-compose.yml文件,但如果用户有自己的文件,比如这里的docker-compose-energy.yml,就需要用-f来指定。 接下来,我需要确认正确的命令格式。基本结构应该是docker-compose -f [文件名] up,然后可能需要加上其他选项,比如-d在后台运行。所以基础命令可能是docker-compose -f docker-compose-energy.yml up -d。这样就能启动服务并在后台运行。 然后,我需要考虑用户可能的后续需求,比如如何停止服务。这时候应该用docker-compose -f 文件名 down。还有查看日志的命令,比如docker-compose -f 文件名 logs -f。这些都是常见的使用场景,应该包含在回答里,方便用户后续操作。 另外,用户可能对docker-compose.yml文件的结构不太熟悉,或者需要检查配置是否正确。可能需要提醒他们在启动前验证文件格式是否正确,可以使用docker-compose config命令。不过用户的问题主要是启动,所以这部分可以作为补充信息。 还要注意,如果用户的环境中有多个compose文件,可能需要合并或者其他操作,但根据问题描述,用户只需要启动一个特定的文件,所以暂时不需要涉及多文件的情况。 最后,确保回答的结构清晰,先给出基础启动命令,然后列出常用操作,这样用户能一步步跟着操作。同时引用相关文档部分,比如引用中的docker-compose up -d和docker-compose down,来增强可信度。</think>根据Docker Compose的使用规范,启动指定YAML文件的服务需使用`-f`参数指定配置文件路径,具体操作步骤如下: **基础启动命令** ```bash docker-compose -f docker-compose-energy.yml up -d ``` **参数说明** - `-f`:指定自定义的Compose文件路径 - `up`:创建并启动服务容器 - `-d`:以守护进程模式(后台运行) **常用扩展操作** 1. **停止并删除服务** ```bash docker-compose -f docker-compose-energy.yml down ``` 该命令会停止容器并移除网络/数据卷(除非配置了持久化卷)[^2] 2. **查看实时日志** ```bash docker-compose -f docker-compose-energy.yml logs -f ``` 3. **重建镜像并启动** ```bash docker-compose -f docker-compose-energy.yml up -d --build ``` 当修改了Dockerfile或依赖文件后需要重建镜像时使用[^3] 4. **仅验证配置文件** ```bash docker-compose -f docker-compose-energy.yml config ``` 用于检查YAML文件语法正确性,验证通过无输出[^2] **注意事项** 1. 文件路径支持相对路径和绝对路径,例如: ```bash docker-compose -f ./config/docker-compose-energy.yml up -d ``` 2. 如果文件中包含`build`指令,会优先使用本地构建的镜像而非仓库镜像[^3] 3. 端口映射冲突时会出现错误提示,需检查`ports`配置项是否与其他服务冲突[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硅谷工具人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值