In last week’s post I showed how you can find the IP address of a running MySql Docker container and configure the Spring Data JPA connection for it. 我提到实际上有更好的方法,所以我想介绍一种更好的方法: 码头工人组成.
What is docker-compose?
Compose是用于定义和运行多容器Docker应用程序的工具.
~ from the docker-compose site
本质上,撰写是完成这项工作的正确工具。 我们的目标是在Docker容器中运行一个Spring Boot应用程序,在Docker容器中运行一个MySql实例,以及它们之间的连接。 Docker-compose将允许我们声明性地定义此设置,并将为我们自动化。 让我们开始吧。
Installing docker-compose
首先,您当然需要安装docker-compose. It’s pretty easy and you’ll find the instructions in the installation section of the documentation. 去检查一下,然后回到这里. 如果您可以运行“ docker-compose –version”,则可以继续.
Writing a docker-compose file
好的,接下来您需要的是“撰写文件”。 这是一个名为“ docker-compose.yml”的YAML文件,已将其放置在应用程序的根目录中。 它由一系列条目组成,这些条目定义了您的构图中的每个Docker容器。 我们需要一个Spring Boot应用程序docker容器和一个MySql docker容器。 因此,我们将有两个条目。
当然,这假设您已经为Spring Boot应用程序编写了Dockerfile。 在线上有很多资源可以做到这一点。
If you followed along with last week’s post, you also have a MySql Docker container already, that your Spring Boot app can connect to. 因此,请立即离开此页面,并确保所有内容都准备就绪. 基本上,您应该能够运行诸如“ docker start myapp-mysql”之类的东西来启动MySql容器,以及诸如“ docker run -p 8080”之类的东西。:8080 –name myapp-main -t {container id}'以使用Spring Boot应用程序运行容器.
现在只需在docker-compose.yml中声明两件事:
版本:“ 3”
服务:
myapp-mysql:
图片:mysql:8.0
环境:
-MYSQL_ROOT_PASSWORD =根
-MYSQL_DATABASE = MyAppDb
-MYSQL_USER = myapp用户
-MYSQL_PASSWORD =密码
端口:
-3306:3306
myapp-main:
映像:运行docker映像时出现的myapp映像名称
重新启动:失败
取决于:
-myapp-mysql
端口:
-8080:8080
环境:
-DATABASE_HOST = myapp-mysql
-DATABASE_USER = myapp用户
-DATABASE_PASSWORD =密码
-DATABASE_NAME = MyAppDb
-DATABASE_PORT = 3306
docker-compose.yml
Networking the containers together
如今,docker-compose的默认行为的一部分是为容器自动运行创建一个网络,并为每个容器提供与其容器名称相同的主机名。
默认情况下,Compose为您的应用设置单个网络. 服务的每个容器都加入默认网络,并且都可以被该网络上的其他容器访问,并且可以在与容器名称相同的主机名下被发现.
https://docs.docker.com/compose/networking/
这意味着您可以转到Spring Boot应用程序中的application.properties文件,并将连接从IP地址更改为(使用此示例)“ myapp-mysql”,并更改任何其他配置值以匹配docker- compose.yml。
spring.datasource.url=jdbc:mysql://myapp-mysql:3306/MyAppDb?useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=myapp-user
spring.datasource.password=password
application.properties
别忘了,进行此更改后,您需要为Spring Boot应用程序重建Docker容器(可能使用“ mvn软件包dockerfile:build”)。
Bring the composition up
现在,您只需运行“ docker-compose up”,docker-compose将完成两个容器的工作,并为它们提供docker-compose.yml中包含的配置。 这很容易!
然后,您应该能够通过其发布的端口以正常方式与您的应用程序进行交互。 当然,您还可以在运行时使用所有常用的Docker命令:“ docker container ls”,“ docker inspect”等。
当您准备再次将其关闭时,只需运行“ docker-compose down”。
恭喜你! 您现在拥有docker-compose技能! 🙌