乐趣区

关于java:容器编排DockerCompose少不了

为什么应用 docker-compose

​ 咱们学会了应用 dockerfile 构建 docker 镜像,看起来曾经可能满足咱们的日常需要了,无论须要什么环境,在 dockerfile 里逐渐构建,而后 build、run,就 ok 了,也满足了咱们 docker 隔离性、疾速部署的要求,为什么还须要 docker-compose 呢?

​ 咱们来看一个网站开发最常见的场景:咱们要有数据库,网站利用,nginx,互相配合才是残缺的环境。是的,咱们齐全能够以 ubuntu 为根底镜像,把这些一股脑全装进去,而后运行。然而这样有很多毛病,比方咱们每次都要从新装 mysql 而不是间接利用 mysql 官网的根底镜像,降级保护不不便;如果咱们的利用要扩大也很难,因为每个利用都连贯的本人外部的数据库,无奈共享数据;事实上,这种形式是典型的虚拟机的应用形式,不是 docker 的正确打开方式

​ docker 是轻量化的应用程序,docker 官网举荐每个 docker 容器中只运行一个过程,那么就是说,咱们须要别离为咱们的利用、数据库、nginx 创立独自的 docker 容器,而后别离启动它。设想一下,构建好 docker 之后,每次启动咱们的网站,都要至多 docker run 三次,是不是很繁琐?而且此时这几个 docker 是扩散独立的,很不方便管理。既然这几个 docker 都是为了同一个网站服务,是不是应该把它们放到一起?这就引出了 docker-compose 我的项目。

什么是 docker-compose

​ docker-compose 是 docker 官网的开源我的项目,应用 python 编写,实现上调用了 Docker 服务的 API 进行容器治理。其官网定义为为「定义和运行多个 Docker 容器的利用(Defining and running multi-container Docker applications)),其实就是下面所讲的性能。

装置 Docker-Compose

Docker Compose 是一个用来定义和运行简单利用的 Docker 工具,一个应用 Docker 容器的利用,通常由多个容器组成。应用 Docker Compose 不再须要应用 shell 脚本来启动容器。

​ Compose 通过一个配置文件来治理多个 Docker 容器,在配置文件中,所有的容器通过 services 来定义,而后应用 docker-compose 脚本来启动,进行和重启利用,和利用中的服务以及所有依赖服务的容器,非常适合组合应用多个容器进行开发的场景。

查找最新版的 docker-compose

到 https://github.com/docker/compose/releases/ 地址查找最新的 docker-compose 版本

装置 docker-compose
下载最新版的 docker-compose 文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
增加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
测试装置后果
docker-compose --version

docker-compose 概述

相似 docker 的 Dockerfile 文件,docker-compose 应用 YAML 文件对容器进行治理。

相干概念

对于 docker-compose 有两个根本的概念:

  • 服务(service):一个利用容器,即 docker 容器,比方之前所说的 mysql 容器、nginx 容器
  • 我的项目(project):由一组关联的利用容器组成的一个残缺业务单元,比方下面所讲的由 mysql、web app、nginx 容器组成的网站。docker-compose 面向我的项目进行治理。
YAML 文件格式
  1. 大小写敏感,缩进示意示意层级关系
  2. 缩进空格数不重要,雷同层级左侧对齐即可。(不容许应用 tab 缩进!)
  3. 由冒号分隔的键值对示意对象;一组连词线结尾的行,形成一个数组;字符串默认不应用引号
Compose 和 Docker 兼容性

Docker Engine 与 docker-compose version 之间的有以下关系

compose 文件格式版本 docker 版本
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3 1.13.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2 1.10.0+
1 1.9.1.+

根本应用

接下来咱们应用 docker-compose 构建咱们的微服务以及 mysql,并逐渐解说其应用。

筹备工作

在我的项目文件夹下创立 docker-compose.yml 文件

cd /usr/local/docker-learn/ && touch docker-compose.yml && ll
编写配置文件

先在 docker-compose.yml 文件里增加如下代码,构建咱们的我的项目

version: '2'   
services:
    mysql:
        image: mysql:5.7.33
        hostname: mysql
        container_name: mysql
        restart: always
        networks:
            - learn-docker-network
        volumes:
            - "/tmp/etc/mysql:/etc/mysql/mysql.conf.d/"
            - "/tmp/data/mysql:/var/lib/mysql"
        environment:
            MYSQL_ROOT_PASSWORD: 'root'
    nacos:
        image: nacos/nacos-server
        hostname: nacos
        container_name: nacos
        restart: always
        ports:
            - "8848:8848"
        networks:
            - learn-docker-network
        environment:
            MODE: 'standalone'
            JVM_XMS: '128m'
            JVM_XMX: '128m'
    
    learn-docker-web:
        image: manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-web:1.0-SNAPSHOT
        restart: always
        networks:
            - learn-docker-network
        depends_on:
            - nacos
            - mysql
        volumes:
            - "/tmp/data/logs:/logs"
    learn-docker-storage:
        image: manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-storage:1.0-SNAPSHOT
        restart: always
        networks:
            - learn-docker-network
        depends_on:
            - nacos
            - mysql
        volumes:
            - "/tmp/data/logs:/logs"
    learn-docker-gateway:
        image: manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-gateway:1.0-SNAPSHOT
        restart: always
        ports:
            - "8888:8888"
        networks:
            - learn-docker-network
        depends_on:
            - nacos
            - mysql
        volumes:
            - "/tmp/data/logs:/logs"
networks:
    learn-docker-network:
        driver: bridge
运行测试

在我的项目的文件中执行 docker-compose up -d 命令就能够启动了

docker-compose up -d
微服务拜访测试

通过网关地址拜访测试微服务

curl http://192.168.64.153:8888/employeapi/find/10001| python -m json.tool

参数解释(手册)

version

指定 docker-compose.yml 文件的写法格局

docker-compose.yml的 version 版本号应该和 docker 的版本进行匹配,如果不匹配可能呈现问题。

services

示意多个容器的汇合

服务对象

​ docker-compose.yml 治理是以服务为单位治理的,一个 services 上面能够有多个服务,mysql,app 都代表一个服务

image

​ image 是指定服务的镜像名称或镜像 ID,如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。

hostname

配置容器的 host 名称, 在容器的 hosts 文件中退出了映射

container_name

​ 配置启动后的容器名称和 docker 的 --name xxx 成果是一样的

restart

restart 参数可能使咱们在重启 docker 时,主动启动相干容器, 和 docker 的 --restart 成果统一

Docker 容器的重启策略如下

  • no,默认策略,在容器退出时不重启容器
  • on-failure,在容器非正常退出时(退出状态非 0),才会重启容器
  • on-failure:3,在容器非正常退出时重启容器,最多重启 3 次
  • always,在容器退出时总是重启容器
  • unless-stopped,在容器退出时总是重启容器,然而不思考在 Docker 守护过程启动时就曾经进行了的容器
ports

映射端口的标签,对外裸露的端口定义,和 expose 对应,和 docker 的 -p 成果统一

depends_on

​ 这个是依赖配置的选项,意思是如果 服务启动是如果有依赖于其余服务的,先启动被依赖的服务,启动实现后在启动该服务

networks

配置容器所应用的网络

volumes

挂载一个目录或者一个已存在的数据卷容器,和 docker -v成果统一

environment

配置环境变量,和 docker 的 -e成果统一

常用命令

docker-compose up

用于部署一个 Compose 利用

​ 默认状况下该命令会读取名为 docker-compose.yml 或 docker-compose.yaml 的文件

,用户也能够应用 -f 指定其余文件名。通常状况下,会应用 -d 参数令利用在后盾启动。

docker-compose stop

进行 Compose 利用相干的所有容器,但不会删除它们。

​ 被进行的利用能够很容易地通过 docker-compose restart 命令重新启动。

如果带有服务命则进行该服务,否则进行所有服务

docker-compose rm

用于删除已进行的 Compose 利用。

​ 它会删除容器和网络,然而不会删除卷和镜像。

如果带有服务命则删除该服务,否则删除所有服务

docker-compose restart

重启已进行的 Compose 利用。

​ 如果用户在进行该利用后对其进行了变更,那么变更的内容不会反映在重启后的利用中,这时须要重新部署利用使变更失效。

docker-compose ps

用于列出 Compose 利用中的各个容器。

​ 输入内容包含以后状态、容器运行的命令以及网络端口。

docker-compose down

进行并删除运行中的 Compose 利用。

​ 它会删除容器和网络,然而不会删除卷和镜像。

扩缩容

nacos 查看集群状况

咱们能够查看 nacos,查看当服务器集群的一个部署状况

扩容节点

咱们当初对 learn-docker-storage 节点进行扩容

语法格局:docker-compose up -d --scale 服务名 = 节点数

docker-compose up -d --scale learn-docker-storage=2

启动后查看 nacos 节点信息

缩容节点

和扩容一样指定节点数量就能够的

docker-compose up -d --scale learn-docker-storage=1

进行后后查看 nacos 节点信息

本文由传智教育博学谷 – 狂野架构师教研团队公布,转载请注明出处!

如果本文对您有帮忙,欢送关注和点赞;如果您有任何倡议也可留言评论或私信,您的反对是我保持创作的能源

退出移动版