当前位置:   article > 正文

Docker Compose部署容器_docker-compose up会创建一新的容器吗?

docker-compose up会创建一新的容器吗?

1.Docker compose介绍

当服务数量增多的时候,我们需要多次使用Dockerfile Build Image或者DockerHub拉取Image;需要创建多个Container,多次编写启动命令;还需要处理Container互相依赖的如何进行管理和编排。

这个时候就需要Docker Compose帮我们创建和管理多容器。

Docker Compose是一个工具,用于定义和运行多容器应用程序的工具;

Docker Compose通过yml文件定义多容器的docker应用;

Docker Compose通过一条命令根据yml文件的定义去创建或管理多容器;
在这里插入图片描述
Docker Compose 是用来做Docker 的多容器控制,是一个用来把 Docker 自动化的东西。有了 Docker Compose 你可以把所有繁复的 Docker 操作全都一条命令,自动化的完成。

2.项目部署

1. 打包 SpringBoot 项目

2. 编写 Dockerfile 文件

#设置jdk版本
FROM java:8

#设置我们的个人信息,根据需求随便写
MAINTAINER xxx <xxx@XXX.com>
 
#这两行是设置我们容器内的时间以及jvm的时间(默认不是GMT)
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone

COPY *.jar /app.jar

CMD ["--server.port:80"]

EXPOSE 8443

ENTRYPOINT ["java", "-jar","/app.jar"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3. 编写 docker-compose.yml 文件

# 指定我们docker-compose的版本
version: "3"
 
# 设置我们的服务
services:
 
  # 配置mysql服务
  mysql:
    # 指定镜像文件,mysql版本是5.7
    image: mysql:5.7
    
    # 配置容器的名字
    container_name: mysql
 
    # 通过宿主机的3306端口映射到容器里的3306端口
    ports:
      - "3306:3306"
 
    # 配置环境,主要是配置我们的mysql的登陆密码
    environment:
      - MYSQL_ROOT_PASSWORD=root
    
    # 配置挂载的文件夹,在当前文件夹下面创建mysql文件夹,里面有conf,logs,data,分别挂载到容器mysql中的conf.d,logs,mysql中
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/logs:/logs
      - ./mysql/data:/var/lib/mysql
  
  # 配置redis服务
  redis:
    # 设置容器对应的镜像
    image: redis:5.0
 
    # 设置容器名
    container_name: redis
    
    # 设置命令,设置redis登陆密码的,root处是密码
    command: redis-server --requirepass root
 
    # 作为端口映射
    ports:
      - "6379:6379"
    
    # 挂载文件夹
    volumes:
      - ./redis:/data
 
  # 配置springboot服务
  springboot:
    # 生成镜像,用.它会自动去当前目录下面去找一个Dockerfile的文件,然后根据里面的配置去生成一个镜像
    build: .
    
    # 指定我们生成的镜像的名字和版本号
    image: springboot:v1.0.0
 
    # 指定容器名
    container_name: springboot
    
    # 做端口映射
    ports:
      - "8080:8080"
    
    # 写清楚springboot依赖的服务,springboot会在依赖的服务启动之后在启动。这里的名称是service名,
    depends_on:
      - mysql
      - redis
  • 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

4.启动服务

检查docker-compose.yml的语法是否正确,如果不发生报错,说明语法没有发生错误

docker-compose config
  • 1

启动docker-compose.yml定义的服务

docker-compose up
  • 1

5.Docker Compose Yml文件介绍

版本

对于版本没什么介绍的,就是指定使用的版本;

Services

每个Service代表一个Container,与Docker一样,Container可以是从DockerHub中拉取到的镜像,也可以是本地Dockerfile Build的镜像。

image
标明image的ID,这个image ID可以是本地也可以是远程的,如果本地不存在,Docker Compose会尝试pull下来; image: ubuntu

build
该参数指定Dockerfile文件的路径,Docker Compose会通过Dockerfile构建并生成镜像,然后使用该镜像;

build:
  #构建的地址
  context: /usr/local/docker-compose-demo
  dockerfile: Dockerfile
  • 1
  • 2
  • 3
  • 4

ports
暴露端口,指定宿主机到容器的端口映射,或者只指定容器的端口,则表示映射到主机上的随机端口,一般采用主机:容器的形式来映射端口;

#暴露端口
ports:
  - 8081:8080/tcp
expose
暴露端口,但不需要建立与宿主机的映射,只是会向链接的服务提供;
  • 1
  • 2
  • 3
  • 4
  • 5

environment
加入环境变量,可以使用数组或者字典,只有一个key的环境变量可以在运行compose的机器上找到对应的值;

env_file
从一个文件中引入环境变量,该文件可以是一个单独的值或者一个列表,如果同时定义了environment,则environment中的环境变量会重写这些值;

depends_on
定义当前服务启动时,依赖的服务,当前服务会在依赖的服务启动后启动;

depends_on: 
  - docker-compose-demo02
  - docker-compose-demo01
deploy
该配置项在version 3里才引入,用于指定服务部署和运行时相关的参数;
  • 1
  • 2
  • 3
  • 4
  • 5

replicas
指定副本数;

version: '3.4'
services:
  worker:
    image: nginx:latest
    deploy:
      replicas: 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

restart_policy
指定重启策略;

version: "3.4"
services:
  redis:
    image: redis:latest
    deploy:
      restart_policy:
        condition: on-failure   #重启条件:on-failure, none, any
        delay: 5s   # 等待多长时间尝试重启
        max_attempts: 3 #尝试的次数
        window: 120s    # 在决定重启是否成功之前等待多长时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

update_config
定义更新服务的方式,常用于滚动更新;

version: '3.4'
services:
  vote:
    image: docker-compose-demo
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2  # 一次更新2个容器
        delay: 10s  # 开始下一组更新之前,等待的时间
        failure_action:pause  # 如果更新失败,执行的动作:continue, rollback, pause,默认为pause
        max_failure_ratio: 20 # 在更新过程中容忍的失败率
        order: stop-first   # 更新时的操作顺序,停止优先(stop-first,先停止旧容器,再启动新容器)还是开始优先(start-first,先启动新容器,再停止旧容器),默认为停止优先,从version 3.4才引入该配置项
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

resources
限制服务资源;

version: '3.4'
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        #限制CPU的使用率为50%内存50M
        limits:
          cpus: '0.50'
          memory: 50M
        #始终保持25%的使用率内存20M
        reservations:
          cpus: '0.25'
          memory: 20M
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

healthcheck
执行健康检查;

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]   # 用于健康检查的指令
  interval: 1m30s   # 间隔时间
  timeout: 10s  # 超时时间
  retries: 3    # 重试次数
  start_period: 40s # 启动多久后开始检查
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

restart
重启策略;

#默认的重启策略,在任何情况下都不会重启容器
restart: "no"
#容器总是重新启动
restart: always
#退出代码指示失败错误,则该策略会重新启动容器
restart: on-failure
#重新启动容器,除非容器停止
restart: unless-stopped
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

networks
网络类型,可指定容器运行的网络类型;

#指定对应的网络
networks:
  - docker-compose-demo-net
  
  
networks:
  docker-compose-demo-net:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.1.0/24
          gateway: 192.168.1.1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

ipv4_address, ipv6_address
加入网络时,为此服务指定容器的静态 IP 地址;

version: "3.9"

services:
  app:
    image: nginx:alpine
    networks:
      app_net:
        ipv4_address: 172.16.238.10
        ipv6_address: 2001:3984:3989::10

networks:
  app_net:
    ipam:
      driver: default
      config:
        - subnet: "172.16.238.0/24"
        - subnet: "2001:3984:3989::/64"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

Networks
网络决定了服务之间以及服务和外界之间如何去通信,在执行docker-compose up的时候,docker会默认创建一个默认网络,创建的服务也会默认的使用这个默认网络。服务和服务之间,可以使用服务的名字进行通信,也可以自己创建网络,并将服务加入到这个网络之中,这样服务之间可以相互通信,而外界不能够与这个网络中的服务通信,可以保持隔离性。

Volumes
挂载主机路径或命名卷,指定为服务的子选项。可以将主机路径挂载为单个服务定义的一部分,无需在顶级volume中定义。如果想在多个服务中重用一个卷,则在顶级volumes key 中定义一个命名卷,将命名卷与服务一起使用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/74110
推荐阅读
相关标签
  

闽ICP备14008679号