当前位置:   article > 正文

解锁容器化世界:docker-compose实现一键自动部署_docker一键部署

docker一键部署

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

上文说到了docker部署springboot程序,在我们的实际环境当中,可能有上百个微服务,难道每个微服务都需要docker run吗。docker官方给我们提供个一个自动化部署:docker-compose,通过docker-compose我们一键部署我们想部署的所有应用,可以理解为docker-compose是一个服务部署编排的功能。

Dockerfile可以让用户管理一个单独的应用容器;而Compose则允许用户在一个模板(YAML格式) 中定义一组相关联的应用容器( 被称为一个project,即项目),例如一个Web服务容器再加上后端的数据库服务容器等。

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排

一、docker-compose安装

在使用docker-compose之前,我们需要先安装docker,docker的安装流程请戳:
解锁容器化世界:docker快速安装

最简单的安装方式
1.下载安装包

sudo curl -L https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • 1

下载完成之后,不需要解压,因为下载的本来就是文件夹。
2,赋予文件夹权限

sudo chmod +x /usr/local/bin/docker-compose
  • 1

3,验证安装

docker-compose --version
  • 1

离线版本安装
docker-compose官方git地址:

https://github.com/docker/compose/releases/
  • 1

在这里插入图片描述
下载下来,直接传到/usr/local/bin目录下即可。

二、docker-compose实践

docker-compose自动部署docker程序是依赖docker-compose.yml文件
1,先创建yml配置文件

version: '3'

services:
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - "3306:3306"
    volumes:
      - /opt/mysql:/var/lib/mysql

  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    volumes:
      - /opt/redis:/data

  kafka:
    image: wurstmeister/kafka:latest
    depends_on: 
      - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
  zookeeper:
    image: wurstmeister/zookeeper:latest
    ports:
      - "2181:2181"

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.15.0
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
  nacos:
    image: nacos/nacos-server
    environment:
      - MODE=standalone
    ports:
      - "8848:8848"
  system-biz:
    image: system-biz:1.0.1
    depends_on:
      - mysql
      - redis
      - nacos
      - elasticsearch
      - seaweedfs_master
      - kafka
    environment:
      - TZ=Asia/Shanghai
      - NACOS=-Dspring.cloud.nacos.config.server-addr=nacos:8848 -Dspring.cloud.nacos.discovery.server-addr=nacos:8848 -Dspring.cloud.nacos.config.password=nacos -Dspring.cloud.nacos.config.username=nacos -Dspring.cloud.nacos.discovery.username=nacos -Dspring.cloud.nacos.discovery.password=nacos
      - JAVA_OPTS=-Dserver.port=8080 -Xms1G -Xmx1G -Dspring.profiles.active=dev    -Duser.timezone=Asia/Shanghai
      - AGENT=-javaagent:skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=system-biz
    ports:
      - "10025:8080"
    volumes:
      - /opt/docker/system-biz:/app/logs

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

yml文件配置避免踩坑指南

  • YAML数据结构通过缩进来表示(要用空格,不要用换行符,yml文件对换行符敏感)
  • 连续的项目通过减号来表示
  • 键值对用冒号分隔
  • 数组用中括号 [ ] 括起来
  • 注意大小写

比如:

name:
 - 阿里巴巴
 - 滴滴
 - 美团

 name: ["zhangsan", "lisi", "wangwu"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1.docker-compose配置详解

image:要启动的镜像
depends_on:该镜像需要依赖的镜像,即启动的先后顺序,比如说nacos依赖于mysql,需要mysql先启动成功后,才会启动nacos
ports:端口映射,前面为宿主机的端口,后面为容器的端口。
volumes:容器卷的挂载
在这里插入图片描述
上文中提到过一个问题,我们想看容器里的日志的时候,需要每次都进入到容器查看吗?答案肯定不是,可以利用容器卷的挂载,比如说上图中:/app/logs为容器里面,springboot应用所产生的日志,我们将他挂载到了宿主机的/opt/docker目录下面,以后需要看日志的时候,可以直接进入到宿主记得/opt/docker目录下查看

2.常见问题

1,当我们的springboot应用需要挂载探针时怎么办?
可以将探针打到镜像里面去,然后通过配置Dockerfile参数来指定探针的位置。
提供一个DockerFile万能模板,可以无脑使用:

FROM openjdk:8

ADD *.jar /app/
ADD skywalking-agent/ /app/skywalking-agent/
WORKDIR /app/

CMD ["sh","-c","java $NACOS $AGENT  $JAVA_OPTS  -jar *.jar"]



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

与上线的yml文件可配套使用。

2,docker常用指令
启动服务

docker-compose up -d
  • 1

停止服务

docker-compose down
  • 1

列出所有运行容器

docker-compose ps
  • 1

查看服务日志

docker-compose logs
  • 1

构建或者重新构建服务

docker-compose build
  • 1

启动服务

docker-compose start
  • 1

停止已运行的服务

docker-compose stop
  • 1

重启服务

docker-compose restart
  • 1

总结

docker-compose实现在单机上完成容器集群的编排管理单机容器编排
使用 docker-compose可以完成多个docker run的所有操作。
补充:容器重启策略

  • never,默认策略,在容器退出时不重启容器。
  • on-failure,在容器非正常退出时(退出状态非0),才会重启容器。
  • on-failure:3,在容器非正常退出时重启容器,最多重启3次。
  • always,在容器退出时总是重启容器(中间件常用)
  • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/991251
推荐阅读
相关标签
  

闽ICP备14008679号