DockerFile和DockerCompose

传统的操作流程是将本地项目打一个jar包,之后到指定服务器输入指令运行jar包,但jar需要相关中间的环境才能正常运行,这个时候通常是使用docker来拉取镜像部署环境。

但每次都是用docker run 来启动容器来处理太麻烦了,万一需要安装的中间件比较多,或者启动失败就很麻烦,这个时候就需要dockerCompose上场了。

DockerCompose

在dockerCompose中编写各种中间件的服务的配置,包括挂载的宿主主机的文件地址,文件名默认为docker-compose.yml即可,后续在终端通过 docker-compose up -d -build 进行启动。

这里是一个参考的docker-compose.yml文件:

注意:在启动该配置文件,需要现在docker中提前下载好镜像,且镜像的名字和docker-compose.yml中指定的是一致的。

version: '3'
services:
  redis:
    image: redis:latest
    container_name: redis
    command: redis-server --appendonly yes
    volumes:
      - /mydata/redis/data:/data #数据文件挂载
    ports:
      - 6379:6379

  mongo:
      image: mongo:4
      container_name: mongo
      volumes:
        - /mydata/mongo/db:/data/db #数据文件挂载
      ports:
        - 27017:27017    

  # nginx:
  #   image: nginx:1.22
  #   container_name: nginx
  #   volumes:
  #     - /Users/tomsmile/Desktop/mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf  # 修改为宿主机的文件路径
  #     - /Users/tomsmile/Desktop/mydata/nginx/html:/usr/share/nginx/html #静态资源根目录挂载
  #     - /Users/tomsmile/Desktop/mydata/nginx/logs:/var/log/nginx #日志文件挂载
  #   ports:
  #     - 80:80

  # rabbitmq:
  #   image: rabbitmq:3.9.11-management
  #   container_name: rabbitmq
  #   volumes:
  #     - /mydata/rabbitmq/data:/var/lib/rabbitmq #数据文件挂载
  #   ports:
  #     - 5672:5672
  #     - 15672:15672

  # minio:
  #     image: minio/minio
  #     container_name: minio
  #     command: server /data --console-address ":9001" #指定数据目录及console运行端口启动
  #     volumes:
  #       - /mydata/minio/data:/data #数据目录挂载
  #     environment:
  #       - "MINIO_ROOT_USER=minioadmin"
  #       - "MINIO_ROOT_PASSWORD=minioadmin"
  #     ports:
  #       - 9090:9000
  #       - 9001:9001
  # mysql:
  #     image: mysql:5.7
  #     container_name: mysql
  #     command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
  #     restart: always
  #     environment:
  #       MYSQL_ROOT_PASSWORD: 12345678 #设置root帐号密码
  #     ports:
  #       - 3306:3306
  #     volumes:
  #       - /mydata/mysql/data:/var/lib/mysql #数据文件挂载
  #       - /mydata/mysql/conf:/etc/mysql #配置文件挂载
  #       - /mydata/mysql/log:/var/log/mysql #日志文件挂载

  elasticsearch:
    image: elasticsearch:7.17.3
    container_name: elasticsearch
    environment:
      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
      - "discovery.type=single-node" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms2g -Xmx2g" #设置使用jvm内存大小
    volumes:
      - /Users/tomsmile/Desktop/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins # IK 插件挂载
      - /Users/tomsmile/Desktop/mydata/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
    ports:
      - 9200:9200
      - 9300:9300
    mem_limit: 4g  # 设置内存限制
    cpu_shares: 512  # 设置 CPU 权重


  logstash:
    image: logstash:7.17.3
    container_name: logstash
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /Users/tomsmile/Desktop/mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf  # 修改为宿主机的文件路径
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    ports:
      - 4560:4560
      - 4561:4561
      - 4562:4562
      - 4563:4563

  kibana:
    image: kibana:7.17.3
    container_name: kibana
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    environment:
      - "elasticsearch.hosts=http://elasticsearch:9200" #设置访问elasticsearch的地址
    ports:
      - 5601:5601

使用 Docker Compose 创建的容器网络是默认互通的,当你使用 Docker Compose 启动多个服务时,Docker Compose 会为这些服务创建一个默认的桥接网络(bridge network),这样所有的服务(容器)都会自动加入到这个网络中,后续它们可以通过服务名进行互相访问。

这里也是十分方便,如果是单独使用docker run 启动容器这种形式,则需要先创建一个网络,并在指令中进行指定,否则后续容器之间是不共通的。

docker network create test-net --driver bridge

Docker File

上面说了Docker Compose的用途,那么Docker File又是什么呢?

DockerFile本身是一个脚本文件,它的作用就是将通过maven打包好的项目jar包,推送至docker并作为一个镜像,这样所有的项目包括环境都是在docker中运行,因为Docker 容器为应用提供了一个独立、可重复的运行环境,避免了服务器之间环境差异带来的兼容性问题。通过 Dockerfile 配置文件,可以将 JAR 文件和所需的依赖打包成镜像,再在服务器上使用 Docker 运行这个镜像,不需要在每台服务器上重复配置环境。

总结

Docker Compose 和 Dockerfile 的区别:

通过 Dockerfile,我们可以创建一个自定义的镜像,然后基于该镜像运行容器。

通过 Docker Compose,可以一键启动多个服务,管理服务之间的依赖关系。

Dockerfile 用于构建单一镜像;DockerCompose 用于管理和运行多个容器。

简单理解Dockerfile是一个脚本文件,同.sh结尾一样,它是在执行操作,而DockerCompose它是一个配置文件,用于 组织和运行多个容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值