docker compose的简单应用
作为java程序员,第一个docker实例就打算对tomcat下手了。
1.基本理论
先用一张图片简单地表示一下docker实例如何和客户端交互的:
按照理想状况,假设物理机资源足够充足,那么一个物理机能包含的docker实例数量基本相当于它的端口数。
通过图示,可以看到,一个tomcat docker实例通过映射到物理机的8080端口对外提供服务,另一个实例通过映射到物理机的9080端口对外提供服务。那么客户端分别可以访问 http://{物理机ip}:8080,http://{物理机ip}:9080对外提供的服务。
2.实践
在编写具体的docker-compose.yml之前,我们需要先确定一下安装的docker版本:
$ docker version
为什么要先确定docker版本,因为它决定了我们该怎么编写docker-compose.yml,请看下图:
没错,还是这个链接:https://docs.docker.com/compose/compose-file/compose-versioning/
现在,我们可以根据自己的docker版本开始编写docker-compose.yml:
#版本,和上图的docker版本对应
version: "3.7"
services:
#docker实例
tomcat-01:
#镜像名称
image: tomcat:jre11
#实例名称
container_name: "tomcat-01"
#映射的端口号
ports:
#前面是物理机端口,后面是docker实例端口
- "8080:8080"
#将docker实例的文件夹挂载到物理机上
volumes:
#前面是物理机的文件夹,后面是docker实例的文件夹路径。映射的其实是tomcat的webapps文件夹。
- "/home/docker/tomcat01/webapps:/usr/local/tomcat/webapps"
#配置同上,只是端口和文件夹映射不同
tomcat-02:
image: tomcat:jre11
container_name: "tomcat-02"
ports:
- "9080:8080"
volumes:
- "/home/docker/tomcat02/webapps:/usr/local/tomcat/webapps"
现在,我们的docker-compose.yml编写好了。我们可以将自己编写好的java项目打成war包放进上述配置文件中指定的物理机文件夹中,其实就是把war包放进了tomcat的webapps中。
在docker-compose.yml所在文件夹执行以下命令:
$ docker-compose build
docker服务器会去远程仓库下载tomcat:jre11镜像,如果本地有这个镜像,就不会去远程下载。
build结束后,我们可以执行命令查看下载的镜像:
$ docker-compose images
也可以直接执行命令直接启动指定的docker实例:
$ docker-compose up
这个命令是前台进程启动docker实例,一旦关闭终端就会导致实例停止服务。所以我们要让docker实例后台运行:
$ docker-compose up -d
启动后,我们可以查看docker实例:
$ docker-compose ps
停止docker实例:
$ docker-compose stop tomcat-01
因为我们这里的例子是tomcat-01,小伙伴根据自己的情况执行相关命令
所以,我们也可以指定启动具体的某一个实例:
$ docker-compose start tomcat-01
小伙伴要注意,如果修改了docker-compose.yml后是需要重新build的,否则有可能不起作用。这个原因先不给大家解释。
其他docker-compose命令请查看:文档
关于docker镜像的查询:docker镜像仓库
国内的docker镜像:阿里云(需要登录) 网易云(需要登录)
总结:以上docker-compose的应用例子足够大家做一个简单的实践。小伙伴要好好利用docker-compose强大的volumes功能,可以利用文件挂载的功能将docker实例的数据文件和相关日志文件也挂载出来,方便数据的持久化和服务日志的查看