复制一份项目里的 docker-compose.yml 文件。把这个文件重命名成 production.yml。
在生产环境上运行的时候可以使用这个 Docker Compose 文件,这种文件里面定义的是运行应用需要的一些服务。文件里,services 下面的东西就是定义的服务。
这里定义了一个 mysql 服务,还有一个 myadmin 服务。 mysql 服务是应用需要的数据库服务,myadmin 服务提供了一个 web 界面可以管理应用的数据库。
下面我们在这个服务里再添加一个新的名字,名字是 nest,这个服务需要的镜像可以再去制作一个,用 build 命令,根据当前目录下的 Dockerfile 制作这个服务需要的镜像。
制作好了这个镜像就去创建一个服务,就是基于这个镜像创建一个可以运行的容器。用 ports 设置一下发布的端口号,本机上是 3000,对应的是容器里的 3000 端口。因为在这个容器里运行的应用,用的就是 3000 这个端口提供服务。
再用 volumes 设置一个数据卷,本机上的位置是 ./uploads,对应的是容器里的 /usr/src/app 下面的 uploads 。上传的文件会存储在这个目录里面。
docker-compose build
基于一个 Dockerfile 制作镜像,可以使用 docker build 或者 docker-compose build 命令。 在终端,项目所在目录的下面,可以制作一个镜像。
先确定一下 Docker 桌面版已经运行了。
然后在终端,查看一下系统上的镜像, docker images ,显示在我的电脑上现在有两个镜像,一个是 phpmyadmin,还有一个 mysql 镜像。
执行一下 docker-compose 用一个 -f 选项,设置一下要使用的 Docker Compose 文件是哪个,因为现在我们项目里有两个 Docker Compose 文件,这里要用的是 production.yml 。
执行一下 docker-compose build 命令,要编译的是 nest ,这个 nest 是在 production.yml 这个文件里定义的一个服务的名字。
命令会根据服务里指定的 Dockerfile 文件里的描述,去制作一个镜像。上面会显示制作这个镜像需要几个步骤,当前进行的是哪一步。
现在正在做的是去下载制作的镜像需要的基础镜像。
然后设置了一下工作目录,复制项目文件到镜像里面, 又执行了一些 npm 相关的命令。
制作完成以后,可以再查看一下系统里的镜像,你会发现,现在系统里多了一个 wstorenest_nest 的镜像。这个镜像就是刚才我们使用 build 命令制作的。