在centos7.6上利用docker-compose统一管理容器和服务

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 众所周知,一个大型的Docker容器组成的微服务应用中,容器的数量是非常巨大的,如果依赖传统的人工配置方式进行维护,对于开发和运维来说简直就是噩梦。docker-compose的出现正是为了解决这个问题。docker-compose是一个用于定义和运行多容器Docker应用的工具,只需要一个Compose的配置文件和一个简单的命令就可以创建并运行应用所需的所有容器。在配置文件中,所有容器通过services来定义,并使用docker-compose命令启动或停止容器以及所有依赖容器。

众所周知,一个大型的Docker容器组成的微服务应用中,容器的数量是非常巨大的,如果依赖传统的人工配置方式进行维护,对于开发和运维来说简直就是噩梦。docker-compose的出现正是为了解决这个问题。

docker-compose是一个用于定义和运行多容器Docker应用的工具,只需要一个Compose的配置文件和一个简单的命令就可以创建并运行应用所需的所有容器。在配置文件中,所有容器通过services来定义,并使用docker-compose命令启动或停止容器以及所有依赖容器。

如何安装请参照这篇文章:在Centos7.6上部署Docker环境以及安装docker-compose

我们的目标是:在docker容器内部创建一个基于tornado的web应用服务

需要注意一点,在 Docker 中有一个由官方提供的中央镜像仓库,不过,由于众所周知的原因,有时它除了慢的可怜以外,还经常莫名其妙的完全无法访问。

在 Linux 环境下,我们可以通过修改 /etc/docker/daemon.json ( 如果文件不存在,你可以直接创建它 ) 这个 Docker 服务的配置文件达到效果,从而将国外的源转向国内,使下载速度和效率提高。

vim /etc/docker/daemon.json

{
    "registry-mirrors": [
        "https://registry.docker-cn.com"
    ]
}

然后重启docker,令其生效:

sudo systemctl restart docker

首先需要一个文件夹作为项目文件夹:

mkdir composetest
cd composetest

在项目文件夹下创建一个app.py:

from  tornado.web import RequestHandler
import tornado.ioloop
import tornado.web



class IndexHandler(RequestHandler):
    def get(self):
        self.write('hello world')


def make_app():
    return tornado.web.Application(handlers=[
        (r'/', IndexHandler)
    ],debug=True)


if __name__ == '__main__':
    app = make_app()
    app.listen(8000)
    tornado.ioloop.IOLoop.current().start()

在项目文件夹下创建一个requirements.txt的文件,这是你的web项目依赖,这里我们只需要一个tornado

tornado==5.1.1

到此,我们已经完成了新建项目,编码,添加依赖等工作

下面我们创建一个Dockerfile文件用于构建Docker镜像,该镜像包含了运行该Web应用的所有依赖,包括Python运行环境。

在项目文件夹下创建一个Dockerfile文件

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

上面的命令的意思是:

使用python-3.4-alpine作为基础镜像
将当前目录添加到镜像中/code目录下
将/code设置为工作目录
安装Python依赖
设置默认执行命令

在项目文件夹下创建一个docker-compose.yml文件

version: '2.0'
services:
  web:
    build: .
    ports:
     - "8000:8000"
    volumes:
     - .:/code

该配置文件中包含一个services,即web服务。web会使用当前目录中的Dockerfile文件构建镜像,并将容器的8000端口暴露给主机,然后将项目文件夹挂载到容器中的/code目录下

至此,所有配置都已经弄好了,项目结构如下:

执行命令运行容器,则docker-compose将会根据docker-file所写的脚本一键构建web应用的镜像以及启动容器

sudo docker-compose up

此时,访问localhost:8000

说明我们构建的镜像已经运行起来,如此一来,我们只需要关注代码逻辑的编写,而不用考虑环境的搭建了,环境只需要依赖docker帮我们做就好了。

上面提到的Componse使用命令构建并启动容器,是以前台的方式启动的,如果希望以后台启动,可以添加参数-d,比如下面这样

sudo docker-compose up -d

而且可以查看目前正在运行的容器,有点类似docker-ps

docker-compose ps

如果使用sudo docker-compose up -d命令以后台方式启动,可以用docker-compose stop命令停止。docker-compose down 命令可以停止容器并将其删除。

有关Compose的更多命令,可以通过sudo docker-compose --help查看

可以发现,docker-compose将docker run命令整合到了一个docker-compose.yml配置文件中,对于大型Docker集群的管理是很方便的,例可以将多个service组合成更复杂的service组,为每个service指定不同的Dockerfile,然后把它们link在一起。

相关文章
|
3天前
|
Prometheus 监控 Cloud Native
构建高效稳定的Docker容器监控体系
【5月更文挑战第20天】 在微服务架构日益普及的今天,Docker作为其重要的实现技术之一,承载着大量应用的运行。然而,随之而来的是对于容器健康状态、资源使用情况以及性能指标的监控需求急剧增加。本文旨在探讨构建一个高效且稳定的Docker容器监控体系,不仅涵盖了监控工具的选择与配置,还详细阐述了监控数据的分析与处理流程。通过精心设计的监控策略和实时响应机制,我们能够确保系统的稳定性,并及时发现及处理潜在的问题。
|
3天前
|
存储 弹性计算 Kubernetes
【阿里云云原生专栏】深入解析阿里云Kubernetes服务ACK:企业级容器编排实战
【5月更文挑战第20天】阿里云ACK是高性能的Kubernetes服务,基于开源Kubernetes并融合VPC、SLB等云资源。它提供强大的集群管理、无缝兼容Kubernetes API、弹性伸缩、安全隔离及监控日志功能。用户可通过控制台或kubectl轻松创建和部署应用,如Nginx。此外,ACK支持自动扩缩容、服务发现、负载均衡和持久化存储。多重安全保障和集成监控使其成为企业云原生环境的理想选择。
137 3
|
6天前
|
Shell Linux 应用服务中间件
centos系统内容器部署服务访问不到是因为run后面加了bash
centos系统内容器部署服务访问不到是因为run后面加了bash
|
6天前
|
Java 虚拟化 Docker
Docker简介及用途,为什么要使用Docker?Docker容器和虚拟机的区别
Docker简介及用途,为什么要使用Docker?Docker容器和虚拟机的区别
|
6天前
|
存储 Linux Docker
CentOS7修改Docker容器和镜像默认存储位置
CentOS7修改Docker容器和镜像默认存储位置
|
6天前
|
Linux Docker 容器
更改docker容器中的时间而不影响宿主机
更改docker容器中的时间而不影响宿主机
|
6天前
|
Ubuntu Linux Go
docker容器启动报错
docker容器启动报错解决
|
8天前
|
Ubuntu Docker 容器
docker容器保存和导入
docker容器保存和导入
52 0
|
8天前
|
Ubuntu Docker 容器
清理docker容器
清理docker容器
22 0
|
8天前
|
前端开发 jenkins 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
31 1