为什么应用 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 文件格式
- 大小写敏感,缩进示意示意层级关系
- 缩进空格数不重要,雷同层级左侧对齐即可。(不容许应用 tab 缩进!)
- 由冒号分隔的键值对示意对象;一组连词线结尾的行,形成一个数组;字符串默认不应用引号
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 节点信息
本文由传智教育博学谷 – 狂野架构师教研团队公布,转载请注明出处!
如果本文对您有帮忙,欢送关注和点赞;如果您有任何倡议也可留言评论或私信,您的反对是我保持创作的能源