每隔几年,软件开发行业就会发生一次范式转换。这些现象之一是对微服务概念的日益增长的兴趣。尽管微服务不是最新技术,但直到最近才真正普及。如今,大型的整体服务已由独立的自治微服务取代。微服务可以被认为是服务于一个特定目的的应用程序。例如,它可以是关系DBMS,Express应用程序,Solr服务。
如今,很难想象没有使用微服务就可以开发新的软件系统。而这种情况又将我们引向了Docker平台。
码头工人
在微服务的开发和部署中,Docker
平台已成为几乎行业标准。在该项目的网站上,您可以找到Docker是唯一的独立容器化平台,该平台使组织可以轻松地创建任何应用程序,以及在从混合云到边界系统的任何环境中分发和运行它们。Docker撰写
Docker Compose
技术旨在配置多容器应用程序。Docker Compose项目可以包含该项目创建者所需的尽可能多的Docker容器。在使用Docker Compose时,YAML文件用于配置应用程序服务并组织它们之间的交互。因此,Docker Compose是用于描述和运行Docker多容器应用程序的工具。主机系统上运行的两个容器GNU Make
程序make
本质上是一种用于从源代码自动组装程序和库的工具。通常,我们可以说它make
适用于任何过程,包括执行任意命令以将某些源材料转换为某种结果形式,达到某种目标的过程。在我们的案例中,团队docker-compose
将转换为抽象目标(Phony目标)。为了告诉程序make
我们想要什么,我们需要一个file Makefile
。我们Makefile
将包含通常的命令docker
和docker-compose
旨在解决许多问题的解决方案。也就是说,我们正在谈论组装容器,启动,停止,重新启动容器,组织用户登录到容器,使用容器日志以及解决其他类似问题。Docker Compose的典型用法
想象一个具有以下组件的常规Web应用程序:- TimescaleDB数据库(Postgres)。
- Express.js应用程序。
- Ping(只是一个没有任何特殊作用的容器)。
该应用程序将需要3个Docker容器和一个docker-compose
包含用于管理这些容器的说明的文件。每个容器将具有不同的交互点。例如,timescale
您可以像处理数据库一样使用容器。即,它允许您执行以下操作:- 登录到Postgres Shell。
- 导入和导出表。
- 创建一个
pg_dump
表或数据库。
Express.js应用程序的容器expressjs
可能具有以下功能:- 系统日志中新数据的输出。
- 输入外壳程序以执行某些命令。
容器互动
在使用Docker Compose配置了容器之间的连接之后,是时候建立与这些容器的交互了。作为Docker Compose系统的一部分,有一个命令docker-compose
支持一个选项-f
,该选项允许您将文件传输到系统docker-compose.yml
。使用此选项的功能,您可以将与系统的交互仅限于文件中提到的那些容器docker-compose.yml
。看一下使用命令时容器交互的外观docker-compose
。如果我们想象我们需要输入shell psql
,那么相应的命令可能如下所示:docker-compose -f docker-compose.yml exec timescale psql -Upostgres
没有docker-compose
使用而是使用的相同命令docker
可能如下所示:docker exec -it edp_timescale_1 psql -Upostgres
请注意,在这种情况下,最好不要使用command docker
,而要使用command docker-compose
,因为这样就不必记住容器的名称了。以上两个命令都不是那么复杂。但是,如果我们使用“包装器”的形式Makefile
可以为我们提供简单命令形式的界面并自己调用如此长的命令,则可以实现以下相同的结果:make db-shell
显然,使用Makefile
大大简化了容器的工作!工作实例
根据以上项目图,创建以下文件docker-compose.yml
:version: '3.3'
services:
api:
build: .
image: mywebimage:0.0.1
ports:
- 8080:8080
volumes:
- /app/node_modules/
depends_on:
- timescale
command: npm run dev
networks:
- webappnetwork
timescale:
image: timescale/timescaledb-postgis:latest-pg11
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
volumes:
- ./create_schema.sql:/docker-entrypoint-initdb.d/create_schema.sql
networks:
- webappnetwork
ping:
image: willfarrell/ping
environment:
HOSTNAME: "localhost"
TIMEOUT: 300
networks:
webappnetwork:
driver: bridge
要管理Docker Compose配置并与其描述的容器进行交互,请创建以下文件Makefile
:THIS_FILE := $(lastword $(MAKEFILE_LIST))
.PHONY: help build up start down destroy stop restart logs logs-api ps login-timescale login-api db-shell
help:
make -pRrq -f $(THIS_FILE) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
build:
docker-compose -f docker-compose.yml build $(c)
up:
docker-compose -f docker-compose.yml up -d $(c)
start:
docker-compose -f docker-compose.yml start $(c)
down:
docker-compose -f docker-compose.yml down $(c)
destroy:
docker-compose -f docker-compose.yml down -v $(c)
stop:
docker-compose -f docker-compose.yml stop $(c)
restart:
docker-compose -f docker-compose.yml stop $(c)
docker-compose -f docker-compose.yml up -d $(c)
logs:
docker-compose -f docker-compose.yml logs --tail=100 -f $(c)
logs-api:
docker-compose -f docker-compose.yml logs --tail=100 -f api
ps:
docker-compose -f docker-compose.yml ps
login-timescale:
docker-compose -f docker-compose.yml exec timescale /bin/bash
login-api:
docker-compose -f docker-compose.yml exec api /bin/bash
db-shell:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
此处描述的大多数命令都适用于所有容器,但是使用该选项c=
可以将命令的范围限制为一个容器。一旦Makefile
准备好了,你可以使用它像这样:make help
-发出可用于的所有命令的列表make
。
可用命令帮助make build
-组装来自的图像Dockerfile
。在我们的示例中,我们使用了现有的图像timescale
和ping
。但是api
我们想在本地收集图像。这正是执行此命令后将要执行的操作。
Docker容器组装make start
-启动所有容器。要仅启动一个容器,可以使用form的命令make start c=timescale
。
启动时间表容器启动ping容器make login-timescale
-进入容器的bash会话timescale
。
在时标容器中运行bashmake db-shell
-登录psql
到容器timescale
以执行对数据库的SQL查询。
在timescaledb容器中运行psql停止时间刻度容器make down
-停止并取出容器。要删除特定的容器,可以将此命令与指定的容器一起使用。例如- make down c=timescale
或make down c=api
。
停止并删除所有容器摘要
尽管Docker Compose系统为我们提供了广泛的用于管理容器的命令集,但有时这些命令会变长,因此可能很难记住。使用方法论Makefile
帮助我们与文件中的容器建立了快速便捷的交互docker-compose.yml
。即,我们正在谈论以下内容:- ,
docker-compose.yml
, . - , ,
make help
. - , . ,
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
make db-shell
. Makefile
, , . , .Makefile
, .
PS在我们的市场上有一个Docker映像,只需单击一下即可安装。您可以在VPS上检查容器的操作。所有新客户均可免费享受3天的测试。亲爱的读者们!您如何使用Docker Compose自动化工作?