原文转载自「刘悦的技术博客」https://v3u.cn/a_id_108

众所周知,一个大型的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在一起。

原文转载自「刘悦的技术博客」 https://v3u.cn/a_id_108

Docker容器保姆:在centos7.6上利用docker-compose统一管理容器和服务的更多相关文章

  1. Centos7.6上利用docker搭建Jenkins来自动化部署Django项目

    一般情况下,将一个项目部署到生产环境的流程如下: 需求分析-原型设计-开发代码-内网部署-提交测试-确认上线-备份数据-外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚. 整个过程相当复 ...

  2. 在阿里云Centos7.6上利用docker搭建Jenkins来自动化部署Django项目

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_84 一般情况下,将一个项目部署到生产环境的流程如下: 需求分析-原型设计-开发代码-内网部署-提交测试-确认上线-备份数据-外网更 ...

  3. 云服务器上利用Docker部署Django项目

    转载别人的,请看下面链接 云服务器上利用Docker部署Django项目

  4. 在CentOS7.5上安装Docker,在Docker中拉取CentOS7.5镜像并安装SSH服务

    # 安装docker yum install -y docker # 启动docker systemctl start docker # 加入开机启动 systemctl enable docker ...

  5. 在MacOS上利用docker构建buildroot

    之前有听说过docker,但是一直没有使用过.最近终于下定决定使用了一下docker,感觉docker用于跨操作系统的软件工具使用还是比较友好的. 适用人群 本文忽略的部分Linux软件包安装的过程, ...

  6. Docker 系列01: Centos7.3 上安装docker

    Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施.容器 ...

  7. Docker笔记4:在 CentOS 上安装 Docker

    Docker 是一个开源的应用容器引擎,主要有两个分支,一个是社区免费版(Docker CE),一个是企业版(Docker EE). 第1步:系统环境要求 Docker 支持的 CentOS 版本: ...

  8. 阿里云服务器CentOS7.3上通过Docker安装MySQL

    一.前言 我的服务器环境: CentOS7.3 Docker Portainer -> Docker可视化界面工具 二.拉取mysql镜像 这里我安装的是mysql5.7版本 docker pu ...

  9. 【docker】linux系统centOS 7上安装docker

    要求: 一个centOS 7系统  虚拟就上安装CentOS 7步骤 本文操作在本机上使用xshell连接虚拟机上的centOS 7进行操作 1.Docker 要求 CentOS 系统的内核版本高于 ...

随机推荐

  1. Hapoop安装学习(第一天)

    学习任务: 1.安装虚拟机 Linux使用版本为Centos7,共安装3台虚拟机,一台主机和两台从机.主机命名为master,两台从机分别命名为s1和s2. master分配磁盘空间30G,s1和s2 ...

  2. mysql查询关键字补充与多表查询

    目录 查询关键字补充 having过滤 distinct去重 order by排序 limit分页 regexp正则 多表查询 子查询 连表查询 查询关键字补充 having过滤 关键字having和 ...

  3. ML第3周学习小结

    本周收获 总结一下本周学习内容: 1.学习了<深入浅出Pandas>的第五章:Pandas高级操作的三个内容 复杂查询 数据类型转换 数据排序 我的博客链接: Pandas复杂查询.数据类 ...

  4. npm run serve修改为npm run dev

    找到package.json文件,打开文件找到  "serve": "vue-cli-service serve"  这一行,把前面的 serve 修改 dev ...

  5. 怎么理解相互独立事件?真的是没有任何关系的事件吗?《考研概率论学习之我见》 -by zobol

    1.从条件概率的定义来看独立事件的定义 2.从古典概率的定义来看独立事件的定义 3.P(A|B)和P(A)的关系是什么? 4.由P(AB)=P(A)P(B)推出"独立" 5.从韦恩 ...

  6. Kali MSF漏洞利用

    一.前言 漏洞利用是获得系统控制权限的重要途经.用户从目标系统中找到容易攻击的漏洞,然后利用该漏洞获取权限,从而实现对目标系统的控制. 二.Metasploitable Metasploitable是 ...

  7. RPA供应链管制单修改机器人

    背景:供应链环节中,研发物料时而因为市场缺货等原因无法采购,资材部需登入系统修改物料管制单. 操作流程:登录PDM系统中读取数据.登录ERP系统中更新数据. 人工操作:每日耗时3.5小时,出现一定比例 ...

  8. mysql InnoDB通过.frm和.ibd恢复表和数据

    ibdata1是一个用来构建innodb系统表空间的文件,这个文件包含了innodb表的元数据.撤销记录.修改buffer和双写buffer.如果file-per-table选项打开的话,该文件则不一 ...

  9. RPA应用场景-公积金贷款业务数据整合和报送

    场景概述 公积金贷款业务数据整合和报送 所涉系统名称 个贷系统.公积金管理系统 人工操作(时间/次) 0.5小时 所涉人工数量1000操作频率 每日 场景流程 1.机器人整理个人贷款信息.个人贷款账户 ...

  10. 深入解析kubernetes controller-runtime

    Overview controller-runtime 是 Kubernetes 社区提供可供快速搭建一套 实现了controller 功能的工具,无需自行实现Controller的功能了:在 Kub ...