在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在一起。

相关文章
|
21天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
173 77
|
2天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
63 35
|
29天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
1天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
13天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
38 3
实战~如何组织一个多容器项目docker-compose
|
7天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
30 4
|
22天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
75 3
|
29天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
67 3
|
29天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
36 2
|
2月前
|
Linux Docker 容器
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
本篇博客重在讲解Centos安装docker,经博主多次在不同服务器上测试,极其的稳定,尤其是阿里的服务器,一路复制命令畅通无阻。
2353 4
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!