第一篇:把代码链接到容器 html
第二篇:定制Docker镜像node
第三篇:发布镜像web
第四篇:容器间的链接docker
Compose是一个用来定义和运行多容器Docker应用的工具。使用Compose的时候,你可使用一个YAML文件来配置你应用的服务。而后根据配置,使用一个命令便可建立并运行全部的服务。数据库
使用Compose的时候一般分三步:缓存
Docker Compose能够作不少事情,可是若是只考虑在开发环境里,它能够作下面这些事情:服务器
一般来讲,若是你的应用稍微有点规模,例如你的Web应用须要使用Web服务器,缓存服务器,数据库服务器。。。若是你手动管理这样的docker应用,就很繁琐,也很容易出错。网络
而若是使用Docker Compose的话,它能够定义一个docker-compose.yml文件,在这个文件里,你能够定义全部的这些服务,以及它们之间的关系。工具
docker-compose.yml文件就是用来配置服务的,这里有一个官网给出的例子:post
这个文件写好以后,就能够开始Docker Compose的构建过程了。
这个构建的过程实际上会生成镜像,而后使用这些镜像就能够建立容器了。
而后再使用一个简单的命令,就可让这些服务启动并运行了。
下面简单讲一下这个docker-compose.yml文件:
第一行是版本。
下面services,就是服务。
在services里,能够定义当构建docker-compose.yml文件时想要运行的服务,而后把这些镜像以容器运行。这里能够定义ASP.NET Core,node,数据库,缓存等等。
看一下服务里的东西:
也能够在里面定义networks等等。
此外还有这些经常使用形式的命令:
这个命令会构建/从新构建定义在docker-compose.yml文件里的全部的服务,使用这一个命令就会一次性把全部服务须要的镜像都建立好。
此外还能够构建单独的服务,例如: docker-compose build mongo。有时候你不想把全部的东西都从新构建一遍,你只想构建其中的一个服务。
一切都构建好以后,就能够启动并运行了。这时就会使用docker-compose up这个命令。
它会自动建立容器,并运行这些容器。
该命令还能够加一些参数,例如 docker-compose up --no-deps node,它表示从新构建node镜像,中止、销毁从新建立node,但不从新建立node所依赖的服务。
该命令会中止全部的容器,而后删除它们。
若是只想中止容器,并不删除,那么应该使用docker-compose stop。
此外若是你还想同时删除全部的镜像和volumes,你能够:
docker-compose down --rmi all --volumes。
前面文章里,我经过手动输入命令实现了一套ASP.NET Core 和 PostgreSQL的docker 应用。尽管该应用很简单,只有两部分组成,但当时仍是输入了很多命令,也遇到了几回错误,相对仍是繁琐一些。
如今我把这两个容器删掉(包括相应的镜像和网络都删掉吧),而后使用docker-compose来实现。
注意,我还没写完。
这里我指定了版本为‘3’,当前也就是这个版本。
而后在services里,我定义了coreweb服务(ASP.NET Core Web应用),它的构建的上下文环境 context是.,也就是当前目录;使用的dockerfile是标准的Dockerfile;端口是映射到8080,内部端口是5000;使用的网络是aspcore-network。
最后边定义了网络,名为aspcore-network,类型是bridge桥接网络。
而后继续写:
这里又添加了postgres-server这个服务,它是直接使用的官方镜像postgres,网络仍是同一个网络,可是这里设置了一个环境变量,是数据库的密码。
定义好docker-compose.yml以后,就能够进行构建了,执行docker-compose build:
很快就完成了。
而后看一下镜像列表:
第一个就是我创建的coreweb,其实咱们能够自定义它的名称。
而postgres这个镜像我早就下载下来了,因此它的建立时间比较早。
docker-compose up:
这里出现了一些问题:这是我第一次运行该项目,运行项目的同时,代码里会作数据库的自动迁移,可是ASP.NET Core Web应用先跑起来了,它开始作迁移,而后发现数据库服务还没跑起来呢,因此ASP.NET Core项目就报错了,它的容器就停掉了。而过了一会postgres的服务才启动完成。。。
这也很好办,如今postgres的服务起来了,那么,我再手动启动一下ASP.NET Core Web的容器就能够了。docker-compose start coreweb:
而后访问http://localhost:8080:
网站就能够正常访问了。
如今这种操做还有一点瑕疵,由于docker-compose up以后,终端里都是log,咱们处在log模式下,没法作其它操做。须要再打开一个终端来执行其它命令:
因此我想从新搞一下,先把这套东西拆了:docker-compose down:
为了不上述问题,此次咱们使用daemon mode 守护进程模式,docker-compose up -d:
而后咱们此次使用这个命令来看进程,docker-compose ps:
能够看到这两个容器,而后Web应用又发生前面的问题了,我在单独跑一下它:
此次就OK了。
再次访问网站:
仍是能够正常运行的。
下面看一下log,docker-compose logs:
最后销毁这套东西,此次我把相应的镜像也删掉 docker-compose down --rmi all:
能删的都删除了,但这里postgres这个镜像没法删除是由于我还有其它容器使用该镜像。