当前位置: 首页 > news >正文

07-docker-compose容器编排

07-docker-compose容器编排

随着网站架构的升级,容器的使用越加的频繁,应用服务和容器之间的关系也越加的复杂

这就要就研发人员能够更好的方法去管理数量较多的容器服务,而不能手动去挨个管理

例如一个LNMP架构,就得部署web服务,后台程序,数据库,负载均衡等等都需要统一部署在容器里,那么这个时候就需要统一的容器编排工具docker-compose,通过单独的docker-compose.yaml模版文件作为一个项目定义一组相关联的应用容器

在这里插入图片描述

什么是docker-compose

docker-compose的定位就是运行多个docker容器应用

之前我们了解可以使用dockerfile模版文件定义一个单独的应用容器,然而,如LNMP这样的web项目,就涉及到服务之间的配合,如nginx,mysql,php,redis等

在这里插入图片描述

1.compose是用于定义和运行多个容器的docker内置工具
2.compose是定义yaml文件用来描述多个容器的关系
3.写好yaml后基于compose命令读取执行yaml内容

安装docker-compose

命令一般安装在/usr/loacl/bin/下面

1. yum安装,版本较低
yum install docker-compose2. 可以去官网找最新脚本
curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose添加执行权限
chmod +x /usr/local/bin/docker-compose测试版本
[root@docker-200 ~]#chmod +x /usr/local/bin/docker-compose 
[root@docker-200 ~]#
[root@docker-200 ~]#docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
[root@docker-200 ~]#

docker-compose命令管理

# 默认使用docker-compose.yml构建镜像
$ docker-compose build
$ docker-compose build --no-cache # 不带缓存的构建# 指定不同yml文件模板用于构建镜像
$ docker-compose build -f docker-compose1.yml# 列出Compose文件构建的镜像
$ docker-compose images                          # 启动所有编排容器服务
$ docker-compose up -d# 查看正在运行中的容器
$ docker-compose ps # 查看所有编排容器,包括已停止的容器
$ docker-compose ps -a# 进入指定容器执行命令
$ docker-compose exec nginx bash 
$ docker-compose exec web python manage.py migrate --noinput# 查看web容器的实时日志
$ docker-compose logs -f web# 停止所有up命令启动的容器
$ docker-compose down # 停止所有up命令启动的容器,并移除数据卷
$ docker-compose down -v# 重新启动停止服务的容器
$ docker-compose restart web# 暂停web容器
$ docker-compose pause web# 恢复web容器
$ docker-compose unpause web# 删除web容器,删除前必需停止stop web容器服务
$ docker-compose rm web  # 查看各个服务容器内运行的进程 
$ docker-compose top     # 合集命令
build
config -q
create
down
events
exec
help
images
kill
logs
pause
restart
rm
run
scale
start
stop
top
unpause
up

docker-compose语法

参考yaml模版

version: '版本号'
services:服务名1:images: 镜像名container_name: 容器名environment:- var1=value1- var2=value2volumes:- 存储驱动1:容器内数据目录- 宿主机目录:容器内数据目录ports:- 宿主机端口:容器端口networks:- 自定义网络名networks:default:external: truename: 自定义网络名

1.案例1:部署python应用

编写一个python web容器

redis数据库

构建镜像
构建docker-compose.yaml

手工部署

1.创建compose目录,管理配置文件
[root@docker-200 ~]#cd /www.yuchaoit.cn/
[root@docker-200 /www.yuchaoit.cn]#
[root@docker-200 /www.yuchaoit.cn]#mkdir compose_python_web
[root@docker-200 /www.yuchaoit.cn]#cd compose_python_web/
[root@docker-200 /www.yuchaoit.cn/compose_python_web]#2.flask代码,读写redis
这段代码的逻辑是,访问一次,redis的计数器就+1,查看2个容器的链接关系from flask import Flask
from redis import Redisapp = Flask(__name__)
redis = Redis(host='redis', port=6379)@app.route('/')
def hello():count = redis.incr('hits')return 'Welcome to www.yuchaoit.cn about docker-compose , this page has been visited {} times\n'.format(count)if __name__ == "__main__":app.run(host="0.0.0.0", debug=True)依赖文件
cat > requirements.txt <<'EOF'
flask
redis
EOF[root@docker-200 /www.yuchaoit.cn/compose_python_web]#ll
total 8
-rw-r--r-- 1 root root 356 Aug 28 03:56 app.py
-rw-r--r-- 1 root root  12 Aug 28 03:58 requirements.txt
[root@docker-200 /www.yuchaoit.cn/compose_python_web]#查找python镜像版本
[root@docker-200 /www.yuchaoit.cn/compose_python_web]#curl -s https://registry.hub.docker.com/v1/repositories/python/tags |jq3.写Dockerfile
FROM python:3.9.7
MAINTAINER www.yuchaoit.cn
COPY app.py /opt
COPY requirements.txt /opt
WORKDIR /opt
RUN pip3 install --upgrade pip -i https://pypi.douban.com/simple
RUN pip3 install -r requirements.txt -i https://pypi.douban.com/simple4.构建镜像
[root@docker-200 /www.yuchaoit.cn/compose_python_web]#
[root@docker-200 /www.yuchaoit.cn/compose_python_web]#docker build --no-cache -t python3_flask .5.获取redis镜像,测试
docker pull redis6.运行redis,flask两个容器,测试运行结果[root@docker-200 /www.yuchaoit.cn/compose_python_web]#docker run -d -p 6379:6379 --name to_flask_redis redis
27b920026b88bbdf741023d5695dae35003b79f703b9b41feae7847ac811f9537.运行flask,需要关联redis容器才可以
注意这里一个细节,flask代码里,链接redis,填入的是主机名 "redis"
因此要通过主机名,让2个容器识别docker run -d -p 5000:5000  --link <容器name or id>:alias   --name flask_with_redis python3_flask python3 app.pydocker run -d -p 5000:5000 --link  to_flask_redis:redis --name flask_with_redis python3_flask python3 app.py[root@docker-200 /www.yuchaoit.cn/compose_python_web]#
[root@docker-200 /www.yuchaoit.cn/compose_python_web]#docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                       NAMES
3631d00c841c   python3_flask   "python3 app.py"         2 seconds ago    Up 2 seconds    0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   flask_with_redis
27b920026b88   redis           "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   to_flask_redis
[root@docker-200 /www.yuchaoit.cn/compose_python_web]#

这里的重点是–link参数

升级为docker-compose

yaml文件如下

[root@docker-200 /www.yuchaoit.cn/compose_python_web]#cat docker-compose.yml 
flask_web:image: python3_flaskcommand: python app.pyports:- "5000:5000"links:- redis
redis:image: redis

小结

可见,为何容器化部署是天然敏捷的开发工具。

http://www.dtcms.com/a/471005.html

相关文章:

  • 网站密钥怎么做百度投诉中心在线申诉
  • 数据库、API和MCP等概念
  • 敬请期待打一生肖seo公司如何优化
  • 怎么做淘宝返利网站wordpress打印文章
  • 内蒙医院BA楼宇自控系统与IBMS集成系统深度解析
  • 站外营销有哪几种主流方式天津智能网站建设哪里有
  • seo网站设计电子商务网站总体规划的内容
  • 做签名的网站购物网站建设项目策划书
  • 盛盾科技网站建设网页设计如何把照片作为背景
  • 成都科技网站建设找本地环说wordpress配置邮箱
  • 寻找徐州网站开发行业网站联盟
  • 温州哪里做网站比较好江宁网站建设报价
  • 网站建设完成外网无法访问做兼职上什么网站
  • 青岛市网站建设公司移动wap网站
  • 兰州市城乡和住房建设局网站宜兴建设局官方网站
  • 娱乐网站设计与实现网络服务对人们生活的影响
  • 自助众筹网站建设分销系统多少钱
  • 网站的联系我们怎么做asp网站好还是php网站好
  • 义乌网站建设九中国外贸出口网站
  • 做企业网站服务商wordpress 手机浏览
  • 徐州市城乡和城乡建设厅网站西安网站建设聚星互联
  • 自己做的网站怎么植入erp做软件工资高还是网站
  • 潍坊建设网站公司衡水建设局网站首页
  • 免费行情软件网站大全网页版陕西建设网站
  • 做h5的网站有哪些网站系统开发毕业设计
  • 阿里云域名注册口令网站优化代码
  • 廊坊电子商务网站建设电子政务门户网站建设汇报
  • 网站建设保密协议书企业名录黄页大全
  • 小型网站建设教程重庆市建设工程信息官方网站
  • 自媒体网站源码模板dede广州最好的网站建设