初识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,文章不足之处,也请给出宝贵意见.

相关推荐
zhuyasen2 分钟前
Go语言Viper配置详解:conf库优雅解析实战
后端·golang
佳佳_16 分钟前
Spring Boot SSE 示例
spring boot·后端
a_j5828 分钟前
K8s面试题总结(十一)
云原生·容器·kubernetes
o0o_-_41 分钟前
【瞎折腾/ragflow】构建docker镜像并部署使用ragflow
运维·docker·容器
Seven971 小时前
【设计模式】使用解释器模式简化复杂的语法规则
java·后端·设计模式
李长渊哦1 小时前
Spring Boot 接口延迟响应的实现与应用场景
spring boot·后端·php
Seven972 小时前
【设计模式】通过访问者模式实现分离算法与对象结构
java·后端·设计模式
一碗手擀面2 小时前
docker镜像发布的应用程序,其配置https的流程
docker·容器·https
Seven972 小时前
【设计模式】遍历集合的艺术:深入探索迭代器模式的无限可能
java·后端·设计模式
小杨4042 小时前
springboot框架项目应用实践五(websocket实践)
spring boot·后端·websocket