服务需要的镜像准备好以后就可以运行定义的服务了。 在项目所在目录的下面,执行一下 docker-compose -f 使用 production.yml 文件,执行一下 up -d,启动在 production.yml 文件里定义的服务。
完成以后,可以查看一下服务的运行状态, docker-compose -f production.yml ps ,显示定义的这几个服务都在运行中。
过一会儿可以再试一下,查看应用的状态,你会发现这个 nest 服务的运行状态是 Exit 。
查看一下这个服务里面输出的日志,用的是 logs,后面加上服务的名字,比如 nest。
服务退出的原因是,在服务里运行的应用不能够连接到它的数据库系统。
回到项目,在项目里给应用准备的数据库服务,它的名字是 mysql, 使用 Docker Compose 组织的这些服务,启动的同时会创建一个内部网络,这些服务之间可以通过这个内部网络使用各自的名字进行沟通。比如在 nest 服务里要使用 mysql 服务里提供的数据库服务,可以通过 mysql 这个名字。
打开 production.env 这个环境变量文件,这里要修改一下配置的 TypeOrm 用的数据库的主机,现在是 localhost,这里要把它换成 mysql,这个 mysql 就是在 Docker Compose 文件里定义的 mysql 这个数据库服务的名字。
这里这个服务的端口号需要再修改一下,换成默认的 3306,因为 mysql 数据库系统默认的端口号是 3306 。
下面需要重新再制作一下这个镜像了。
在终端,执行 docker-comopse -f production.yml build nest 。 这样制作好的镜像就会使用我们修改之后的那个环境变量文件。
完成以后,重新基于这个镜像创建一个运行的容器,运行的是 docker-compose 的 up -d 命令。
你会发现,这里会显示重新创建了这个 nest 容器。
查看一下服务的运行状态,用的是 ps 这个命令。显示所有服务都是运行的状态,过一会儿可以再确定一下运行的状态。
可以再查看一下 nest 这个服务的日志, logs nest, 日志里没有报错,应用在这个容器里运行正常。
最后可以使用 Http 客户端, 请求一下应用的接口再确定一下,这里我们直接使用 curl 这个命令,应用的地址是 localhost:3000 ,返回了一个 Hello World!
现在我们的应用是在一个 Docker 容器里运行的。