Docker-compose的存在是为了让你不得不像使用docker-cli那样编写大量的命令。
Docker-compose还使同时启动多个容器变得容易,并通过某种形式的网络自动将它们连接在一起。
docker-compose的目的是发挥docker cli的功能,但可以更快地发出多个命令。
要使用docker-compose,您需要将之前运行的命令编码到docker-compose中。yml文件。
你不只是复制粘贴到yaml文件中,这里有一个特殊的语法。
一旦创建,你必须将它提供给docker-compose cli,它将由cli解析文件并使用我们指定的正确配置创建所有不同的容器。
你会有独立的容器,比如说,一个是redis-server,第二个是node-app,你想用Dockerfile在当前目录中创建它。
此外,在创建容器之后,您将从容器映射一些端口到本地机器,以访问其中运行的所有内容。
对于你的码头式写作。Yml文件,你会想这样开始第一行:
version: '3'
这告诉Docker你想要使用Docker -compose的版本。在这之后,你必须加上:
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
请注意压痕,这很重要。另外,请注意,对于一个服务,我抓取了一个图像,但对于另一个服务,我告诉docker-compose查看当前目录,以构建将用于第二个容器的图像。
然后,您需要指定希望在此容器上打开的所有不同端口。
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
ports:
-
请注意,yaml文件中的破折号是我们指定数组的方式。在这个例子中,我将本地机器上的8081映射到容器上的8081,如下所示:
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
ports:
- "8081:8081"
所以第一个端口是你的本地机器,另一个是容器上的端口,你也可以区分这两个端口,以避免像这样混淆:
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
ports:
- "4001:8081"
通过开发docker-compose。像这样的Yml文件,它会在本质上相同的网络上创建这些容器,它们可以自由访问彼此,以任何他们喜欢的方式进行通信,交换尽可能多的信息。
当使用docker-compose创建这两个容器时,我们不需要任何端口声明。
现在在我的例子中,我们需要在Nodejs应用程序中做一些代码配置,看起来像这样:
const express = require('express');
const redis = require('redis');
const app = express();
const client = redis.createClient({
host: 'redis-server'
});
我使用上面的示例是为了让您意识到,除了docker-compose之外,可能还需要进行一些特定的配置。Yml文件,可能是特定于您的项目。
现在,如果你发现自己在使用一个Nodejs应用程序和redis,你想确保你知道Nodejs使用的默认端口,所以我将添加这个:
const express = require('express');
const redis = require('redis');
const app = express();
const client = redis.createClient({
host: 'redis-server',
port: 6379
});
Docker会看到Node应用正在寻找redis-server并将连接重定向到这个正在运行的容器。
在整个过程中,Dockerfile只包含以下内容:
FROM node:alpine
WORKDIR '/app'
COPY /package.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
因此,在你必须运行docker运行myimage来创建文件中所有容器或服务的实例之前,你可以运行docker-compose up,你不必指定一个映像,因为docker将在当前工作目录中查找docker-compose。Yml文件里面。
docker-compose之前。嗯,我们不得不处理docker构建的两个独立命令。docker run myimage,但在docker-compose世界里,如果你想重建你的映像,你写docker-compose up -build。这告诉Docker再次启动容器,但重新构建容器以获得最新的更改。
因此,docker-compose使处理多个容器变得更容易。下次你需要在后台启动这组容器时,你可以执行docker-compose up -d;为了阻止他们,你可以做docker-compose down。