初识Docker-Compose(包含示例)

一.引言

Docker-Compose相比DockerFile运行一个容器而言,Compose可以一个定义和运行一组容器,用来简化多容器环境的管理和部署的场景。通过Docker-Compose,开发者可以使用YAML文件来配置一组应用服务,并且只需一个简单的命令即可创建和启动所有服务。这种方法特别适用于复杂应用程序和中间件的部署,也非常适用于开发和演示环境快速搭建。本文示例可参考Gitee仓库各种compose文件夹中README.md文档说明

二.安装Docker-Compose

安装Docker-Compose之前,需要先安装Docker,参考之前 juejin.cn/post/726938... 文章中的Docker安装指南

1.前往 github.com/docker/comp... 选择DockerCompose对应的版本下载linux二进制文件 2.把文件重命名为 docker-compose 放入/usr/local/bin/ 路径下并添加可执行权限

bash 复制代码
chmod +x /usr/local/bin/docker-compose

3.查看docker-compose判断是否安装成功

bash 复制代码
docker-compose version

示例-安装NACOS和MYSQL

1.创建名为docker-compose-config.yml配置文件

yml 复制代码
services:
  # Mysql
  serverMysql:
    restart: always
    image: mysql:8.0.23
    container_name: server-mysql
    environment:
      MYSQL_ROOT_HOST: '%'
      MYSQL_ROOT_PASSWORD: mysql@Mypass.
      MYSQL_DATABASE: server_nacos_db
      MYSQL_USER: nacos
      MYSQL_PASSWORD: nacos@Mypass.
      TZ: Asia/Shanghai
    volumes:
      - /opt/dockerData/config/mysql/config/my.cnf:/etc/mysql/my.cnf
      - /opt/dockerData/config/mysql/data:/var/lib/mysql
      - /opt/dockerData/config/mysql/log:/logs
      - /opt/dockerData/config/mysql/init:/docker-entrypoint-initdb.d
      - /opt/dockerData/configPlus/mysql/mysql-files:/var/lib/mysql-files
    logging:
      driver: 'json-file'
      options:
        max-size: '5g'
    command: 
      --lower_case_table_names=1
      --max_connections=1000
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --default-authentication-plugin=mysql_native_password
    # 解决docker容器中的mysql安全认证问题
    security_opt:
      - seccomp:unconfined
    ports:
      - 3306:3306
    healthcheck:
      test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
      interval: 10s
      timeout: 10s
      retries: 10
    networks:
      - configNet
  # Nacos
  serverNacos:
    restart: always
    image: nacos/nacos-server:2.0.1
    container_name: server-nacos
    privileged: true
    environment:
      TZ: Asia/Shanghai
      MODE: standalone
      NACOS_APPLICATION_PORT: 8848
      SPRING_DATASOURCE_PLATFORM: mysql
      MYSQL_SERVICE_HOST: serverMysql
      MYSQL_SERVICE_DB_NAME: server_nacos_db
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: nacos
      MYSQL_SERVICE_PASSWORD: nacos@Mypass.
    volumes:
      - /opt/dockerData/config/nacos/logs:/home/nacos/logs
    logging:
      driver: 'json-file'
      options:
        max-size: '2g'
    depends_on:
       serverMysql:
        condition: service_healthy
    networks:
      - configNet
    ports:
      - 8848:8848
      - 9848:9848
      - 9849:9849
networks:
  configNet:
    driver: bridge
    enable_ipv6: false

3.同级目录执行命令即可,建议启动服务前先对文件夹进行授权

命令示例 复制代码
# 增加权限
sudo chmod -R 777 /opt
# 在后台所有启动服务,指定编排文件
docker-compose -f docker-compose-config.yml up -d
# 停止服务
docker-compose -f docker-compose-config.yml stop
# 删除容器包括网络和卷
docker-compose -f docker-compose-config.yml down -v

示例-安装ELK

1.创建名为docker-compose-elk.yml配置文件

yml 复制代码
services:
  # ES
  elasticsearch:
    restart: always
    image: elasticsearch:7.4.2
    container_name: server-elasticsearch
    privileged: true
    user: root
    environment:
      # 以单一节点模式启动
      - discovery.type=single-node 
      # 设置使用JVM内存大小
      - ES_JAVA_OPTS=-Xms4096m -Xmx4096m
      # ES密码(注意修改ES密码的情况下,Logstash和kibana映射文件里面的ES密码也要修改)
      - ELASTIC_PASSWORD=es@Mypass.
    volumes:
      # 挂在ES文件
      - /opt/dockerData/elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /opt/dockerData/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins
      - /opt/dockerData/elk/elasticsearch/data:/usr/share/elasticsearch/data
    networks:
      - elkNet
    ports:
      - 9200:9200
      - 9300:9300
  # Logstash    
  logstash:
    restart: always
    image: logstash:7.4.2
    container_name: server-logstash
    privileged: true
    user: root
    volumes:
      # 挂载logstash的配置文件
      - /opt/dockerData/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
      - /opt/dockerData/elk/logstash/config/pipeline.yml:/usr/share/logstash/config/pipeline.yml
      - /opt/dockerData/elk/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch
    networks:
      - elkNet
    ports:
      - 5044:5044
      - 9600:9600
  # Kibana
  kibana:
    restart: always
    image: kibana:7.4.2
    container_name: server-kibana
    privileged: true
    volumes:
      # 挂载logstash的配置文件
      - /opt/dockerData/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
    depends_on:
      - elasticsearch
    networks:
      - elkNet
    ports:
      - 5601:5601
networks:
  elkNet:
    driver: bridge
    enable_ipv6: false

3.同级目录执行命令即可,建议启动服务前先对文件夹进行授权

命令示例 复制代码
# 增加权限
sudo chmod -R 777 /opt
# 在后台所有启动服务,指定编排文件
docker-compose -f docker-compose-elk.yml up -d
# 停止服务
docker-compose -f docker-compose-elk.yml stop
# 删除容器包括网络和卷
docker-compose -f docker-compose-elk.yml down -v

GITEE仓库地址

码云:gitee.com/liselotte/d...

谢谢大家阅读,如果喜欢,请收藏点赞,多给些star,文章不足之处,也请给出宝贵意见.

相关推荐
易协同低代码19 小时前
通达OA核心类库TD类深度解析
后端
Gopher_HBo19 小时前
Go语言学习笔记(十八)Gin处理Session
后端
谭光志19 小时前
工具塞满上下文窗口怎么办?深度拆解 AI Agent Tool Search 按需加载实现原理
前端·后端·ai编程
她说..20 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
foggyprojects20 小时前
从0开始,一句话启动AI DataAgent
后端·数据分析·ai编程
郡杰20 小时前
一些基础和问题解决
后端
陈随易20 小时前
前端项目部署只要30秒
前端·后端·程序员
YIAN20 小时前
从零手写文件读取 MCP 服务:一文吃透 Model Context Protocol 全链路通信原理
前端·后端·mcp
Imchendiana20 小时前
《狂人日记NO.9》— 前后端一把梭,我的全栈实录
前端·后端
学渣超20 小时前
记一次分布式事务数据不一致的排查之旅:从超时到索引,层层剥茧
java·后端·架构