docker compose

定义并运行多个容器
YAMLfile配置文件; 命令有哪些?;所有环境都可以使用Compose

原先:Dockerfile build run ,手动操作单个容器;微服务100个;
现在:DockerCompose来轻松高效地管理容器,定义运行多个容器。

三步骤:

  1. Dockerfile: 保证项目在任何地方可以运行
  2. docker-compose.yml 如何写;定义什么是服务
  3. docker compose up 启动项目(类似于docker run)
    总结:批量容器编排

理解

Compose是docker官方开源项目,需要安装
Dockerfile 让程序在任何地方运行。web服务,redis,mysql,nginx…多个容器

compose

version: "3.8"
services:web:build: .ports:- "5000:5000"volumes:- .:/code- logvolume01:/var/loglinks:- redisredis:image: redis
volumes:  #挂载 持久化的logvolume01: {}#--links标签,先启动redis,再启动web应用
就好像一个脚本
#文件没写错前提下,100个服务可以一键上线

重要概念:

  • 服务service:容器,应用(web,redis,mysql)
  • 项目project:一组关联的容器–>形成一个业务单元;一个商城有100个微服务,100个微服务跑起来就是一个项目

安装

#下载
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#权限
chmod +x /usr/local/bin/docker-compose[root@ bin]# docker-compose version
docker-compose version 1.27.4, build 40524192
docker-py version: 4.3.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

测试

第一步:安装

定义应用依赖:

#创建文件夹
[root@ bin]# cd /home
[root@ home]# mkdir composetest
[root@ home]# cd composetest/
#创建py文件
[root@ composetest]# vim app.py
import timeimport redis
from flask import Flaskapp = Flask(__name__)
#redis,域名访问,同一个网络下,直接通过域名(服务名)访问
cache = redis.Redis(host='redis', port=6379)def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)@app.route('/')
def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.\n'.format(count)
#使用6379端口作为redis(容器名)容器在应用所在网络的默认端口#依赖
[root@ composetest]# vim requirements.txt
flask
redis

第二步:创建dockerfile文件编写Compose文件

[root@ composetest]# vim Dockerfile
FROM python:3.7-alpine  #基本环境包
WORKDIR /code   #工作目录
ENV FLASK_APP=app.py   #环境
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers  #运行
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"][root@ composetest]# vim docker-compose.yml
version: "3.8"
services:web:build: .    #build把dockerfile变成镜像ports:- "5000:5000"volumes:- .:/code #挂载持久化     redis:image: "redis:alpine"     #使用dockerhub官方#原先是docker run ...;docker run ...[root@ composetest]# ls
app.py  docker-compose.yml  Dockerfile  requirements.txt

第三步:用Compose服务构建并允许app

#当前目录下 /home/dockercomposetest
docker-compose up#故障排查
ERROR: Service 'web' failed to build : The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 2#分析:故障卡在了执行dockerfile的第七步
#查看dockerfile第七步做了什么
[root@ home]# cat /home/composetest/Dockerfile |grep pip
RUN pip install -r requirements.txt
[root@ home]# cat /home/composetest/requirements.txt
flask
redis
#错误状态码2代表的意思:No such file or directory
#1.测试
free 内存正常
#2.执行报错命令
[root@ composetest]# /bin/sh -c pip install -r requirements.txt
install: pip: command not found
#3.安装pip
[root@ composetest]# yum install python-pip
#4.手动安装flask
[root@ composetest]# pip install flask
...
You are using pip version 8.1.2, however version 20.2.4 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[root@ composetest]# pip install --upgrade pip
Successfully installed pip-20.2.4
[root@ composetest]# pip install redis#5.重新测试构建compose
[root@ composetest]# docker-compose up
...
web_1    |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)#成功#6.开另一台终端测试
[root@ home]# curl http://0.0.0.0:5000/
Hello World! I have been seen 1 times.
[root@ home]# curl http://0.0.0.0:5000/
Hello World! I have been seen 2 times.
[root@ home]# curl http://0.0.0.0:5000/
Hello World! I have been seen 3 times.
[root@ home]# curl http://0.0.0.0:5000/
#查看服务状态,启动状态
[root@ composetest]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
ef3c22478281        redis:alpine        "docker-entrypoint.s…"   15 minutes ago      Up 15 minutes       6379/tcp                 composetest_redis_1
848d684e81b5        composetest_web     "flask run"              15 minutes ago      Up 15 minutes       0.0.0.0:5000->5000/tcp   composetest_web_1#查看镜像(自动安装镜像)
[root@ composetest]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
composetest_web     latest              0499a4761d8b        19 minutes ago      195MB
redis               alpine              c1949ec48c51        21 hours ago        31.2MB
tomcat              latest              625b734f984e        5 days ago          648MB
python              3.7-alpine          4d91c1ce4cc8        6 days ago          41.1MB#
[root@ composetest]# docker service ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.#查看网络:compose自动生成了一个网络,项目中的内容都在同一个网络中
[root@ composetest]# docker network ls
NETWORK ID          NAME                  DRIVER              SCOPE
17eafe1c056a        bridge                bridge              local
8f2db8d83cf3        composetest_default   bridge              local
2f902f83ffdf        host                  host                local
7e2d715f2494        mynet                 bridge              local
318716c6177e        none                  null                local
8438acdc1088        redis                 bridge              local[root@ composetest]# docker network inspect composetest_default

​ 以前都是单个docker run启动一个容器,现在通过docker compose编写yaml配置文件,意见启动所有服务,停止!就三个步骤

​ Creating composetest_web_1 …done

​ Creating composetest_redis_1 …done

文件名composetest

自动的默认规则 ;默认服务名 文件名__服务名__num

多个服务器。集群都可能有同一个项目;A B 其中_num代表副本数量


集群(多个服务器)状态里,服务不可能只有一个redis运行实例。弹性,高可用高并发,因此多个副本就需要一个数字号来表示以便知道这个副本服务是来自那个服务器里

未来可以kuberctl service 负载均衡

​ MySQL有十个容器实例:mysql:3306 不用加ip;

如果在同一个网络,可以直接通过域名访问。保证了高可用

停止

要在yml文件目录下停止!!

docker-compose downctrl+c  //直接关掉所有容器

小结:
Docker镜像,run->容器
dockerfile 构建镜像 (服务打包)
docker-compose 启动项目(编排,多个微服务/环境)
docker网络

yaml规则

3层

#与docker engine对应版本
第一层:版本层
version: ''第二层:服务层
#服务:build,
services:服务1:#服务配置imagebuildnetwork...服务2:redis...服务3:redis...第三层:其他配置
#其他配置 网络,卷,全局规则
volumes:
networks:
configs:


docker doc上service很全:
depend_on

build

deploy(replicas) 集群
entryoint
environment
expose
image

搭建wordpress

$ cd my_wordpress/$ vim docker-compose.yml
version: '3.3'services:db:image: mysql:5.7volumes:- db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: somewordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:depends_on: #先下载db,在下载wp- dbimage: wordpress:latestports:- "8000:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpress
volumes:db_data: {}$ docker-compose up -d 后台启动
[root@ my_wordpress]# docker-compose up -d
Creating my_wordpress_db_1 ... done
Creating my_wordpress_wordpress_1 ... done

Docker10: docker compose相关推荐

  1. Docker compose 容器编排

    1. 概述 问题:如果要使用 Docker 运行 LNMP 架构,那么 Nginx.MySQL.PHP. Linux三个服务运行在一个容器里,还是运行在多个容器里呢? 答案是都可以. 你可以分别放在三 ...

  2. Docker核心技术之Docker Compose

    一.Docker Compose 简介 Docker Compose是什么? Docker Compose是一个能一次性定义和管理多个Docker容器的工具. 详细地说: Compose中定义和启动的 ...

  3. Docker Compose 1.18.0 之服务编排详解

    一个使用Docker容器的应用,通常由多个容器组成.使用Docker Compose,不再需要使用shell脚本来启动容器.在配置文件中,所有的容器通过services来定义,然后使用docker-c ...

  4. Centos7 Docker Compose部署mysql5.7

    1 . 创建docker-compose.yml文件 version: '3' services:mysql:restart: alwaysimage: mysql:5.7.22container_n ...

  5. Docker Compose安装

    一 .  Docker Compose概述 Docker Compose是一个用于定义和运行多个容器Docker应用程序的工具.使用Compose,您可以使用YAML文件来配置应用程序的服务.然后 , ...

  6. Docker(八):Docker Compose

    Docker Compose Compose 简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具.通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务.然 ...

  7. Docker compose多容器管理

    前言 Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr). Docker Compose 运行的目录下的所有文件(doc ...

  8. Docker Compose—简化复杂容器应用的利器

    Compose是用于定义和运行复杂Docker应用的工具.你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成. 1. 安装Docker和Compo ...

  9. Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践

    我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your felling . 前期了解概念什么的确实 ...

最新文章

  1. 北大博士干了半年外卖骑手,写出 AI 伦理论文登上顶刊,“系统知道一切”
  2. 绘制ROC 曲线 计算 AUC PR曲线(精准率 召回率)示例
  3. M1芯片搞数据科学好使吗?5种基准测试给你答案
  4. Hrefer教程【超越官方】
  5. python爬虫工程师-Python爬虫工程师
  6. 月饼怎么吃才不胖,数据分析师教你选月饼
  7. 分布式系统理论基础 - 一致性、2PC和3PC
  8. C++调用Asprise OCR识别图片
  9. 计算机网络同步技术,计算机网络同步技术
  10. 华为USG6550 MIB CPU MEM
  11. 华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历
  12. I/O----复制文本文件
  13. 【BZOJ2095】[Poi2010]Bridges 动态加边网络流
  14. 用Java编写考试报名系统_基于jsp的计算机考试报名系统-JavaEE实现计算机考试报名系统 - java项目源码...
  15. pdf转word转换器绿色版
  16. Spring Boot 2 基础篇学习笔记
  17. 【强化学习论文精读】Timeliness Guaranteed Traffic Flow Forecasting Based on Federated Online Learning
  18. 使用RecyclerView实现列表展开动画
  19. 计算机网络第七版3-2
  20. OpenCV4学习笔记(55)——基于KNN最近邻算法实现鼠标手写数字识别

热门文章

  1. 架构的本质是管理复杂性,微服务本身也是架构演化的结果
  2. 游戏服务器框架升级-无入侵式代理解决方案
  3. uni-app中让input标签在点击时清空
  4. 怎样成为一名专业的程序员
  5. 什么是Webpack?怎么使用Webpack?
  6. 动态规划——最长上升子序列模型
  7. Linux基础命令---ar
  8. SPFA算法求最短路
  9. 编译器警告c4996
  10. 七 渐入佳境(7.4-7.10)