现在我把这两个容器删掉(包括相应的镜像和网络都删掉吧),然后使用docker-compose来实现。
建立docker-compose.yml文件
注意,我还没写完。
这里我指定了版本为‘3’,当前也就是这个版本。
然后在services里,我定义了coreweb服务(ASP.NET Core Web应用),它的构建的上下文环境 context是.,也就是当前目录;使用的dockerfile是标准的Dockerfile;端口是映射到8080,内部端口是5000;使用的网络是aspcore-network。
最后边定义了网络,名为aspcore-network,类型是bridge桥接网络。
然后继续写:
这里又添加了postgres-server这个服务,它是直接使用的官方镜像postgres,网络还是同一个网络,但是这里设置了一个环境变量,是数据库的密码。
执行docker-compose build
定义好docker-compose.yml之后,就可以进行构建了,执行docker-compose build:
很快就完成了。
然后看一下镜像列表:
第一个就是我建立的coreweb,其实我们可以自定义它的名称。
而postgres这个镜像我早就下载下来了,所以它的创建时间比较早。
执行docker-compose up
docker-compose up:
这里出现了一些问题:这是我第一次运行该项目,运行项目的同时,代码里会做数据库的自动迁移,但是ASP.NET Core Web应用先跑起来了,它开始做迁移,然后发现数据库服务还没跑起来呢,所以ASP.NET Core项目就报错了,它的容器就停掉了。而过了一会postgres的服务才启动完成。。。
这也很好办,现在postgres的服务起来了,那么,我再手动启动一下ASP.NET Core Web的容器就可以了。docker-compose start coreweb:
然后访问:8080:
网站就可以正常访问了。
现在这种操作还有一点瑕疵,因为docker-compose up之后,终端里都是log,我们处在log模式下,无法做其它操作。需要再打开一个终端来执行其它命令:
执行docker-compose down
所以我想重新搞一下,先把这套东西拆了:docker-compose down:
试验其它命令
为了避免上述问题,这次我们使用daemon mode 守护进程模式,docker-compose up -d:
然后我们这次使用这个命令来看进程,docker-compose ps: