为什么要用docker-compose我们学习了使用dockerfile构建docker镜像,貌似可以满足我们的日常需求。不管需要什么环境,在dockerfile中逐步构建,然后构建,运行,就ok了,也满足了我们docker隔离和快速部署的需求。为什么需要docker-compose?先来看网站开发最常见的场景:我们需要数据库,网站应用,nginx,配合就是一个完整的环境。是的,我们可以用ubuntu作为基础镜像,安装好这些脑洞,然后运行。但这有很多缺点。比如我们每次都要重新安装mysql,而不是直接使用官方的mysql基础镜像,不方便升级和维护;也很难扩展我们的应用程序,因为每个应用程序都连接到自己内部的数据库,无法共享数据;其实这个方法是典型的使用虚拟机的方法,并不是docker的正确打开方法。docker是一个轻量级的应用,docker官方建议每个docker容器中只运行一个进程,所以也就是我们需要为我们的应用、数据库、nginx分别创建单独的docker容器并分别启动。试想一下,建好docker之后,我们每次启动网站,至少要运行docker3次,是不是很麻烦?而且此时这些码头工人分散且独立,管理起来非常不便。由于这些码头工人都在为同一个网站服务,是否应该将它们放在一起?这导致了docker-compose项目。什么是docker-composedocker-compose是docker官方开源项目,用python编写,通过调用Docker服务的API实现容器管理。它的官方定义是“定义和运行多容器Docker应用程序(Definingandrunningmulti-containerDockerapplications)”,其实就是上面说的功能。安装Docker-ComposeDockerCompose是一个用于定义和运行复杂应用程序的Docker工具,使用Docker容器的应用程序,通常由多个容器组成。使用DockerCompose无需使用shell脚本启动容器。Compose通过配置文件管理多个Docker容器。在配置文件中,通过services定义所有容器,然后使用docker-compose脚本来启动、停止和重启应用程序,应用程序中的服务和所有依赖的服务容器非常适合多个容器组合的场景为了发展。找到最新版本的docker-compose到https://github.com/docker/compose/releases/地址找到最新版本的docker-compose安装docker-compose下载最新版本的docker-compose文件sudocurl-L“https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname-s)-$(uname-m)”-o/usr/local/bin/docker-compose添加可执行文件权限sudochmod+x/usr/local/bin/docker-compose测试安装结果docker-compose--versiondocker-compose概述与docker的Dockerfile类似,docker-compose使用YAML文件来管理容器。相关概念docker-compose有两个基本概念:service:一个应用容器,即docker容器,比如前面提到的mysql容器,nginx容器project(项目):由一组关联的应用容器组成一个完整的业务单元,比如上面提到的由mysql、webapp、nginx容器组成的网站。docker-compose是面向项目的。YAML文件格式区分大小写。缩进是指缩进空格的个数不重要,同级左对齐就够了。(不允许使用Tab缩进!)以冒号分隔的键值对表示一个对象;一组以连字符开头的行构成一个数组;strings默认不使用引号Compose和DockerDockerEngine和docker-compose版本之间的兼容性compose文件格式版本docker版本3.417.09.0+3.317.06.0+3.217.04.0+3.11.13.1+31.13.0之间有如下关系+2.317.06.0+2.21.13.0+2.11.12.0+21.10.0+11.9.1.+基本使用接下来我们使用docker-compose来搭建我们的微服务和mysql,一步步讲解它的使用。准备工作在项目文件夹下创建docker-compose.yml文件cd/usr/local/docker-learn/&&touchdocker-compose.yml&&ll编写配置文件首先在docker-compose.yml文件中加入如下代码即可构建我们的项目版本:'2'服务:mysql:图像:mysql:5.7.33主机名:mysqlcontainer_name:mysql重新启动:始终网络:-learn-docker-networkvolumes:-“/tmp/etc/mysql:/etc/mysql/mysql.conf.d/"-"/tmp/data/mysql:/var/lib/mysql"环境:MYSQL_ROOT_PASSWORD:'root'nacos:image:nacos/nacos-serverhostname:nacoscontainer_name:nacosrestart:always端口:-“8848:8848”网络:-learn-docker-network环境:MODE:'standalone'JVM_XMS:'128m'JVM_XMX:'128m'learn-docker-web:image:manager-hongbaoyu-java.itheima.net:8443/图书馆/学习码头r-web:1.0-SNAPSHOTrestart:alwaysnetworks:-learn-docker-networkdepends_on:-nacos-mysqlvolumes:-"/tmp/data/logs:/logs"learn-docker-storage:image:manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-storage:1.0-SNAPSHOT重新启动:总是网络:-learn-docker-networkdepends_on:-nacos-mysql卷:-“/tmp/data/logs:/logs”learn-docker-gateway:image:manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-gateway:1.0-SNAPSHOT重启:始终端口:-“8888:8888”网络:-learn-docker-networkdepends_on:-nacos-mysqlvolumes:-"/tmp/data/logs:/logs"networks:learn-docker-network:driver:bridge运行测试在项目的文件中执行docker-composeup-d命令可以启动docker-composeup-d微服务接入测试。通过网关地址curl访问测试微服务http://192.168.64.153:8888/employeapi/find/10001|蟒蛇-mjson。工具参数说明(手册)version指定docker-compose.yml文件的写入格式docker-compose.yml的版本号要与docker的版本相匹配。如果不匹配,可能会出现问题。services代表多个容器的集合服务对象docker-compose.yml管理以服务为单位进行管理。一个服务下可以有多个服务,mysql、app都代表一个服务镜像image是指定服务的镜像名称或镜像ID,如果本地不存在镜像,Compose会尝试拉取这个镜像。hostname配置容器的主机名,在容器的hosts文件中加入映射container_name。配置启动后的容器名称与docker的--namexxx效果相同。restart重启参数可以让我们在重启docker的时候自动启动相关的容器。Docker容器的重启策略如下no,默认策略是容器退出时on-failure不重启容器,容器异常退出(exitstatus不为0)时on-failure重启容器。:3、容器异常退出时重启容器,alwaysrestartupto3times,容器退出时总是重启containerunless-stopped,容器退出时总是重启容器,但不要考虑dockerdaemon已经startedwhenitstarts停止的容器端口的端口映射端口的标签,对外暴露的端口定义,对应expose,docker的-p的作用depends_on这是一个依赖于配置的选项,意思是如果服务启动,如果依赖其他服务,首先启动依赖的服务,启动完成后,在网络配置容器使用的网络卷上挂载目录或现有数据卷容器以启动服务,这与docker-venvironment配置环境变量的效果是一致的,docker的-common命令docker-composeup用于部署一个Compose应用。默认情况下,此命令将读取名为docker-compose.yml或docker-compose.yaml的文件。用户也可以使用-f指定其他文件名。通常,-d参数用于在后台启动应用程序。docker-composestop停止与Compose应用程序相关的所有容器,但不删除它们。可以使用docker-composerestart命令轻松重启已停止的应用程序。如果有服务命令,则停止服务,否则停止所有服务docker-composerm用于删除停止的Compose应用。它删除容器和网络,但不删除卷和图像。如果有服务命令,则删除该服务,否则删除所有服务。docker-composerestart重新启动停止的Compose应用程序。如果用户在停止应用后对应用进行更改,则更改的内容不会反映在重新启动的应用中。在这种情况下,需要重新部署应用程序以使更改生效。docker-composeps用于列出Compose应用程序中的各个容器。输出包括当前状态、容器运行的命令和网络端口。docker-composedown停止并删除正在运行的Compose应用程序。它删除容器和网络,但不删除卷和图像。伸缩nacos查看集群情况我们可以通过查看nacos查看一个服务器集群的部署情况伸缩节点我们现在扩容learn-docker-storage节点语法格式:docker-composeup-d--scaleservicename=节点数docker-composeup-d--scalelearn-docker-storage=2启动后查看nacos节点信息。缩减节点等同于扩容。只需指定节点数。docker-composeup-d--scalelearn-docker-storage=1停止后查看nacos节点信息如果本文对您有帮助,请关注并点赞;有什么建议也可以留言或私信。您的支持是我坚持创作的动力
