一、编写docker-compose.yml
文件
要编写一个docker-compose.yml
文件来部署两个Tomcat容器(tomcat-01和tomcat-02)、一个MySQL容器和一个Redis容器,并确保Tomcat容器能够链接到MySQL和Redis容器,你需要遵循以下步骤。
首先,你需要确保你的Docker环境中已经安装了所有必要的镜像,或者Docker Compose文件应该包含从Docker Hub或其他源拉取这些镜像的指令。
以下是一个简化的docker-compose.yml
文件,它定义了两个Tomcat容器(tomcat-01和tomcat-02)、一个MySQL容器和一个Redis容器:
cd ~
mkdir docker-compose
cd docker-compose
vim docker-compose.yml
version: '3.2'
services:
mysql:
image: mysql:5.7
container_name: mysql-container
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: tomcatdb
MYSQL_USER: tomcatuser
MYSQL_PASSWORD: tomcatpassword
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:latest
container_name: redis-container
restart: always
ports:
- "6379:6379"
volumes:
- redis_data:/data
tomcat-01:
image: tomcat:8.5-jre8
container_name: tomcat-01-container
restart: always
depends_on:
- mysql
- redis
ports:
- "8080:8080"
environment:
- CATALINA_OPTS=-Ddb.host=mysql -Ddb.port=3306 -Dcache.host=redis -Dcache.port=6379
volumes:
- ./tomcat-01/webapps:/usr/local/tomcat/webapps
tomcat-02:
image: tomcat:8.5-jre8
container_name: tomcat-02-container
restart: always
depends_on:
- mysql
- redis
ports:
- "8081:8080"
environment:
- CATALINA_OPTS=-Ddb.host=mysql -Ddb.port=3306 -Dcache.host=redis -Dcache.port=6379
volumes:
- ./tomcat-02/webapps:/usr/local/tomcat/webapps
volumes:
mysql_data:
redis_data:
注意:
- 此处使用了官方的
mysql:5.7
、redis:latest
和tomcat:8.5-jre8
镜像。你可以根据需要更改这些值。 CATALINA_OPTS
是一个示例环境变量,用于传递数据库和缓存服务器的信息给Tomcat。但Tomcat默认不会使用这些环境变量,需要根据自己的应用配置(例如通过context.xml
、server.xml
或应用本身的配置)来正确设置这些值。- 假设本地的Tomcat应用已经配置好了使用MySQL和Redis。可能需要根据自己的应用需求来修改这个配置。
- 将MySQL和Redis的默认端口映射到了主机上的相应端口,以便可以从主机上直接访问它们。同样,也将Tomcat的默认端口映射到了不同的主机端口,以便两个Tomcat实例可以同时运行。
- 创建了数据卷
mysql_data
和redis_data
用于持久化MySQL和Redis的数据。
二、为了执行这个docker-compose
文件,需要按照以下步骤操作:
在我们创建的docker-compose目录下,执行下面命令
docker-compose up -d
这个命令会读取docker-compose.yml
文件,并启动其中定义的所有服务。-d
标志表示在后台运行这些服务(即守护进程模式)。
三、验证服务
要查看按照docker-compose.yml
文件执行出来的Docker容器和服务,你可以使用以下步骤:
-
检查容器状态:
使用docker-compose ps
命令来查看当前正在运行的容器及其状态。这个命令会列出所有在docker-compose.yml
文件中定义的服务,以及它们的状态(如Up、Down、Restarting等)。docker-compose ps
输出可能类似于:
Name Command State Ports
---------------------------------------------------------------------------------------
mysql-container docker-entrypoint.sh ... Up 3306/tcp
redis-container docker-entrypoint.sh ... Up 6379/tcp
tomcat-01-container catalina.sh run Up 0.0.0.0:8080->8080/tcp
tomcat-02-container catalina.sh run Up 0.0.0.0:8081->8080/tcp
-
查看日志:
你可以使用docker-compose logs
命令来查看服务容器的日志输出。这个命令会显示所有服务的日志,或者你可以指定一个服务来查看其日志。查看所有服务的日志:
docker-compose logs
只查看
tomcat-01
服务的日志:bash复制代码
docker-compose logs tomcat-01
-
检查端口映射:
你可以使用docker ps
命令来查看Docker容器及其端口映射。这将显示所有正在运行的容器,包括由docker-compose
启动的容器docker ps
在输出中,你会看到类似这样的端口映射(Ports列):
PORTS
0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
这表示主机的8080端口被映射到了容器的8080端口。
-
访问服务:
如果服务配置了端口映射(如Tomcat的8080端口),你可以通过浏览器或其他工具访问这些服务。例如,对于Tomcat服务,你可以在浏览器中访问http://localhost:8080/
(或http://<你的服务器IP>:8080/
)来查看Tomcat的默认页面。 -
检查数据卷:
如果你使用了数据卷(如mysql_data
和redis_data
),你可以使用docker volume ls
命令来查看所有Docker数据卷。然后,你可以使用docker volume inspect <volume_name>
来查看特定数据卷的详细信息。docker volume ls
docker volume inspect mysql_data
通过这些步骤,能够验证docker-compose.yml
文件是否正确执行,并且服务是否按预期运行。